{"version":3,"sources":["generated/graphql.ts","api/rest.ts","api/client.ts","api/user.service.ts","services/AuthService.ts","context/AuthContext.tsx","components/LargeLoading.tsx","context/LoadingContext.tsx","context/NotificationContext.tsx","components/ContextProvider.tsx","api/activeKidsVouchers.service.ts","EmptyInfo.tsx","routes/ERoutePath.ts","components/FormContainer.tsx","components/FormRow.tsx","components/ActiveKidsVoucherDetail.tsx","components/DialogTitle.tsx","components/FormTitle.tsx","components/CustomizedDataGrid.tsx","components/VoucherList.tsx","components/ActiveKIdsVouchers.tsx","components/BlogActivitiesPage.tsx","htmls/blogActivitiesHtml.tsx","components/BlogBeginnersPage.tsx","htmls/blogBeginnersHtml.tsx","components/BlogPage.tsx","htmls/blog.tsx","components/BlogTechniquesPage.tsx","htmls/blogTechniquesHtml.tsx","components/BlogThingsPage.tsx","htmls/blogThingsHtml.tsx","components/BlogWhyPage.tsx","htmls/blogWhyHtml.tsx","const.ts","components/PasswordTextInput.tsx","components/ChangePassword.tsx","components/ClassesTimeTable.tsx","htmls/timeTable.tsx","utils/validator.ts","components/SendQuestion.tsx","api/utils.service.ts","htmls/headerHtml.tsx","components/ContactUs.tsx","htmls/footerHtml.tsx","api/course.service.ts","utils/differenceInDays.ts","utils/termLessonCalculation.ts","components/CourseDayDetail.tsx","components/CourseLevelSelect.tsx","components/CourseDetail.tsx","components/CourseList.tsx","components/Course.tsx","api/enrolment.service.ts","api/holidayCourse.service.ts","api/player.service.ts","utils/getPlayerName.ts","components/CourseListInWeekView.tsx","api/payment.service.ts","components/SetupForm.tsx","components/PaymentMethodList.tsx","utils/paymentAmount.ts","components/PaymentForm.tsx","components/EnrolmentDetail.tsx","utils/formatDate.ts","components/EnrolmentList.tsx","components/Enrolment.tsx","components/EmailTextInput.tsx","components/ForgotPassword.tsx","components/HolidayCampPage.tsx","htmls/holidayCamp.tsx","components/HolidayCampsTimeTable.tsx","htmls/holidayCampsTimeTableHtml.tsx","components/HolidayCourseList.tsx","components/HolidayEnrolmentList.tsx","components/HolidayCourseEnrolment.tsx","components/HolidayCourseDetail.tsx","components/HolidayCourses.tsx","components/HomePage.tsx","htmls/firstPage.tsx","components/MakeupRules.tsx","utils/getUserFullName.ts","components/PaymentList.tsx","components/Payments.tsx","components/GenderSelect.tsx","components/PlayerComponent.tsx","components/PlayerList.tsx","components/Players.tsx","components/InformationBox.tsx","components/Profile.tsx","components/ResetPassword.tsx","components/SchoolEnrolment.tsx","components/SignIn.tsx","components/SignOut.tsx","components/SignUp.tsx","api/tournament.service.ts","components/TournamentList.tsx","components/TournamentEnrolmentList.tsx","components/TournamentEnrolment.tsx","components/TournamentDetail.tsx","components/Tournaments.tsx","layouts/HomePageLayout.tsx","utils/filterRoutes.ts","components/RenderRouteItem.tsx","components/Navigator.tsx","components/NameInitial.tsx","components/UserMenu.tsx","components/Header.tsx","layouts/SideMenuLayout/NavMenu.tsx","layouts/SideMenuLayout/index.tsx","routes/ERouteTitle.ts","routes/index.tsx","components/Routes.tsx","reportWebVitals.ts","services/AuthConfig.ts","Theme/index.tsx","index.tsx"],"names":["ECourseLevel","ECourseStatus","EEnrolmentType","EGender","EPaymentStatus","ERole","EStatus","EVoucherStatus","EWeekDay","PlayerFragmentFragmentDoc","gql","_templateObject","_taggedTemplateLiteral","UserFragmentFragmentDoc","_templateObject2","TermFragmentFragmentDoc","_templateObject3","CourseFragmentFragmentDoc","_templateObject4","EnrolmentFragmentFragmentDoc","_templateObject5","PaymentFragmentFragmentDoc","_templateObject6","PaymentInfoFragmentFragmentDoc","_templateObject7","HolidayCourseFragmentFragmentDoc","_templateObject8","ActiveKidsVouchersFragmentFragmentDoc","_templateObject9","TournamentFragmentFragmentDoc","_templateObject10","TournamentEnrolmentFragmentFragmentDoc","_templateObject11","GetTournamentEnrolmentFragmentFragmentDoc","_templateObject12","GetVouchersDocument","_templateObject13","AddVoucherDocument","_templateObject14","DeleteVouchersDocument","_templateObject15","UpdateVoucherDocument","_templateObject16","ChangeVoucherStatusDocument","_templateObject17","GetCoursesDocument","_templateObject18","AddCourseDocument","_templateObject19","UpdateCourseDocument","_templateObject20","DeleteCourseDocument","_templateObject21","DisableTermDocument","_templateObject22","AddEnrolmentDocument","_templateObject23","DeclineEnrolmentDocument","_templateObject24","GetEnrolmentsDocument","_templateObject25","AddHolidayCourseDocument","_templateObject26","GetHolidayCourseDocument","_templateObject27","DeleteHolidayCourseDocument","_templateObject28","UpdateHolidayCourseDocument","_templateObject29","SetHolidayCourseStatusDocument","_templateObject30","GetPaymentsDocument","_templateObject31","UpdatePaymentStatusDocument","_templateObject32","GetPaymentMethodsDocument","_templateObject33","AddPaymentMethodDocument","_templateObject34","DeletePaymentMethodDocument","_templateObject35","CreatePaymentIntentDocument","_templateObject36","GetPlayersDocument","_templateObject37","AddPlayerDocument","_templateObject38","SavePlayerDocument","_templateObject39","GetTournamentsDocument","_templateObject40","AddTournamentDocument","_templateObject41","UpdateTournamentDocument","_templateObject42","_templateObject43","ChangeTournamentStatusDocument","_templateObject44","AddTournamentEnrolmentDocument","_templateObject45","GetTournamentEnrolmentsDocument","_templateObject46","SaveUserProfileDocument","_templateObject47","UpdateUserProfileDocument","_templateObject48","GetUserProfileDocument","_templateObject49","SendMessageDocument","_templateObject50","fetch","window","bind","nodeFetch","httpLink","createHttpLink","credentials","uri","authLink","setContext","async","_currentUser$getSignI","_currentUser$getSignI2","currentUser","Auth","currentAuthenticatedUser","token","getSignInUserSession","getIdToken","getJwtToken","headers","authorization","_unused","signOut","cleanTypeName","ApolloLink","operation","forward","variables","omitTypename","key","value","undefined","JSON","parse","stringify","map","data","client","ApolloClient","ssrMode","link","from","cache","InMemoryCache","defaultOptions","watchQuery","fetchPolicy","query","getUserProfile","_ref2","email","password","validationData","arguments","length","signIn","username","_ref","param","signUp","forgotPassword","newPassword","oldPassword","_ref4","user","changePassword","code","_ref5","forgotPasswordSubmit","AuthContext","createContext","AuthContextProvider","props","authData","setAuthData","useImmer","isAuthenticated","isLoading","useEffect","cogUser","userProfile","AuthService","e","draft","_cogUser","_cogUser2","userName","getUsername","attributes","authenticate","isUserRole","userRole","_authData$userProfile","role","isAdminRole","Admin","isParentRole","Parent","isCoachRole","Coach","authValue","signin","result","success","hasUserProfile","signInUser","error","message","signup","signout","setUserProfile","profile","_jsx","Provider","children","withStyles","palette","createStyles","loaderContainer","position","width","height","top","left","background","zIndex","display","justifyContent","alignItems","flexDirection","circleRoot","color","primary","main","loaderText","marginTop","fontSize","fontWeight","classes","text","_jsxs","Paper","className","CircularProgress","style","root","Typography","variant","LoadingContext","showLoading","_text","hideLoading","NotificationContext","React","NotificationProvider","withSnackbar","enqueueSnackbar","closeSnackbar","closeHandler","action","_Fragment","IconButton","onClick","CloseIcon","showSuccessNotification","autoHideDuration","showErrorNotification","showWarningNotification","showNotification","duration","level","withLoadingContextProvider","Component","loading","setLoading","LargeLoading","getActiveKidsVouchers","_await$client$query$d","ownerId","getVouchers","spacing","container","margin","title","elevation","ERoutePath","minWidth","FormRow","_props$alignItems","_props$justify","Grid","item","xs","justify","theme","_voucher$firstName","_voucher$middleName","_voucher$lastName","_voucher$voucherNumbe","_voucher$expiryDate","_voucher$dob","_voucher$status","onClose","onNewVoucher","voucher","onVoucherUpdated","onVoucherDeleted","isNewVoucher","initialValues","firstName","middleName","lastName","voucherNumber","expiryDate","dob","status","Submitted","useContext","validationSchema","yup","shape","required","test","name","values","handleSubmit","handleChange","touched","errors","setFieldValue","useFormik","onSubmit","v","addVoucherParam","newVoucher","_await$client$mutate$","mutate","mutation","_objectSpread","inputData","addVoucher","addActiveKidsVoucher","_voucher$id","voucherToBeUpdated","voucherId","id","updatedVoucher","_await$client$mutate$4","updateVoucher","updateActiveKidsVoucher","FormContainer","direction","sm","TextField","label","type","fullWidth","onChange","Boolean","disabled","Claimed","Button","_voucher$id2","_voucher$id3","_await$client$mutate$2","_await$client$mutate$3","voucherIds","deleteVouchers","deleteActiveKidsVouchers","_voucher$id4","_await$client$mutate$5","changeVoucherStatus","DialogTitle","card","maxWidth","actions","float","dialog","padding","closeButton","right","grey","rest","_objectWithoutProperties","_excluded","MuiDialogTitle","disableTypography","breakpoints","down","CustomizedDataGrid","borderRadius","border","boxShadow","row","selected","backgroundColor","DataGrid","overflowY","vouchers","onSelectedVoucher","rows","concat","columns","field","headerName","pageSize","onRowClick","rowIndex","autoHeight","paperWidthSm","addNewVoucher","setAddNewVoucher","useState","setVouchers","history","useHistory","selectedVoucher","setSelectedVoucher","handleClose","uid","push","retrieveActiveKidsVouchers","FormTitle","VoucherList","EmptyInfo","handleAddNewVoucher","Dialog","open","DialogContent","ActiveKidsVoucherDetail","updatedCourse","idx","findIndex","dc","foundIdx","c","splice","textAlign","clsImage","marginLeft","marginRight","htmlDoc","__html","dangerouslySetInnerHTML","DEFAULT_PASSWORD","EPasswordType","PasswordTextInput","_props$id","_props$label","_props$margin","_props$variant","passwordType","setPasswordType","isPasswordType","onBlur","helperText","InputProps","endAdornment","InputAdornment","VisibilityOff","Visibility","validationsForm","min","dlgAction","repeatNewPassword","handleBlur","goBack","setOpen","PaperProps","dividers","minHeight","align","DialogActions","isPasswordCorrect","_values$repeatNewPass","isMobilePhone","validator","firstNameValidator","lastNameValidator","emailValidator","isEmail","mobilePhoneValidator","paper","phone","nullable","setTimeout","sendMessage","Box","multiline","SimpleLineOfText","marginBottom","footerDoc","SendQuestion","getCourses","differenceInDays","dateEnd","dateStart","diffInTime","getTime","Math","round","weekDayToNumber","day","Sun","Mon","Tues","Wed","Thu","Fri","Sat","isWeekDayInDate","startDate","endDate","startDay","Date","endDay","diffInDays","n","a","add","days","toISOString","DateTime","fromISO","weekday","termLessonCalculation","dtStart","dtEnd","getDay","dayMapping","shift","wks","floor","remainedDays","getDates","diffDay","weeks","termDays","index","num","dates","available","numOfPublicHolidays","overflow","expand","transform","transition","transitions","create","shortest","activeCard","light","inactiveCard","common","white","notAvailableDay","expandOpen","courseDaysData","updateCourseDaysAvailable","expanded","setExpaned","availableDays","setAvailableDays","filter","d","setActiveCard","handleExpandClick","termDay","_courseDaysData$termD","_courseDaysData$termD2","actualNumOfLessons","Card","ad","CardHeader","subheader","CardContent","lessonStartTime","lessonEndTime","capacity","unitPrice","hidden","numOfLessons","CardActions","disableSpacing","Tooltip","found","isAvailable","clsx","ExpandMoreIcon","courseLevels","Private","ELite","Beginner","Intermediate1","Intermediate2","Intermediate3","Advanced1","Advanced2","Advanced3","Nsgh","RosevilleCollege","Nsbh","CourseLevelSelect","_props$name","select","option","MenuItem","convertCoursesToCourseDays","courses","newCourseDays","defaultCourseDay","courseDay","checkDay","numOfWeekDay","numOfDayInDate","remainderDays","wholeWks","extra","plus","forEach","startTime","endTime","existingCourseDays","_course$term$level","_course$term","_course$term$level2","termDescription","onNewCourse","course","onCourseUpdated","onCourseDeleted","onTermDisabled","isNewCourse","sort","aCourse","bCourse","getTermDays","termLessonData","setTermLessonData","courseLevel","term","defaultCourseDayData","termStartDate","termEndDate","courseData","_","weekDayData","Object","entries","addCourseParam","newCourse","addCourse","updateCourseParam","termId","updateCourse","target","CourseDayDetail","_ref3","deleteCourse","_await$client$mutate$6","disableTerm","onSelectedCourse","getTermDate","getCourseStartTime","join","getCourseDay","description","termDate","time","_selectedCourse$term$","_selectedCourse$term$2","_selectedCourse$term$3","_selectedCourse$term","addNewCourse","setAddNewCourse","setCourses","selectedCourse","setSelectedCourse","retrieveCourses","now","toISODate","CourseList","handleAddNewCourse","CourseDetail","getEnrolments","_rest$type","userId","playerId","addEnrolment","courseIds","playerIds","paymentAmount","getHolidayCourses","getPlayers","parentId","getPlayerName","player","selectedGrid","info","disableSelectGrid","begininerLevel","intermediateLevel","advancedLevel","privateLevel","eliteLevel","selectedCourseIds","setSelectedCourseIds","coursesInWkDay","reduce","acc","curr","getCardClassName","t","availableCapacity","toLowerCase","keys","wkDayName","_c$term","_c$term2","_c$term3","_c$course5","_c$course6","_c$course7","_c$course$numOfLesson","_c$course8","_c$course$numOfPublic","_c$course9","isCourseSelected","cid","_c$course","checkboxColor","_c$course3","_c$course2","bSelectCourse","_c$course4","Checkbox","inputProps","checked","updatePaymentStatus","paymentId","SetupForm","onResult","stripe","useStripe","elements","useElements","errorMessage","setErrorMessage","event","preventDefault","resp","confirmSetup","redirect","console","log","PaymentElement","stripePromise","loadStripe","button","methods","reload","loadSetupIntent","addPaymentMethodResp","addPaymentMethod","setClientSetupIntent","clientSecret","selectedMethod","setSelectedMethod","handleToggle","method","clientSetupIntent","toAddNewCard","setToAddNewCard","removeCard","cardToBeRemoved","deletePaymentMethod","last4","exp_year","options","List","ListItem","dense","exp_month","ListItemSecondaryAction","edge","DeleteIcon","addNewCard","Elements","succeed","applyGst","amount","applyStripeDomestic","applyStripeInternational","applyPaymentAmount","doemestic","applyGST","amountInCents","amountToDollar","toFixed","actionsContainer","resetContainer","totalAmount","submitForm","selectedPaymentMethod","setSelectedPaymentMethod","setMethods","retrievePaymentMethods","paymentMethods","getPaymentMethods","PaymentMethodList","_resp$payment","paymentResp","paymentMethodId","paymentCode","createPaymentIntent","payment","reference","paymentMethod","err","_enrolmentData$select","_enrolmentData$select2","_enrolmentData$select3","_enrolmentData$select4","_enrolmentData$select5","_enrolmentData$select6","enrolmentData","onEnrolmentAdded","enroled","setEnroled","getTotalPrice","_selectedCourses$redu","selectedDays","selectedCourses","selectedPlayers","allPrice","currentCourse","_currentCourse$course","isPlayersSelected","canBeEnroled","players","x","PaymentForm","p","addEnrolmentData","Term","r","handleSubmit2","formatDate","date","format","toFormat","_selectedEnrolment$us","_selectedEnrolment$us2","enrolments","holidayCourses","enrolment","enrolDate","playersName","indexOf","courseDays","find","holidayDays","hc","s","trim","getRowsColumns","showDialog","setShowDialog","selectedEnrolment","setSelectedEnrolment","handleCloseDialog","onRowSelected","rowData","foundElement","_selectedEnrolment$en","_selectedEnrolment$en2","_foundEnrolmentData2","_foundEnrolmentData3","_detailCourse","_detailCourse2","_detailCourse3","_detailCourse4","_detailCourse5","_foundEnrolmentData4","isHolidayType","Holiday","foundEnrolmentData","detailCourse","_enrolmentData$holida","_foundEnrolmentData","cc","_enrolmentData$enrolm","_enrolmentData$enrolm2","activeStep","setActiveStep","openEnrolmentDlg","setOpenEnrolmentDlg","loadedData","setLoadedData","filterDays","setFilterDays","filterLevel","setFilterLevel","Intermediate","Advanced","Elite","setEnrolmentData","filteredCourses","selectedPlayerList","setSelectedPlayerList","handleSelectedCourse","_draft$selectedCourse","_draft$selectedCourse2","_draft$selectedCourse3","Promise","all","startOf","schoolList","retrieveData","selectCourseStep","CourseListInWeekView","updateFilterLevel","evt","newFilterLevels","handleSelectdPlayer","foundPlayer","xx","yy","isPlayerSelected","selectPlayerStep","ListItemIcon","tabIndex","disableRipple","ListItemText","enrolmentDetailStep","EnrolmentDetail","newEnrolment","EnrolmentList","FormControlLabel","control","EmailTextInput","EmailIcon","_result$error","home","getCourseDate","getCourseTime","price","_enrolmentData$course","HolidayCourseList","HolidayEnrolmentList","_course$description","_course$startDate","_course$endDate","_course$startTime","_course$endTime","_course$price","_course$capacity","onCourseStatusUpdated","priceText","capacityText","Number","addHolidayCourse","_updatedCourse$course","courseId","updateHolidayCourse","handleTimeChange","fieldName","tm","deleteHolidayCourse","currentStatus","setHolidayCourseStatus","Active","Inactive","_await$getHolidayCour","retrieveHolidayCourses","handleAddNewHolidayCourse","HolidayCourseDetail","getUserFullName","_selectedPaymentInfo$","payments","onUpdate","enrolmentId","paidDate","payerInfo","enrolmentInfo","coursesInfo","playersInfo","payer","Paid","showDetailDlg","setShowDetailDlg","setPaymentId","selectedPaymentInfo","setSelectedPaymentInfo","courseInfo","foundTerm","termsInfo","Confirmed","declineEnrolment","Declined","setPayments","loadPayments","_await$getPayments","getPayments","PaymentList","genders","Male","Female","GenderSelect","maxHeight","_player$firstName","_player$lastName","_player$gender","_player$dob","_player$school","_player$disabilityCla","_player$disabilityDes","isAddingNewPlayer","gender","school","hasDisability","disability","disabilityClass","disabilityDescription","playerResult","msg","playerInfo","addPlayer","savePlayer","InputLabelProps","shrink","onSelectedPlayer","multipleRowsSelection","rowSelectedParams","checkboxSelection","setPlayers","_await$getPlayers2","loadAllPlayers","_await$getPlayers","loadPlayers","toAddNewPlayer","setToAddNewPlayer","toUpdatePlayer","setToUpdatePlayer","selectedPlayer","setSelectedPlayer","PlayerList","selectedRow","handleExportPlayers","allPlayersCsv","blob","Blob","document","createElement","download","href","URL","createObjectURL","clickEvt","MouseEvent","view","bubbles","cancelable","dispatchEvent","remove","handleAddNewPlayer","PlayerComponent","foundIndex","_userProfile$firstNam","_userProfile$lastName","_userProfile$phone","_user$email","_userProfile$address","_userProfile$cityTown","address","cityTown","enableReinitialize","updatedUserProfile","updateUserProfile","savedUserProfile","saveUserProfile","InformationBox","_data$email$toString","_data$email","_data$code$toString","_data$code","location","useLocation","queryString","search","passwordState","toString","nsbh","nsgh","rosevillecollege","reason","handleDlgClose","Link","to","replace","doSignOut","repeatPassword","oneOf","getTournaments","getTournamentEnrolments","_await$client$query$d2","tournaments","onSelectedTournament","rowParam","foundTournament","isSelected","tournamentEnrolments","onSelectedEnrolment","enrolmentIdx","_enrolment$tournament","tournamentIds","autoPageSize","confirmed","setConfirmed","selectedTournaments","handleSelectedTournament","tournament","foundTournamentIndex","totalPrice","TournamentEnrolmentList","TournamentList","en","includes","addTournamentEnrolment","_tournament$startDate","_tournament$name","_tournament$price","onNewTournament","onTournamentUpdated","onTournamentDeleted","isNewTournament","addTournamentParam","createdTournament","addTournament","updateParam","updatedTournament","updateTournament","changeTournamentStatus","setTournaments","addNewTournament","setAddNewTournament","selectedTournament","setSelectedTournament","retrieveTournaments","handleAddNewTournment","TournamentDetail","newTournment","handleDeleted","styles","mixins","gridTemplateAreas","gridTemplateColumns","header","gridArea","section","justifyItems","contentContainer","sectionNoPadding","footer","bottom","HomePageLayout","filterByNavMenu","route","onNavMenu","onNavMenuRoutes","allRoutes","access","filterByRole","iconRoot","listItemRoot","isCurrentPath","path","icon","component","forwardRef","ref","NavLink","innerRef","categoryHeader","paddingTop","paddingBottom","categoryHeaderPrimary","itemCategory","itemPrimary","itemIcon","divider","_userProfile$role","other","myRoutes","routes","Public","Drawer","disablePadding","myRoute","RenderRouteItem","NameInitial","initial","_initials$shift","_initials$pop","initials","match","pop","toUpperCase","getUserNameInitials","PersonOutline","memo","UserMenu","anchorEl","setAnchorEl","menuItems","onUserMenu","Fragment","currentTarget","Menu","itemCount","lightColor","secondaryBar","menuButton","iconButtonAvatar","textDecoration","borderColor","setCurrentUser","drawerOpen","setDrawerOpen","handleSignUp","handleSignIn","handleGoHome","handleDrawer","handleDrawerOpen","handleDrawerClose","AppBar","Toolbar","Hidden","mdUp","MenuIcon","implementation","Navigator","src","cursor","useStyles","makeStyles","drawerPaper","menuContainer","gridTemplateRows","nav","Header","smDown","NavMenu","ERouteTitle","HomePage","layout","timeTable","ClassesTimeTable","holidayCampsTimeTable","HolidayCampsTimeTable","contactUs","ContactUs","holidayCamp","HolidayCampPage","blog","BlogPage","blogActivities","BlogActivitiesPage","blogForBeginners","BlogBeginnersPage","blogTechniques","BlogTechniquesPage","blogThings","BlogThingsPage","blogWhy","BlogWhyPage","home2","SignUp","needRemount","SignIn","ForgotPassword","Profile","PersonIcon","LayoutComponent","Players","PeopleIcon","Course","DashboardIcon","activeKidsVoucheres","ActiveKIdsVouchers","SportsTennis","HolidayCourses","holidayCoursesEnrolment","HolidayCourseEnrolment","Tournaments","tournamentEnrolment","TournamentEnrolment","schoolEnrolment","SchoolEnrolment","Enrolment","SettingsIcon","makeupRules","MakeupRules","MakeupRulesIcon","Payments","PaymentIcon","ChangePassword","resetPassword","ResetPassword","SignOut","Routes","Switch","isProtectedRoute","isAllowed","Route","exact","render","_createElement","Redirect","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","AuthConfig","configure","region","userPoolId","userPoolWebClientId","mandatorySignIn","oauth","scope","responseType","AdvancedSecurityDataCollectionFlag","createMuiTheme","dark","secondary","typography","h4","letterSpacing","MuiTab","toolbar","overrides","MuiFormControlLabel","MuiDrawer","MuiButton","textTransform","contained","MuiTabs","indicator","borderTopLeftRadius","borderTopRightRadius","up","MuiIconButton","MuiTooltip","tooltip","MuiDivider","MuiListItem","MuiListItemText","MuiListItemIcon","MuiAvatar","ReactDOM","StrictMode","BrowserRouter","ThemeProvider","SnackbarProvider","maxSnack","anchorOrigin","vertical","horizontal","ContextProvider","getElementById"],"mappings":"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","file":"static/js/main.973ab1e9.chunk.js","sourcesContent":["import { gql } from '@apollo/client';\nimport * as Apollo from '@apollo/client';\nexport type Maybe = T | null;\nexport type Exact = { [K in keyof T]: T[K] };\nexport type MakeOptional = Omit & { [SubKey in K]?: Maybe };\nexport type MakeMaybe = Omit & { [SubKey in K]: Maybe };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: string;\n String: string;\n Boolean: boolean;\n Int: number;\n Float: number;\n /** Mongo object id scalar type */\n ObjectId: any;\n};\n\n/** Active kis Vouchers */\nexport type ActiveKidsVouchers = {\n __typename?: 'ActiveKidsVouchers';\n id: Scalars['ObjectId'];\n ownerId: Scalars['ObjectId'];\n firstName: Scalars['String'];\n middleName?: Maybe;\n lastName: Scalars['String'];\n dob: Scalars['String'];\n expiryDate: Scalars['String'];\n voucherNumber: Scalars['String'];\n createdTime: Scalars['String'];\n claimedTime: Scalars['String'];\n status: EVoucherStatus;\n};\n\nexport type AddActiveKidsVouchersInput = {\n firstName: Scalars['String'];\n middleName?: Maybe;\n lastName: Scalars['String'];\n voucherNumber: Scalars['String'];\n dob: Scalars['String'];\n expiryDate: Scalars['String'];\n};\n\nexport type AddCourseInput = {\n termDescription: Scalars['String'];\n termStartDate: Scalars['String'];\n termEndDate: Scalars['String'];\n courseLevel: ECourseLevel;\n courseData: Array;\n};\n\n/** Add course response type */\nexport type AddCourseResp = {\n __typename?: 'AddCourseResp';\n term: Term;\n courses: Array;\n};\n\nexport type AddEnrolmentInput = {\n type: Scalars['String'];\n userId: Scalars['String'];\n courseIds: Array;\n playerIds: Array;\n paymentAmount: Scalars['String'];\n};\n\nexport type AddHolidayCourseInput = {\n courseData: Array;\n};\n\n/** Add Holiday course response type */\nexport type AddHolidayCourseResp = {\n __typename?: 'AddHolidayCourseResp';\n courses: Array;\n};\n\n/** Create payment customerresponse type */\nexport type AddPaymentMethodResp = {\n __typename?: 'AddPaymentMethodResp';\n clientSecret: Scalars['String'];\n};\n\nexport type AddPlayerInput = {\n firstName: Scalars['String'];\n lastName: Scalars['String'];\n school: Scalars['String'];\n gender: EGender;\n dob: Scalars['String'];\n parentId: Scalars['String'];\n disability: Scalars['Boolean'];\n disabilityClass?: Maybe;\n disabilityDescription?: Maybe;\n};\n\nexport type AddTournamentEnrolmentInput = {\n userId: Scalars['String'];\n tournamentIds?: Maybe>;\n tournamentId?: Maybe;\n playerIds: Array;\n amount: Scalars['Float'];\n totalAmount: Scalars['Float'];\n};\n\n/** Get tournament enrolments response type */\nexport type AddTournamentEnrolmentResp = {\n __typename?: 'AddTournamentEnrolmentResp';\n enrolment: TournamentEnrolment;\n payment: Payment;\n};\n\nexport type AddTournamentInput = {\n name: Scalars['String'];\n startDate: Scalars['String'];\n price: Scalars['Float'];\n};\n\nexport type ChangeTournamentInput = {\n id: Scalars['String'];\n status: EStatus;\n};\n\nexport type ChangeVoucherStatusInput = {\n voucherId: Scalars['String'];\n status: EVoucherStatus;\n};\n\n/** Course */\nexport type Course = {\n __typename?: 'Course';\n id: Scalars['ObjectId'];\n termId: Scalars['String'];\n courseDay: EWeekDay;\n numOfLessons: Scalars['Float'];\n unitPrice: Scalars['Float'];\n capacity: Scalars['Float'];\n availableCapacity: Scalars['Float'];\n available: Scalars['Boolean'];\n startTime: Scalars['String'];\n endTime: Scalars['String'];\n numOfPublicHolidays: Scalars['Float'];\n status?: Maybe;\n};\n\nexport type CourseDataInput = {\n courseDay: EWeekDay;\n lessonStartTime: Scalars['String'];\n lessonEndTime: Scalars['String'];\n capacity: Scalars['Float'];\n unitPrice: Scalars['Float'];\n numOfLessons: Scalars['Float'];\n available: Scalars['Boolean'];\n numOfPublicHolidays?: Maybe;\n};\n\n/** Courses response type */\nexport type CoursesResp = {\n __typename?: 'CoursesResp';\n term: Term;\n courses: Array;\n};\n\n/** Add payment method response type */\nexport type CreatePaymendIntentResp = {\n __typename?: 'CreatePaymendIntentResp';\n paymentMethod: Scalars['String'];\n paymentId: Scalars['String'];\n};\n\n/** Create payment customerresponse type */\nexport type CreatePaymentCustomerResp = {\n __typename?: 'CreatePaymentCustomerResp';\n customerId: Scalars['String'];\n};\n\nexport type CreatePaymentIntentInput = {\n amount: Scalars['Float'];\n paymentMethodId?: Maybe;\n paymentCode?: Maybe;\n};\n\nexport type DeclineEnrolmentInput = {\n id: Scalars['String'];\n};\n\nexport type DeleteActiveKidsVouchersInput = {\n voucherIds: Array;\n};\n\nexport type DeleteCourseInput = {\n termId: Scalars['String'];\n};\n\nexport type DeleteHolidayCourseInput = {\n courseId: Scalars['String'];\n};\n\nexport type DeletePaymentMethodInput = {\n id: Scalars['String'];\n};\n\nexport type DeleteTournamentInput = {\n id: Scalars['String'];\n};\n\nexport type DisableTermInput = {\n termId: Scalars['String'];\n};\n\nexport enum ECourseLevel {\n Private = 'Private',\n ELite = 'ELite',\n Beginner = 'Beginner',\n Intermediate1 = 'Intermediate1',\n Intermediate2 = 'Intermediate2',\n Intermediate3 = 'Intermediate3',\n Advanced1 = 'Advanced1',\n Advanced2 = 'Advanced2',\n Advanced3 = 'Advanced3',\n Nsgh = 'NSGH',\n Nsbh = 'NSBH',\n RosevilleCollege = 'RosevilleCollege'\n}\n\nexport enum ECourseStatus {\n Inactive = 'inactive',\n Active = 'active'\n}\n\nexport enum EEnrolmentType {\n Term = 'Term',\n Holiday = 'Holiday',\n Tournament = 'Tournament'\n}\n\nexport enum EGender {\n Male = 'Male',\n Female = 'Female'\n}\n\nexport enum EPaymentStatus {\n Pending = 'Pending',\n Paid = 'Paid',\n Declined = 'Declined',\n Confirmed = 'Confirmed'\n}\n\nexport enum ERole {\n Admin = 'Admin',\n Coach = 'Coach',\n Parent = 'Parent',\n Public = 'Public'\n}\n\nexport enum EStatus {\n Inactive = 'inactive',\n Active = 'active'\n}\n\nexport enum EVoucherStatus {\n Submitted = 'submitted',\n Claimed = 'claimed'\n}\n\nexport enum EWeekDay {\n Sun = 'Sun',\n Mon = 'Mon',\n Tues = 'Tues',\n Wed = 'Wed',\n Thu = 'Thu',\n Fri = 'Fri',\n Sat = 'Sat'\n}\n\n/** Enrolment */\nexport type Enrolment = {\n __typename?: 'Enrolment';\n id: Scalars['ObjectId'];\n type?: Maybe;\n userId: Scalars['ObjectId'];\n courseIds: Array;\n playerIds: Array;\n enrolDate: Scalars['String'];\n};\n\nexport type EnrolmentResult = {\n __typename?: 'EnrolmentResult';\n enrolment: Enrolment;\n payment: Payment;\n user: User;\n};\n\nexport type GetActiveKidsVouchersInput = {\n ownerId: Scalars['String'];\n};\n\n/** Get courses response type */\nexport type GetCoursesResp = {\n __typename?: 'GetCoursesResp';\n term: Term;\n courses: Array;\n};\n\nexport type GetEnrolmentsInput = {\n type?: Maybe;\n userId?: Maybe;\n playerId?: Maybe;\n};\n\n/** Get holiday courses response type */\nexport type GetHolidayCoursesResp = {\n __typename?: 'GetHolidayCoursesResp';\n courses: Array;\n};\n\nexport type GetPaymentInput = {\n enrolmentId: Scalars['String'];\n};\n\n/** get payment methods response type */\nexport type GetPaymentMethodsResp = {\n __typename?: 'GetPaymentMethodsResp';\n id: Scalars['String'];\n last4: Scalars['String'];\n exp_year: Scalars['Float'];\n exp_month: Scalars['Float'];\n};\n\nexport type GetPaymentsInput = {\n userId?: Maybe;\n};\n\nexport type GetPlayersInput = {\n parentId?: Maybe;\n};\n\nexport type GetTournamentEnrolmentsInput = {\n userId?: Maybe;\n};\n\n/** Get tournament enrolments response type */\nexport type GetTournamentEnrolmentsResp = {\n __typename?: 'GetTournamentEnrolmentsResp';\n id: Scalars['String'];\n userId: Scalars['String'];\n enrolDate: Scalars['String'];\n paymentCode: Scalars['String'];\n status: EPaymentStatus;\n tournaments: Array;\n tournamentIds?: Maybe>;\n players: Array;\n};\n\n/** Holiday Course */\nexport type HolidayCourse = {\n __typename?: 'HolidayCourse';\n id: Scalars['ObjectId'];\n description: Scalars['String'];\n startDate: Scalars['String'];\n endDate: Scalars['String'];\n startTime: Scalars['String'];\n endTime: Scalars['String'];\n capacity: Scalars['Float'];\n availableCapacity: Scalars['Float'];\n price: Scalars['Float'];\n available: Scalars['Boolean'];\n status: ECourseStatus;\n};\n\nexport type HolidayCourseDataInput = {\n description: Scalars['String'];\n startDate: Scalars['String'];\n endDate: Scalars['String'];\n startTime: Scalars['String'];\n endTime: Scalars['String'];\n price: Scalars['Float'];\n capacity: Scalars['Float'];\n};\n\n/** Courses response type */\nexport type HolidayCoursesResp = {\n __typename?: 'HolidayCoursesResp';\n courses: Array;\n};\n\nexport type Mutation = {\n __typename?: 'Mutation';\n addHolidayCourse: AddHolidayCourseResp;\n updateHolidayCourse: UpdateHolidayCourseResp;\n deleteHolidayCourse: Scalars['Boolean'];\n setHolidayCourseStatus?: Maybe;\n updatePaymentStatus: Payment;\n createPaymentCustomer: CreatePaymentCustomerResp;\n addPaymentMethod: AddPaymentMethodResp;\n deletePaymentMethod: Scalars['Boolean'];\n createPaymentIntent: CreatePaymendIntentResp;\n addPlayer: Player;\n savePlayer: Player;\n addTournament: Tournament;\n deleteTournament: Scalars['Boolean'];\n updateTournament: Tournament;\n addTournamentEnrolment: AddTournamentEnrolmentResp;\n changeTournamentStatus: Tournament;\n sendMessage: Scalars['Boolean'];\n addVoucher: VouchersResp;\n deleteVouchers: Scalars['Boolean'];\n updateVoucher: VouchersResp;\n changeVoucherStatus: VouchersResp;\n addCourse: AddCourseResp;\n updateCourse: UpdateCourseResp;\n deleteCourse: Scalars['Boolean'];\n disableTerm: Scalars['Boolean'];\n addEnrolment: EnrolmentResult;\n declineEnrolment: EnrolmentResult;\n saveUserProfile: User;\n updateUserProfile: User;\n};\n\n\nexport type MutationAddHolidayCourseArgs = {\n param: AddHolidayCourseInput;\n};\n\n\nexport type MutationUpdateHolidayCourseArgs = {\n param: UpdateHolidayCourseInput;\n};\n\n\nexport type MutationDeleteHolidayCourseArgs = {\n param: DeleteHolidayCourseInput;\n};\n\n\nexport type MutationSetHolidayCourseStatusArgs = {\n param: SetCourseStatusInput;\n};\n\n\nexport type MutationUpdatePaymentStatusArgs = {\n param: UpdatePaymentStatusInput;\n};\n\n\nexport type MutationDeletePaymentMethodArgs = {\n param: DeletePaymentMethodInput;\n};\n\n\nexport type MutationCreatePaymentIntentArgs = {\n param: CreatePaymentIntentInput;\n};\n\n\nexport type MutationAddPlayerArgs = {\n param: AddPlayerInput;\n};\n\n\nexport type MutationSavePlayerArgs = {\n param: SavePlayerInput;\n};\n\n\nexport type MutationAddTournamentArgs = {\n param: AddTournamentInput;\n};\n\n\nexport type MutationDeleteTournamentArgs = {\n param: DeleteTournamentInput;\n};\n\n\nexport type MutationUpdateTournamentArgs = {\n param: UpdateTournamentInput;\n};\n\n\nexport type MutationAddTournamentEnrolmentArgs = {\n param: AddTournamentEnrolmentInput;\n};\n\n\nexport type MutationChangeTournamentStatusArgs = {\n param: ChangeTournamentInput;\n};\n\n\nexport type MutationSendMessageArgs = {\n param: SendMessageInput;\n};\n\n\nexport type MutationAddVoucherArgs = {\n param: AddActiveKidsVouchersInput;\n};\n\n\nexport type MutationDeleteVouchersArgs = {\n param: DeleteActiveKidsVouchersInput;\n};\n\n\nexport type MutationUpdateVoucherArgs = {\n param: UpdateActiveKidsVouchersInput;\n};\n\n\nexport type MutationChangeVoucherStatusArgs = {\n param: ChangeVoucherStatusInput;\n};\n\n\nexport type MutationAddCourseArgs = {\n param: AddCourseInput;\n};\n\n\nexport type MutationUpdateCourseArgs = {\n param: UpdateCourseInput;\n};\n\n\nexport type MutationDeleteCourseArgs = {\n param: DeleteCourseInput;\n};\n\n\nexport type MutationDisableTermArgs = {\n param: DisableTermInput;\n};\n\n\nexport type MutationAddEnrolmentArgs = {\n param: AddEnrolmentInput;\n};\n\n\nexport type MutationDeclineEnrolmentArgs = {\n param: DeclineEnrolmentInput;\n};\n\n\nexport type MutationSaveUserProfileArgs = {\n param: SaveUserProfileInput;\n};\n\n\nexport type MutationUpdateUserProfileArgs = {\n param: UpdateUserProfileInput;\n};\n\n\n/** Payment */\nexport type Payment = {\n __typename?: 'Payment';\n id: Scalars['ObjectId'];\n status: EPaymentStatus;\n reference: Scalars['String'];\n amount: Scalars['String'];\n enrolmentId: Scalars['String'];\n createdDate: Scalars['String'];\n paidDate?: Maybe;\n confirmedDate?: Maybe;\n enrolmentType?: Maybe;\n};\n\n/** PaymentInfo response type */\nexport type PaymentInfoResp = {\n __typename?: 'PaymentInfoResp';\n id: Scalars['ObjectId'];\n status: EPaymentStatus;\n reference: Scalars['String'];\n amount: Scalars['String'];\n enrolmentId: Scalars['String'];\n createdDate: Scalars['String'];\n paidDate?: Maybe;\n confirmedDate?: Maybe;\n enrolmentType?: Maybe;\n enrolmentInfo: Enrolment;\n payerInfo: User;\n coursesInfo: Array;\n playersInfo: Array;\n termsInfo: Array;\n};\n\n/** Player Type */\nexport type Player = {\n __typename?: 'Player';\n id: Scalars['ObjectId'];\n firstName: Scalars['String'];\n lastName: Scalars['String'];\n school: Scalars['String'];\n gender: EGender;\n dob: Scalars['String'];\n parentId: Scalars['String'];\n disability: Scalars['Boolean'];\n disabilityClass?: Maybe;\n disabilityDescription?: Maybe;\n};\n\nexport type Query = {\n __typename?: 'Query';\n getHolidayCourses: GetHolidayCoursesResp;\n getPayment: PaymentInfoResp;\n getPayments: Array;\n getPaymentMethods: Array;\n getPlayers?: Maybe>;\n getTournaments?: Maybe>;\n getTournamentEnrolments?: Maybe>;\n getVouchers: Array;\n getCourses: Array;\n getEnrolments: Array;\n getUserProfile?: Maybe;\n};\n\n\nexport type QueryGetPaymentArgs = {\n param: GetPaymentInput;\n};\n\n\nexport type QueryGetPaymentsArgs = {\n param: GetPaymentsInput;\n};\n\n\nexport type QueryGetPlayersArgs = {\n param: GetPlayersInput;\n};\n\n\nexport type QueryGetTournamentEnrolmentsArgs = {\n param: GetTournamentEnrolmentsInput;\n};\n\n\nexport type QueryGetVouchersArgs = {\n param: GetActiveKidsVouchersInput;\n};\n\n\nexport type QueryGetEnrolmentsArgs = {\n param: GetEnrolmentsInput;\n};\n\nexport type SavePlayerInput = {\n playerId: Scalars['String'];\n firstName: Scalars['String'];\n lastName: Scalars['String'];\n school: Scalars['String'];\n gender: EGender;\n dob: Scalars['String'];\n parentId: Scalars['String'];\n disability: Scalars['Boolean'];\n disabilityClass?: Maybe;\n disabilityDescription?: Maybe;\n};\n\nexport type SaveUserProfileInput = {\n uid: Scalars['String'];\n firstName: Scalars['String'];\n lastName: Scalars['String'];\n role: ERole;\n address: Scalars['String'];\n cityTown: Scalars['String'];\n phone: Scalars['String'];\n email: Scalars['String'];\n};\n\nexport type SendMessageInput = {\n firstName: Scalars['String'];\n phone: Scalars['String'];\n email: Scalars['String'];\n message: Scalars['String'];\n};\n\nexport type SetCourseStatusInput = {\n courseId: Scalars['String'];\n status: Scalars['String'];\n};\n\n/** Update holiday course response type */\nexport type SetHolidayCourseStatusResp = {\n __typename?: 'SetHolidayCourseStatusResp';\n course: HolidayCourse;\n};\n\n/** Term */\nexport type Term = {\n __typename?: 'Term';\n id: Scalars['ObjectId'];\n description: Scalars['String'];\n startDate: Scalars['String'];\n endDate: Scalars['String'];\n level: Scalars['String'];\n};\n\n/** Touraments */\nexport type Tournament = {\n __typename?: 'Tournament';\n id: Scalars['ObjectId'];\n name: Scalars['String'];\n startDate: Scalars['String'];\n price: Scalars['Float'];\n status: EStatus;\n};\n\n/** Tournament Enrolment */\nexport type TournamentEnrolment = {\n __typename?: 'TournamentEnrolment';\n id: Scalars['ObjectId'];\n userId: Scalars['ObjectId'];\n tournamentId?: Maybe;\n tournamentIds: Array;\n playerIds: Array;\n enrolDate: Scalars['String'];\n paymentCode: Scalars['String'];\n status: EPaymentStatus;\n paymentId: Scalars['String'];\n paymentMethod: Scalars['String'];\n paymentStatus: Scalars['String'];\n amount: Scalars['Float'];\n totalAmount: Scalars['Float'];\n};\n\nexport type UpdateActiveKidsVouchersInput = {\n voucherId: Scalars['String'];\n firstName: Scalars['String'];\n middleName?: Maybe;\n lastName: Scalars['String'];\n voucherNumber: Scalars['String'];\n dob: Scalars['String'];\n expiryDate: Scalars['String'];\n};\n\nexport type UpdateCourseInput = {\n termId: Scalars['String'];\n termDescription: Scalars['String'];\n termStartDate: Scalars['String'];\n termEndDate: Scalars['String'];\n courseLevel: ECourseLevel;\n courseData: Array;\n};\n\n/** Update course response type */\nexport type UpdateCourseResp = {\n __typename?: 'UpdateCourseResp';\n term: Term;\n courses: Array;\n};\n\nexport type UpdateHolidayCourseInput = {\n courseId: Scalars['String'];\n courseData: HolidayCourseDataInput;\n};\n\n/** Update holiday course response type */\nexport type UpdateHolidayCourseResp = {\n __typename?: 'UpdateHolidayCourseResp';\n courses: Array;\n};\n\nexport type UpdatePaymentStatusInput = {\n paymentId: Scalars['String'];\n status: EPaymentStatus;\n};\n\nexport type UpdateTournamentInput = {\n id: Scalars['String'];\n name: Scalars['String'];\n startDate: Scalars['String'];\n price: Scalars['Float'];\n};\n\nexport type UpdateUserProfileInput = {\n id: Scalars['String'];\n userProfile: SaveUserProfileInput;\n};\n\n/** User Type */\nexport type User = {\n __typename?: 'User';\n id: Scalars['ObjectId'];\n uid: Scalars['String'];\n firstName: Scalars['String'];\n lastName: Scalars['String'];\n role: ERole;\n address: Scalars['String'];\n cityTown: Scalars['String'];\n phone: Scalars['String'];\n email: Scalars['String'];\n paymentCustomerId?: Maybe;\n};\n\n/** Vouchers response type */\nexport type VouchersResp = {\n __typename?: 'VouchersResp';\n id: Scalars['String'];\n status: EVoucherStatus;\n firstName: Scalars['String'];\n middleName?: Maybe;\n lastName: Scalars['String'];\n ownerId: Scalars['String'];\n createdTime: Scalars['String'];\n claimedTime?: Maybe;\n voucherNumber: Scalars['String'];\n dob: Scalars['String'];\n expiryDate: Scalars['String'];\n};\n\nexport type GetVouchersQueryVariables = Exact<{\n param: GetActiveKidsVouchersInput;\n}>;\n\n\nexport type GetVouchersQuery = (\n { __typename?: 'Query' }\n & { getVouchers: Array<(\n { __typename?: 'VouchersResp' }\n & ActiveKidsVouchersFragmentFragment\n )> }\n);\n\nexport type AddVoucherMutationVariables = Exact<{\n param: AddActiveKidsVouchersInput;\n}>;\n\n\nexport type AddVoucherMutation = (\n { __typename?: 'Mutation' }\n & { addVoucher: (\n { __typename?: 'VouchersResp' }\n & ActiveKidsVouchersFragmentFragment\n ) }\n);\n\nexport type DeleteVouchersMutationVariables = Exact<{\n param: DeleteActiveKidsVouchersInput;\n}>;\n\n\nexport type DeleteVouchersMutation = (\n { __typename?: 'Mutation' }\n & Pick\n);\n\nexport type UpdateVoucherMutationVariables = Exact<{\n param: UpdateActiveKidsVouchersInput;\n}>;\n\n\nexport type UpdateVoucherMutation = (\n { __typename?: 'Mutation' }\n & { updateVoucher: (\n { __typename?: 'VouchersResp' }\n & ActiveKidsVouchersFragmentFragment\n ) }\n);\n\nexport type ChangeVoucherStatusMutationVariables = Exact<{\n param: ChangeVoucherStatusInput;\n}>;\n\n\nexport type ChangeVoucherStatusMutation = (\n { __typename?: 'Mutation' }\n & { changeVoucherStatus: (\n { __typename?: 'VouchersResp' }\n & ActiveKidsVouchersFragmentFragment\n ) }\n);\n\nexport type GetCoursesQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GetCoursesQuery = (\n { __typename?: 'Query' }\n & { getCourses: Array<(\n { __typename?: 'GetCoursesResp' }\n & { term: (\n { __typename?: 'Term' }\n & TermFragmentFragment\n ), courses: Array<(\n { __typename?: 'Course' }\n & CourseFragmentFragment\n )> }\n )> }\n);\n\nexport type AddCourseMutationVariables = Exact<{\n param: AddCourseInput;\n}>;\n\n\nexport type AddCourseMutation = (\n { __typename?: 'Mutation' }\n & { addCourse: (\n { __typename?: 'AddCourseResp' }\n & { term: (\n { __typename?: 'Term' }\n & TermFragmentFragment\n ), courses: Array<(\n { __typename?: 'Course' }\n & CourseFragmentFragment\n )> }\n ) }\n);\n\nexport type UpdateCourseMutationVariables = Exact<{\n param: UpdateCourseInput;\n}>;\n\n\nexport type UpdateCourseMutation = (\n { __typename?: 'Mutation' }\n & { updateCourse: (\n { __typename?: 'UpdateCourseResp' }\n & { term: (\n { __typename?: 'Term' }\n & TermFragmentFragment\n ), courses: Array<(\n { __typename?: 'Course' }\n & CourseFragmentFragment\n )> }\n ) }\n);\n\nexport type DeleteCourseMutationVariables = Exact<{\n param: DeleteCourseInput;\n}>;\n\n\nexport type DeleteCourseMutation = (\n { __typename?: 'Mutation' }\n & Pick\n);\n\nexport type DisableTermMutationVariables = Exact<{\n param: DisableTermInput;\n}>;\n\n\nexport type DisableTermMutation = (\n { __typename?: 'Mutation' }\n & Pick\n);\n\nexport type AddEnrolmentMutationVariables = Exact<{\n param: AddEnrolmentInput;\n}>;\n\n\nexport type AddEnrolmentMutation = (\n { __typename?: 'Mutation' }\n & { addEnrolment: (\n { __typename?: 'EnrolmentResult' }\n & { enrolment: (\n { __typename?: 'Enrolment' }\n & EnrolmentFragmentFragment\n ), payment: (\n { __typename?: 'Payment' }\n & PaymentFragmentFragment\n ), user: (\n { __typename?: 'User' }\n & UserFragmentFragment\n ) }\n ) }\n);\n\nexport type DeclineEnrolmentMutationVariables = Exact<{\n param: DeclineEnrolmentInput;\n}>;\n\n\nexport type DeclineEnrolmentMutation = (\n { __typename?: 'Mutation' }\n & { declineEnrolment: (\n { __typename?: 'EnrolmentResult' }\n & { enrolment: (\n { __typename?: 'Enrolment' }\n & EnrolmentFragmentFragment\n ) }\n ) }\n);\n\nexport type GetEnrolmentsQueryVariables = Exact<{\n param: GetEnrolmentsInput;\n}>;\n\n\nexport type GetEnrolmentsQuery = (\n { __typename?: 'Query' }\n & { getEnrolments: Array<(\n { __typename?: 'EnrolmentResult' }\n & { enrolment: (\n { __typename?: 'Enrolment' }\n & EnrolmentFragmentFragment\n ), payment: (\n { __typename?: 'Payment' }\n & PaymentFragmentFragment\n ), user: (\n { __typename?: 'User' }\n & UserFragmentFragment\n ) }\n )> }\n);\n\nexport type PlayerFragmentFragment = (\n { __typename?: 'Player' }\n & Pick\n);\n\nexport type UserFragmentFragment = (\n { __typename?: 'User' }\n & Pick\n);\n\nexport type TermFragmentFragment = (\n { __typename?: 'Term' }\n & Pick\n);\n\nexport type CourseFragmentFragment = (\n { __typename?: 'Course' }\n & Pick\n);\n\nexport type EnrolmentFragmentFragment = (\n { __typename?: 'Enrolment' }\n & Pick\n);\n\nexport type PaymentFragmentFragment = (\n { __typename?: 'Payment' }\n & Pick\n);\n\nexport type PaymentInfoFragmentFragment = (\n { __typename?: 'PaymentInfoResp' }\n & Pick\n);\n\nexport type HolidayCourseFragmentFragment = (\n { __typename?: 'HolidayCourse' }\n & Pick\n);\n\nexport type ActiveKidsVouchersFragmentFragment = (\n { __typename?: 'VouchersResp' }\n & Pick\n);\n\nexport type TournamentFragmentFragment = (\n { __typename?: 'Tournament' }\n & Pick\n);\n\nexport type TournamentEnrolmentFragmentFragment = (\n { __typename?: 'TournamentEnrolment' }\n & Pick\n);\n\nexport type GetTournamentEnrolmentFragmentFragment = (\n { __typename?: 'GetTournamentEnrolmentsResp' }\n & Pick\n & { tournaments: Array<(\n { __typename?: 'Tournament' }\n & Pick\n )>, players: Array<(\n { __typename?: 'Player' }\n & Pick\n )> }\n);\n\nexport type AddHolidayCourseMutationVariables = Exact<{\n param: AddHolidayCourseInput;\n}>;\n\n\nexport type AddHolidayCourseMutation = (\n { __typename?: 'Mutation' }\n & { addHolidayCourse: (\n { __typename?: 'AddHolidayCourseResp' }\n & { courses: Array<(\n { __typename?: 'HolidayCourse' }\n & HolidayCourseFragmentFragment\n )> }\n ) }\n);\n\nexport type GetHolidayCourseQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GetHolidayCourseQuery = (\n { __typename?: 'Query' }\n & { getHolidayCourses: (\n { __typename?: 'GetHolidayCoursesResp' }\n & { courses: Array<(\n { __typename?: 'HolidayCourse' }\n & HolidayCourseFragmentFragment\n )> }\n ) }\n);\n\nexport type DeleteHolidayCourseMutationVariables = Exact<{\n param: DeleteHolidayCourseInput;\n}>;\n\n\nexport type DeleteHolidayCourseMutation = (\n { __typename?: 'Mutation' }\n & Pick\n);\n\nexport type UpdateHolidayCourseMutationVariables = Exact<{\n param: UpdateHolidayCourseInput;\n}>;\n\n\nexport type UpdateHolidayCourseMutation = (\n { __typename?: 'Mutation' }\n & { updateHolidayCourse: (\n { __typename?: 'UpdateHolidayCourseResp' }\n & { courses: Array<(\n { __typename?: 'HolidayCourse' }\n & HolidayCourseFragmentFragment\n )> }\n ) }\n);\n\nexport type SetHolidayCourseStatusMutationVariables = Exact<{\n param: SetCourseStatusInput;\n}>;\n\n\nexport type SetHolidayCourseStatusMutation = (\n { __typename?: 'Mutation' }\n & { setHolidayCourseStatus?: Maybe<(\n { __typename?: 'SetHolidayCourseStatusResp' }\n & { course: (\n { __typename?: 'HolidayCourse' }\n & HolidayCourseFragmentFragment\n ) }\n )> }\n);\n\nexport type GetPaymentsQueryVariables = Exact<{\n param: GetPaymentsInput;\n}>;\n\n\nexport type GetPaymentsQuery = (\n { __typename?: 'Query' }\n & { getPayments: Array<(\n { __typename?: 'PaymentInfoResp' }\n & { enrolmentInfo: (\n { __typename?: 'Enrolment' }\n & EnrolmentFragmentFragment\n ), payerInfo: (\n { __typename?: 'User' }\n & UserFragmentFragment\n ), coursesInfo: Array<(\n { __typename?: 'Course' }\n & CourseFragmentFragment\n )>, playersInfo: Array<(\n { __typename?: 'Player' }\n & PlayerFragmentFragment\n )>, termsInfo: Array<(\n { __typename?: 'Term' }\n & TermFragmentFragment\n )> }\n & PaymentInfoFragmentFragment\n )> }\n);\n\nexport type UpdatePaymentStatusMutationVariables = Exact<{\n param: UpdatePaymentStatusInput;\n}>;\n\n\nexport type UpdatePaymentStatusMutation = (\n { __typename?: 'Mutation' }\n & { updatePaymentStatus: (\n { __typename?: 'Payment' }\n & PaymentFragmentFragment\n ) }\n);\n\nexport type GetPaymentMethodsQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GetPaymentMethodsQuery = (\n { __typename?: 'Query' }\n & { getPaymentMethods: Array<(\n { __typename?: 'GetPaymentMethodsResp' }\n & Pick\n )> }\n);\n\nexport type AddPaymentMethodMutationVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type AddPaymentMethodMutation = (\n { __typename?: 'Mutation' }\n & { addPaymentMethod: (\n { __typename?: 'AddPaymentMethodResp' }\n & Pick\n ) }\n);\n\nexport type DeletePaymentMethodMutationVariables = Exact<{\n param: DeletePaymentMethodInput;\n}>;\n\n\nexport type DeletePaymentMethodMutation = (\n { __typename?: 'Mutation' }\n & Pick\n);\n\nexport type CreatePaymentIntentMutationVariables = Exact<{\n param: CreatePaymentIntentInput;\n}>;\n\n\nexport type CreatePaymentIntentMutation = (\n { __typename?: 'Mutation' }\n & { createPaymentIntent: (\n { __typename?: 'CreatePaymendIntentResp' }\n & Pick\n ) }\n);\n\nexport type GetPlayersQueryVariables = Exact<{\n param: GetPlayersInput;\n}>;\n\n\nexport type GetPlayersQuery = (\n { __typename?: 'Query' }\n & { getPlayers?: Maybe> }\n);\n\nexport type AddPlayerMutationVariables = Exact<{\n param: AddPlayerInput;\n}>;\n\n\nexport type AddPlayerMutation = (\n { __typename?: 'Mutation' }\n & { addPlayer: (\n { __typename?: 'Player' }\n & PlayerFragmentFragment\n ) }\n);\n\nexport type SavePlayerMutationVariables = Exact<{\n param: SavePlayerInput;\n}>;\n\n\nexport type SavePlayerMutation = (\n { __typename?: 'Mutation' }\n & { savePlayer: (\n { __typename?: 'Player' }\n & PlayerFragmentFragment\n ) }\n);\n\nexport type GetTournamentsQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GetTournamentsQuery = (\n { __typename?: 'Query' }\n & { getTournaments?: Maybe> }\n);\n\nexport type AddTournamentMutationVariables = Exact<{\n param: AddTournamentInput;\n}>;\n\n\nexport type AddTournamentMutation = (\n { __typename?: 'Mutation' }\n & { addTournament: (\n { __typename?: 'Tournament' }\n & TournamentFragmentFragment\n ) }\n);\n\nexport type UpdateTournamentMutationVariables = Exact<{\n param: UpdateTournamentInput;\n}>;\n\n\nexport type UpdateTournamentMutation = (\n { __typename?: 'Mutation' }\n & { updateTournament: (\n { __typename?: 'Tournament' }\n & TournamentFragmentFragment\n ) }\n);\n\nexport type DeleteTournamentMutationVariables = Exact<{\n param: DeleteTournamentInput;\n}>;\n\n\nexport type DeleteTournamentMutation = (\n { __typename?: 'Mutation' }\n & Pick\n);\n\nexport type ChangeTournamentStatusMutationVariables = Exact<{\n param: ChangeTournamentInput;\n}>;\n\n\nexport type ChangeTournamentStatusMutation = (\n { __typename?: 'Mutation' }\n & { changeTournamentStatus: (\n { __typename?: 'Tournament' }\n & TournamentFragmentFragment\n ) }\n);\n\nexport type AddTournamentEnrolmentMutationVariables = Exact<{\n param: AddTournamentEnrolmentInput;\n}>;\n\n\nexport type AddTournamentEnrolmentMutation = (\n { __typename?: 'Mutation' }\n & { addTournamentEnrolment: (\n { __typename?: 'AddTournamentEnrolmentResp' }\n & { enrolment: (\n { __typename?: 'TournamentEnrolment' }\n & TournamentEnrolmentFragmentFragment\n ), payment: (\n { __typename?: 'Payment' }\n & PaymentFragmentFragment\n ) }\n ) }\n);\n\nexport type GetTournamentEnrolmentsQueryVariables = Exact<{\n param: GetTournamentEnrolmentsInput;\n}>;\n\n\nexport type GetTournamentEnrolmentsQuery = (\n { __typename?: 'Query' }\n & { getTournamentEnrolments?: Maybe> }\n);\n\nexport type SaveUserProfileMutationVariables = Exact<{\n param: SaveUserProfileInput;\n}>;\n\n\nexport type SaveUserProfileMutation = (\n { __typename?: 'Mutation' }\n & { saveUserProfile: (\n { __typename?: 'User' }\n & UserFragmentFragment\n ) }\n);\n\nexport type UpdateUserProfileMutationVariables = Exact<{\n param: UpdateUserProfileInput;\n}>;\n\n\nexport type UpdateUserProfileMutation = (\n { __typename?: 'Mutation' }\n & { updateUserProfile: (\n { __typename?: 'User' }\n & UserFragmentFragment\n ) }\n);\n\nexport type GetUserProfileQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GetUserProfileQuery = (\n { __typename?: 'Query' }\n & { getUserProfile?: Maybe<(\n { __typename?: 'User' }\n & UserFragmentFragment\n )> }\n);\n\nexport type SendMessageMutationVariables = Exact<{\n param: SendMessageInput;\n}>;\n\n\nexport type SendMessageMutation = (\n { __typename?: 'Mutation' }\n & Pick\n);\n\nexport const PlayerFragmentFragmentDoc = gql`\n fragment PlayerFragment on Player {\n id\n firstName\n lastName\n gender\n dob\n school\n disability\n disabilityClass\n disabilityDescription\n parentId\n}\n `;\nexport const UserFragmentFragmentDoc = gql`\n fragment UserFragment on User {\n id\n uid\n firstName\n lastName\n role\n address\n cityTown\n phone\n email\n paymentCustomerId\n}\n `;\nexport const TermFragmentFragmentDoc = gql`\n fragment TermFragment on Term {\n id\n description\n startDate\n endDate\n level\n}\n `;\nexport const CourseFragmentFragmentDoc = gql`\n fragment CourseFragment on Course {\n id\n termId\n courseDay\n numOfLessons\n unitPrice\n capacity\n availableCapacity\n startTime\n endTime\n available\n status\n numOfPublicHolidays\n}\n `;\nexport const EnrolmentFragmentFragmentDoc = gql`\n fragment EnrolmentFragment on Enrolment {\n id\n type\n userId\n playerIds\n courseIds\n enrolDate\n}\n `;\nexport const PaymentFragmentFragmentDoc = gql`\n fragment PaymentFragment on Payment {\n id\n status\n enrolmentId\n reference\n createdDate\n paidDate\n amount\n}\n `;\nexport const PaymentInfoFragmentFragmentDoc = gql`\n fragment PaymentInfoFragment on PaymentInfoResp {\n id\n status\n enrolmentId\n reference\n createdDate\n paidDate\n amount\n}\n `;\nexport const HolidayCourseFragmentFragmentDoc = gql`\n fragment HolidayCourseFragment on HolidayCourse {\n id\n description\n startDate\n endDate\n startTime\n endTime\n capacity\n availableCapacity\n price\n available\n status\n}\n `;\nexport const ActiveKidsVouchersFragmentFragmentDoc = gql`\n fragment ActiveKidsVouchersFragment on VouchersResp {\n id\n ownerId\n firstName\n middleName\n lastName\n dob\n expiryDate\n voucherNumber\n createdTime\n claimedTime\n status\n}\n `;\nexport const TournamentFragmentFragmentDoc = gql`\n fragment TournamentFragment on Tournament {\n id\n name\n startDate\n price\n status\n}\n `;\nexport const TournamentEnrolmentFragmentFragmentDoc = gql`\n fragment TournamentEnrolmentFragment on TournamentEnrolment {\n enrolDate\n tournamentIds\n}\n `;\nexport const GetTournamentEnrolmentFragmentFragmentDoc = gql`\n fragment GetTournamentEnrolmentFragment on GetTournamentEnrolmentsResp {\n enrolDate\n tournaments {\n name\n startDate\n price\n }\n status\n tournamentIds\n players {\n firstName\n lastName\n }\n}\n `;\nexport const GetVouchersDocument = gql`\n query getVouchers($param: GetActiveKidsVouchersInput!) {\n getVouchers(param: $param) {\n ...ActiveKidsVouchersFragment\n }\n}\n ${ActiveKidsVouchersFragmentFragmentDoc}`;\n\n/**\n * __useGetVouchersQuery__\n *\n * To run a query within a React component, call `useGetVouchersQuery` and pass it any options that fit your needs.\n * When your component renders, `useGetVouchersQuery` returns an object from Apollo Client that contains loading, error, and data properties\n * you can use to render your UI.\n *\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\n *\n * @example\n * const { data, loading, error } = useGetVouchersQuery({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useGetVouchersQuery(baseOptions: Apollo.QueryHookOptions) {\n return Apollo.useQuery(GetVouchersDocument, baseOptions);\n }\nexport function useGetVouchersLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) {\n return Apollo.useLazyQuery(GetVouchersDocument, baseOptions);\n }\nexport type GetVouchersQueryHookResult = ReturnType;\nexport type GetVouchersLazyQueryHookResult = ReturnType;\nexport type GetVouchersQueryResult = Apollo.QueryResult;\nexport const AddVoucherDocument = gql`\n mutation addVoucher($param: AddActiveKidsVouchersInput!) {\n addVoucher(param: $param) {\n ...ActiveKidsVouchersFragment\n }\n}\n ${ActiveKidsVouchersFragmentFragmentDoc}`;\nexport type AddVoucherMutationFn = Apollo.MutationFunction;\n\n/**\n * __useAddVoucherMutation__\n *\n * To run a mutation, you first call `useAddVoucherMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useAddVoucherMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [addVoucherMutation, { data, loading, error }] = useAddVoucherMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useAddVoucherMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(AddVoucherDocument, baseOptions);\n }\nexport type AddVoucherMutationHookResult = ReturnType;\nexport type AddVoucherMutationResult = Apollo.MutationResult;\nexport type AddVoucherMutationOptions = Apollo.BaseMutationOptions;\nexport const DeleteVouchersDocument = gql`\n mutation deleteVouchers($param: DeleteActiveKidsVouchersInput!) {\n deleteVouchers(param: $param)\n}\n `;\nexport type DeleteVouchersMutationFn = Apollo.MutationFunction;\n\n/**\n * __useDeleteVouchersMutation__\n *\n * To run a mutation, you first call `useDeleteVouchersMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useDeleteVouchersMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [deleteVouchersMutation, { data, loading, error }] = useDeleteVouchersMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useDeleteVouchersMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(DeleteVouchersDocument, baseOptions);\n }\nexport type DeleteVouchersMutationHookResult = ReturnType;\nexport type DeleteVouchersMutationResult = Apollo.MutationResult;\nexport type DeleteVouchersMutationOptions = Apollo.BaseMutationOptions;\nexport const UpdateVoucherDocument = gql`\n mutation updateVoucher($param: UpdateActiveKidsVouchersInput!) {\n updateVoucher(param: $param) {\n ...ActiveKidsVouchersFragment\n }\n}\n ${ActiveKidsVouchersFragmentFragmentDoc}`;\nexport type UpdateVoucherMutationFn = Apollo.MutationFunction;\n\n/**\n * __useUpdateVoucherMutation__\n *\n * To run a mutation, you first call `useUpdateVoucherMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useUpdateVoucherMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [updateVoucherMutation, { data, loading, error }] = useUpdateVoucherMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useUpdateVoucherMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(UpdateVoucherDocument, baseOptions);\n }\nexport type UpdateVoucherMutationHookResult = ReturnType;\nexport type UpdateVoucherMutationResult = Apollo.MutationResult;\nexport type UpdateVoucherMutationOptions = Apollo.BaseMutationOptions;\nexport const ChangeVoucherStatusDocument = gql`\n mutation changeVoucherStatus($param: ChangeVoucherStatusInput!) {\n changeVoucherStatus(param: $param) {\n ...ActiveKidsVouchersFragment\n }\n}\n ${ActiveKidsVouchersFragmentFragmentDoc}`;\nexport type ChangeVoucherStatusMutationFn = Apollo.MutationFunction;\n\n/**\n * __useChangeVoucherStatusMutation__\n *\n * To run a mutation, you first call `useChangeVoucherStatusMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useChangeVoucherStatusMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [changeVoucherStatusMutation, { data, loading, error }] = useChangeVoucherStatusMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useChangeVoucherStatusMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(ChangeVoucherStatusDocument, baseOptions);\n }\nexport type ChangeVoucherStatusMutationHookResult = ReturnType;\nexport type ChangeVoucherStatusMutationResult = Apollo.MutationResult;\nexport type ChangeVoucherStatusMutationOptions = Apollo.BaseMutationOptions;\nexport const GetCoursesDocument = gql`\n query getCourses {\n getCourses {\n term {\n ...TermFragment\n }\n courses {\n ...CourseFragment\n }\n }\n}\n ${TermFragmentFragmentDoc}\n${CourseFragmentFragmentDoc}`;\n\n/**\n * __useGetCoursesQuery__\n *\n * To run a query within a React component, call `useGetCoursesQuery` and pass it any options that fit your needs.\n * When your component renders, `useGetCoursesQuery` returns an object from Apollo Client that contains loading, error, and data properties\n * you can use to render your UI.\n *\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\n *\n * @example\n * const { data, loading, error } = useGetCoursesQuery({\n * variables: {\n * },\n * });\n */\nexport function useGetCoursesQuery(baseOptions?: Apollo.QueryHookOptions) {\n return Apollo.useQuery(GetCoursesDocument, baseOptions);\n }\nexport function useGetCoursesLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) {\n return Apollo.useLazyQuery(GetCoursesDocument, baseOptions);\n }\nexport type GetCoursesQueryHookResult = ReturnType;\nexport type GetCoursesLazyQueryHookResult = ReturnType;\nexport type GetCoursesQueryResult = Apollo.QueryResult;\nexport const AddCourseDocument = gql`\n mutation addCourse($param: AddCourseInput!) {\n addCourse(param: $param) {\n term {\n ...TermFragment\n }\n courses {\n ...CourseFragment\n }\n }\n}\n ${TermFragmentFragmentDoc}\n${CourseFragmentFragmentDoc}`;\nexport type AddCourseMutationFn = Apollo.MutationFunction;\n\n/**\n * __useAddCourseMutation__\n *\n * To run a mutation, you first call `useAddCourseMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useAddCourseMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [addCourseMutation, { data, loading, error }] = useAddCourseMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useAddCourseMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(AddCourseDocument, baseOptions);\n }\nexport type AddCourseMutationHookResult = ReturnType;\nexport type AddCourseMutationResult = Apollo.MutationResult;\nexport type AddCourseMutationOptions = Apollo.BaseMutationOptions;\nexport const UpdateCourseDocument = gql`\n mutation updateCourse($param: UpdateCourseInput!) {\n updateCourse(param: $param) {\n term {\n ...TermFragment\n }\n courses {\n ...CourseFragment\n }\n }\n}\n ${TermFragmentFragmentDoc}\n${CourseFragmentFragmentDoc}`;\nexport type UpdateCourseMutationFn = Apollo.MutationFunction;\n\n/**\n * __useUpdateCourseMutation__\n *\n * To run a mutation, you first call `useUpdateCourseMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useUpdateCourseMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [updateCourseMutation, { data, loading, error }] = useUpdateCourseMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useUpdateCourseMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(UpdateCourseDocument, baseOptions);\n }\nexport type UpdateCourseMutationHookResult = ReturnType;\nexport type UpdateCourseMutationResult = Apollo.MutationResult;\nexport type UpdateCourseMutationOptions = Apollo.BaseMutationOptions;\nexport const DeleteCourseDocument = gql`\n mutation deleteCourse($param: DeleteCourseInput!) {\n deleteCourse(param: $param)\n}\n `;\nexport type DeleteCourseMutationFn = Apollo.MutationFunction;\n\n/**\n * __useDeleteCourseMutation__\n *\n * To run a mutation, you first call `useDeleteCourseMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useDeleteCourseMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [deleteCourseMutation, { data, loading, error }] = useDeleteCourseMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useDeleteCourseMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(DeleteCourseDocument, baseOptions);\n }\nexport type DeleteCourseMutationHookResult = ReturnType;\nexport type DeleteCourseMutationResult = Apollo.MutationResult;\nexport type DeleteCourseMutationOptions = Apollo.BaseMutationOptions;\nexport const DisableTermDocument = gql`\n mutation disableTerm($param: DisableTermInput!) {\n disableTerm(param: $param)\n}\n `;\nexport type DisableTermMutationFn = Apollo.MutationFunction;\n\n/**\n * __useDisableTermMutation__\n *\n * To run a mutation, you first call `useDisableTermMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useDisableTermMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [disableTermMutation, { data, loading, error }] = useDisableTermMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useDisableTermMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(DisableTermDocument, baseOptions);\n }\nexport type DisableTermMutationHookResult = ReturnType;\nexport type DisableTermMutationResult = Apollo.MutationResult;\nexport type DisableTermMutationOptions = Apollo.BaseMutationOptions;\nexport const AddEnrolmentDocument = gql`\n mutation addEnrolment($param: AddEnrolmentInput!) {\n addEnrolment(param: $param) {\n enrolment {\n ...EnrolmentFragment\n }\n payment {\n ...PaymentFragment\n }\n user {\n ...UserFragment\n }\n }\n}\n ${EnrolmentFragmentFragmentDoc}\n${PaymentFragmentFragmentDoc}\n${UserFragmentFragmentDoc}`;\nexport type AddEnrolmentMutationFn = Apollo.MutationFunction;\n\n/**\n * __useAddEnrolmentMutation__\n *\n * To run a mutation, you first call `useAddEnrolmentMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useAddEnrolmentMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [addEnrolmentMutation, { data, loading, error }] = useAddEnrolmentMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useAddEnrolmentMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(AddEnrolmentDocument, baseOptions);\n }\nexport type AddEnrolmentMutationHookResult = ReturnType;\nexport type AddEnrolmentMutationResult = Apollo.MutationResult;\nexport type AddEnrolmentMutationOptions = Apollo.BaseMutationOptions;\nexport const DeclineEnrolmentDocument = gql`\n mutation declineEnrolment($param: DeclineEnrolmentInput!) {\n declineEnrolment(param: $param) {\n enrolment {\n ...EnrolmentFragment\n }\n }\n}\n ${EnrolmentFragmentFragmentDoc}`;\nexport type DeclineEnrolmentMutationFn = Apollo.MutationFunction;\n\n/**\n * __useDeclineEnrolmentMutation__\n *\n * To run a mutation, you first call `useDeclineEnrolmentMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useDeclineEnrolmentMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [declineEnrolmentMutation, { data, loading, error }] = useDeclineEnrolmentMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useDeclineEnrolmentMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(DeclineEnrolmentDocument, baseOptions);\n }\nexport type DeclineEnrolmentMutationHookResult = ReturnType;\nexport type DeclineEnrolmentMutationResult = Apollo.MutationResult;\nexport type DeclineEnrolmentMutationOptions = Apollo.BaseMutationOptions;\nexport const GetEnrolmentsDocument = gql`\n query getEnrolments($param: GetEnrolmentsInput!) {\n getEnrolments(param: $param) {\n enrolment {\n ...EnrolmentFragment\n }\n payment {\n ...PaymentFragment\n }\n user {\n ...UserFragment\n }\n }\n}\n ${EnrolmentFragmentFragmentDoc}\n${PaymentFragmentFragmentDoc}\n${UserFragmentFragmentDoc}`;\n\n/**\n * __useGetEnrolmentsQuery__\n *\n * To run a query within a React component, call `useGetEnrolmentsQuery` and pass it any options that fit your needs.\n * When your component renders, `useGetEnrolmentsQuery` returns an object from Apollo Client that contains loading, error, and data properties\n * you can use to render your UI.\n *\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\n *\n * @example\n * const { data, loading, error } = useGetEnrolmentsQuery({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useGetEnrolmentsQuery(baseOptions: Apollo.QueryHookOptions) {\n return Apollo.useQuery(GetEnrolmentsDocument, baseOptions);\n }\nexport function useGetEnrolmentsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) {\n return Apollo.useLazyQuery(GetEnrolmentsDocument, baseOptions);\n }\nexport type GetEnrolmentsQueryHookResult = ReturnType;\nexport type GetEnrolmentsLazyQueryHookResult = ReturnType;\nexport type GetEnrolmentsQueryResult = Apollo.QueryResult;\nexport const AddHolidayCourseDocument = gql`\n mutation addHolidayCourse($param: AddHolidayCourseInput!) {\n addHolidayCourse(param: $param) {\n courses {\n ...HolidayCourseFragment\n }\n }\n}\n ${HolidayCourseFragmentFragmentDoc}`;\nexport type AddHolidayCourseMutationFn = Apollo.MutationFunction;\n\n/**\n * __useAddHolidayCourseMutation__\n *\n * To run a mutation, you first call `useAddHolidayCourseMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useAddHolidayCourseMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [addHolidayCourseMutation, { data, loading, error }] = useAddHolidayCourseMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useAddHolidayCourseMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(AddHolidayCourseDocument, baseOptions);\n }\nexport type AddHolidayCourseMutationHookResult = ReturnType;\nexport type AddHolidayCourseMutationResult = Apollo.MutationResult;\nexport type AddHolidayCourseMutationOptions = Apollo.BaseMutationOptions;\nexport const GetHolidayCourseDocument = gql`\n query getHolidayCourse {\n getHolidayCourses {\n courses {\n ...HolidayCourseFragment\n }\n }\n}\n ${HolidayCourseFragmentFragmentDoc}`;\n\n/**\n * __useGetHolidayCourseQuery__\n *\n * To run a query within a React component, call `useGetHolidayCourseQuery` and pass it any options that fit your needs.\n * When your component renders, `useGetHolidayCourseQuery` returns an object from Apollo Client that contains loading, error, and data properties\n * you can use to render your UI.\n *\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\n *\n * @example\n * const { data, loading, error } = useGetHolidayCourseQuery({\n * variables: {\n * },\n * });\n */\nexport function useGetHolidayCourseQuery(baseOptions?: Apollo.QueryHookOptions) {\n return Apollo.useQuery(GetHolidayCourseDocument, baseOptions);\n }\nexport function useGetHolidayCourseLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) {\n return Apollo.useLazyQuery(GetHolidayCourseDocument, baseOptions);\n }\nexport type GetHolidayCourseQueryHookResult = ReturnType;\nexport type GetHolidayCourseLazyQueryHookResult = ReturnType;\nexport type GetHolidayCourseQueryResult = Apollo.QueryResult;\nexport const DeleteHolidayCourseDocument = gql`\n mutation deleteHolidayCourse($param: DeleteHolidayCourseInput!) {\n deleteHolidayCourse(param: $param)\n}\n `;\nexport type DeleteHolidayCourseMutationFn = Apollo.MutationFunction;\n\n/**\n * __useDeleteHolidayCourseMutation__\n *\n * To run a mutation, you first call `useDeleteHolidayCourseMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useDeleteHolidayCourseMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [deleteHolidayCourseMutation, { data, loading, error }] = useDeleteHolidayCourseMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useDeleteHolidayCourseMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(DeleteHolidayCourseDocument, baseOptions);\n }\nexport type DeleteHolidayCourseMutationHookResult = ReturnType;\nexport type DeleteHolidayCourseMutationResult = Apollo.MutationResult;\nexport type DeleteHolidayCourseMutationOptions = Apollo.BaseMutationOptions;\nexport const UpdateHolidayCourseDocument = gql`\n mutation updateHolidayCourse($param: UpdateHolidayCourseInput!) {\n updateHolidayCourse(param: $param) {\n courses {\n ...HolidayCourseFragment\n }\n }\n}\n ${HolidayCourseFragmentFragmentDoc}`;\nexport type UpdateHolidayCourseMutationFn = Apollo.MutationFunction;\n\n/**\n * __useUpdateHolidayCourseMutation__\n *\n * To run a mutation, you first call `useUpdateHolidayCourseMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useUpdateHolidayCourseMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [updateHolidayCourseMutation, { data, loading, error }] = useUpdateHolidayCourseMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useUpdateHolidayCourseMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(UpdateHolidayCourseDocument, baseOptions);\n }\nexport type UpdateHolidayCourseMutationHookResult = ReturnType;\nexport type UpdateHolidayCourseMutationResult = Apollo.MutationResult;\nexport type UpdateHolidayCourseMutationOptions = Apollo.BaseMutationOptions;\nexport const SetHolidayCourseStatusDocument = gql`\n mutation setHolidayCourseStatus($param: SetCourseStatusInput!) {\n setHolidayCourseStatus(param: $param) {\n course {\n ...HolidayCourseFragment\n }\n }\n}\n ${HolidayCourseFragmentFragmentDoc}`;\nexport type SetHolidayCourseStatusMutationFn = Apollo.MutationFunction;\n\n/**\n * __useSetHolidayCourseStatusMutation__\n *\n * To run a mutation, you first call `useSetHolidayCourseStatusMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useSetHolidayCourseStatusMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [setHolidayCourseStatusMutation, { data, loading, error }] = useSetHolidayCourseStatusMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useSetHolidayCourseStatusMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(SetHolidayCourseStatusDocument, baseOptions);\n }\nexport type SetHolidayCourseStatusMutationHookResult = ReturnType;\nexport type SetHolidayCourseStatusMutationResult = Apollo.MutationResult;\nexport type SetHolidayCourseStatusMutationOptions = Apollo.BaseMutationOptions;\nexport const GetPaymentsDocument = gql`\n query getPayments($param: GetPaymentsInput!) {\n getPayments(param: $param) {\n ...PaymentInfoFragment\n enrolmentInfo {\n ...EnrolmentFragment\n }\n payerInfo {\n ...UserFragment\n }\n coursesInfo {\n ...CourseFragment\n }\n playersInfo {\n ...PlayerFragment\n }\n termsInfo {\n ...TermFragment\n }\n }\n}\n ${PaymentInfoFragmentFragmentDoc}\n${EnrolmentFragmentFragmentDoc}\n${UserFragmentFragmentDoc}\n${CourseFragmentFragmentDoc}\n${PlayerFragmentFragmentDoc}\n${TermFragmentFragmentDoc}`;\n\n/**\n * __useGetPaymentsQuery__\n *\n * To run a query within a React component, call `useGetPaymentsQuery` and pass it any options that fit your needs.\n * When your component renders, `useGetPaymentsQuery` returns an object from Apollo Client that contains loading, error, and data properties\n * you can use to render your UI.\n *\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\n *\n * @example\n * const { data, loading, error } = useGetPaymentsQuery({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useGetPaymentsQuery(baseOptions: Apollo.QueryHookOptions) {\n return Apollo.useQuery(GetPaymentsDocument, baseOptions);\n }\nexport function useGetPaymentsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) {\n return Apollo.useLazyQuery(GetPaymentsDocument, baseOptions);\n }\nexport type GetPaymentsQueryHookResult = ReturnType;\nexport type GetPaymentsLazyQueryHookResult = ReturnType;\nexport type GetPaymentsQueryResult = Apollo.QueryResult;\nexport const UpdatePaymentStatusDocument = gql`\n mutation updatePaymentStatus($param: UpdatePaymentStatusInput!) {\n updatePaymentStatus(param: $param) {\n ...PaymentFragment\n }\n}\n ${PaymentFragmentFragmentDoc}`;\nexport type UpdatePaymentStatusMutationFn = Apollo.MutationFunction;\n\n/**\n * __useUpdatePaymentStatusMutation__\n *\n * To run a mutation, you first call `useUpdatePaymentStatusMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useUpdatePaymentStatusMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [updatePaymentStatusMutation, { data, loading, error }] = useUpdatePaymentStatusMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useUpdatePaymentStatusMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(UpdatePaymentStatusDocument, baseOptions);\n }\nexport type UpdatePaymentStatusMutationHookResult = ReturnType;\nexport type UpdatePaymentStatusMutationResult = Apollo.MutationResult;\nexport type UpdatePaymentStatusMutationOptions = Apollo.BaseMutationOptions;\nexport const GetPaymentMethodsDocument = gql`\n query getPaymentMethods {\n getPaymentMethods {\n id\n last4\n exp_year\n exp_month\n }\n}\n `;\n\n/**\n * __useGetPaymentMethodsQuery__\n *\n * To run a query within a React component, call `useGetPaymentMethodsQuery` and pass it any options that fit your needs.\n * When your component renders, `useGetPaymentMethodsQuery` returns an object from Apollo Client that contains loading, error, and data properties\n * you can use to render your UI.\n *\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\n *\n * @example\n * const { data, loading, error } = useGetPaymentMethodsQuery({\n * variables: {\n * },\n * });\n */\nexport function useGetPaymentMethodsQuery(baseOptions?: Apollo.QueryHookOptions) {\n return Apollo.useQuery(GetPaymentMethodsDocument, baseOptions);\n }\nexport function useGetPaymentMethodsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) {\n return Apollo.useLazyQuery(GetPaymentMethodsDocument, baseOptions);\n }\nexport type GetPaymentMethodsQueryHookResult = ReturnType;\nexport type GetPaymentMethodsLazyQueryHookResult = ReturnType;\nexport type GetPaymentMethodsQueryResult = Apollo.QueryResult;\nexport const AddPaymentMethodDocument = gql`\n mutation addPaymentMethod {\n addPaymentMethod {\n clientSecret\n }\n}\n `;\nexport type AddPaymentMethodMutationFn = Apollo.MutationFunction;\n\n/**\n * __useAddPaymentMethodMutation__\n *\n * To run a mutation, you first call `useAddPaymentMethodMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useAddPaymentMethodMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [addPaymentMethodMutation, { data, loading, error }] = useAddPaymentMethodMutation({\n * variables: {\n * },\n * });\n */\nexport function useAddPaymentMethodMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(AddPaymentMethodDocument, baseOptions);\n }\nexport type AddPaymentMethodMutationHookResult = ReturnType;\nexport type AddPaymentMethodMutationResult = Apollo.MutationResult;\nexport type AddPaymentMethodMutationOptions = Apollo.BaseMutationOptions;\nexport const DeletePaymentMethodDocument = gql`\n mutation deletePaymentMethod($param: DeletePaymentMethodInput!) {\n deletePaymentMethod(param: $param)\n}\n `;\nexport type DeletePaymentMethodMutationFn = Apollo.MutationFunction;\n\n/**\n * __useDeletePaymentMethodMutation__\n *\n * To run a mutation, you first call `useDeletePaymentMethodMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useDeletePaymentMethodMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [deletePaymentMethodMutation, { data, loading, error }] = useDeletePaymentMethodMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useDeletePaymentMethodMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(DeletePaymentMethodDocument, baseOptions);\n }\nexport type DeletePaymentMethodMutationHookResult = ReturnType;\nexport type DeletePaymentMethodMutationResult = Apollo.MutationResult;\nexport type DeletePaymentMethodMutationOptions = Apollo.BaseMutationOptions;\nexport const CreatePaymentIntentDocument = gql`\n mutation createPaymentIntent($param: CreatePaymentIntentInput!) {\n createPaymentIntent(param: $param) {\n paymentMethod\n paymentId\n }\n}\n `;\nexport type CreatePaymentIntentMutationFn = Apollo.MutationFunction;\n\n/**\n * __useCreatePaymentIntentMutation__\n *\n * To run a mutation, you first call `useCreatePaymentIntentMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useCreatePaymentIntentMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [createPaymentIntentMutation, { data, loading, error }] = useCreatePaymentIntentMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useCreatePaymentIntentMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(CreatePaymentIntentDocument, baseOptions);\n }\nexport type CreatePaymentIntentMutationHookResult = ReturnType;\nexport type CreatePaymentIntentMutationResult = Apollo.MutationResult;\nexport type CreatePaymentIntentMutationOptions = Apollo.BaseMutationOptions;\nexport const GetPlayersDocument = gql`\n query getPlayers($param: GetPlayersInput!) {\n getPlayers(param: $param) {\n ...PlayerFragment\n }\n}\n ${PlayerFragmentFragmentDoc}`;\n\n/**\n * __useGetPlayersQuery__\n *\n * To run a query within a React component, call `useGetPlayersQuery` and pass it any options that fit your needs.\n * When your component renders, `useGetPlayersQuery` returns an object from Apollo Client that contains loading, error, and data properties\n * you can use to render your UI.\n *\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\n *\n * @example\n * const { data, loading, error } = useGetPlayersQuery({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useGetPlayersQuery(baseOptions: Apollo.QueryHookOptions) {\n return Apollo.useQuery(GetPlayersDocument, baseOptions);\n }\nexport function useGetPlayersLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) {\n return Apollo.useLazyQuery(GetPlayersDocument, baseOptions);\n }\nexport type GetPlayersQueryHookResult = ReturnType;\nexport type GetPlayersLazyQueryHookResult = ReturnType;\nexport type GetPlayersQueryResult = Apollo.QueryResult;\nexport const AddPlayerDocument = gql`\n mutation addPlayer($param: AddPlayerInput!) {\n addPlayer(param: $param) {\n ...PlayerFragment\n }\n}\n ${PlayerFragmentFragmentDoc}`;\nexport type AddPlayerMutationFn = Apollo.MutationFunction;\n\n/**\n * __useAddPlayerMutation__\n *\n * To run a mutation, you first call `useAddPlayerMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useAddPlayerMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [addPlayerMutation, { data, loading, error }] = useAddPlayerMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useAddPlayerMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(AddPlayerDocument, baseOptions);\n }\nexport type AddPlayerMutationHookResult = ReturnType;\nexport type AddPlayerMutationResult = Apollo.MutationResult;\nexport type AddPlayerMutationOptions = Apollo.BaseMutationOptions;\nexport const SavePlayerDocument = gql`\n mutation savePlayer($param: SavePlayerInput!) {\n savePlayer(param: $param) {\n ...PlayerFragment\n }\n}\n ${PlayerFragmentFragmentDoc}`;\nexport type SavePlayerMutationFn = Apollo.MutationFunction;\n\n/**\n * __useSavePlayerMutation__\n *\n * To run a mutation, you first call `useSavePlayerMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useSavePlayerMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [savePlayerMutation, { data, loading, error }] = useSavePlayerMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useSavePlayerMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(SavePlayerDocument, baseOptions);\n }\nexport type SavePlayerMutationHookResult = ReturnType;\nexport type SavePlayerMutationResult = Apollo.MutationResult;\nexport type SavePlayerMutationOptions = Apollo.BaseMutationOptions;\nexport const GetTournamentsDocument = gql`\n query getTournaments {\n getTournaments {\n ...TournamentFragment\n }\n}\n ${TournamentFragmentFragmentDoc}`;\n\n/**\n * __useGetTournamentsQuery__\n *\n * To run a query within a React component, call `useGetTournamentsQuery` and pass it any options that fit your needs.\n * When your component renders, `useGetTournamentsQuery` returns an object from Apollo Client that contains loading, error, and data properties\n * you can use to render your UI.\n *\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\n *\n * @example\n * const { data, loading, error } = useGetTournamentsQuery({\n * variables: {\n * },\n * });\n */\nexport function useGetTournamentsQuery(baseOptions?: Apollo.QueryHookOptions) {\n return Apollo.useQuery(GetTournamentsDocument, baseOptions);\n }\nexport function useGetTournamentsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) {\n return Apollo.useLazyQuery(GetTournamentsDocument, baseOptions);\n }\nexport type GetTournamentsQueryHookResult = ReturnType;\nexport type GetTournamentsLazyQueryHookResult = ReturnType;\nexport type GetTournamentsQueryResult = Apollo.QueryResult;\nexport const AddTournamentDocument = gql`\n mutation addTournament($param: AddTournamentInput!) {\n addTournament(param: $param) {\n ...TournamentFragment\n }\n}\n ${TournamentFragmentFragmentDoc}`;\nexport type AddTournamentMutationFn = Apollo.MutationFunction;\n\n/**\n * __useAddTournamentMutation__\n *\n * To run a mutation, you first call `useAddTournamentMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useAddTournamentMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [addTournamentMutation, { data, loading, error }] = useAddTournamentMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useAddTournamentMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(AddTournamentDocument, baseOptions);\n }\nexport type AddTournamentMutationHookResult = ReturnType;\nexport type AddTournamentMutationResult = Apollo.MutationResult;\nexport type AddTournamentMutationOptions = Apollo.BaseMutationOptions;\nexport const UpdateTournamentDocument = gql`\n mutation updateTournament($param: UpdateTournamentInput!) {\n updateTournament(param: $param) {\n ...TournamentFragment\n }\n}\n ${TournamentFragmentFragmentDoc}`;\nexport type UpdateTournamentMutationFn = Apollo.MutationFunction;\n\n/**\n * __useUpdateTournamentMutation__\n *\n * To run a mutation, you first call `useUpdateTournamentMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useUpdateTournamentMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [updateTournamentMutation, { data, loading, error }] = useUpdateTournamentMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useUpdateTournamentMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(UpdateTournamentDocument, baseOptions);\n }\nexport type UpdateTournamentMutationHookResult = ReturnType;\nexport type UpdateTournamentMutationResult = Apollo.MutationResult;\nexport type UpdateTournamentMutationOptions = Apollo.BaseMutationOptions;\nexport const DeleteTournamentDocument = gql`\n mutation deleteTournament($param: DeleteTournamentInput!) {\n deleteTournament(param: $param)\n}\n `;\nexport type DeleteTournamentMutationFn = Apollo.MutationFunction;\n\n/**\n * __useDeleteTournamentMutation__\n *\n * To run a mutation, you first call `useDeleteTournamentMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useDeleteTournamentMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [deleteTournamentMutation, { data, loading, error }] = useDeleteTournamentMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useDeleteTournamentMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(DeleteTournamentDocument, baseOptions);\n }\nexport type DeleteTournamentMutationHookResult = ReturnType;\nexport type DeleteTournamentMutationResult = Apollo.MutationResult;\nexport type DeleteTournamentMutationOptions = Apollo.BaseMutationOptions;\nexport const ChangeTournamentStatusDocument = gql`\n mutation changeTournamentStatus($param: ChangeTournamentInput!) {\n changeTournamentStatus(param: $param) {\n ...TournamentFragment\n }\n}\n ${TournamentFragmentFragmentDoc}`;\nexport type ChangeTournamentStatusMutationFn = Apollo.MutationFunction;\n\n/**\n * __useChangeTournamentStatusMutation__\n *\n * To run a mutation, you first call `useChangeTournamentStatusMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useChangeTournamentStatusMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [changeTournamentStatusMutation, { data, loading, error }] = useChangeTournamentStatusMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useChangeTournamentStatusMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(ChangeTournamentStatusDocument, baseOptions);\n }\nexport type ChangeTournamentStatusMutationHookResult = ReturnType;\nexport type ChangeTournamentStatusMutationResult = Apollo.MutationResult;\nexport type ChangeTournamentStatusMutationOptions = Apollo.BaseMutationOptions;\nexport const AddTournamentEnrolmentDocument = gql`\n mutation addTournamentEnrolment($param: AddTournamentEnrolmentInput!) {\n addTournamentEnrolment(param: $param) {\n enrolment {\n ...TournamentEnrolmentFragment\n }\n payment {\n ...PaymentFragment\n }\n }\n}\n ${TournamentEnrolmentFragmentFragmentDoc}\n${PaymentFragmentFragmentDoc}`;\nexport type AddTournamentEnrolmentMutationFn = Apollo.MutationFunction;\n\n/**\n * __useAddTournamentEnrolmentMutation__\n *\n * To run a mutation, you first call `useAddTournamentEnrolmentMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useAddTournamentEnrolmentMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [addTournamentEnrolmentMutation, { data, loading, error }] = useAddTournamentEnrolmentMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useAddTournamentEnrolmentMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(AddTournamentEnrolmentDocument, baseOptions);\n }\nexport type AddTournamentEnrolmentMutationHookResult = ReturnType;\nexport type AddTournamentEnrolmentMutationResult = Apollo.MutationResult;\nexport type AddTournamentEnrolmentMutationOptions = Apollo.BaseMutationOptions;\nexport const GetTournamentEnrolmentsDocument = gql`\n query getTournamentEnrolments($param: GetTournamentEnrolmentsInput!) {\n getTournamentEnrolments(param: $param) {\n ...GetTournamentEnrolmentFragment\n }\n}\n ${GetTournamentEnrolmentFragmentFragmentDoc}`;\n\n/**\n * __useGetTournamentEnrolmentsQuery__\n *\n * To run a query within a React component, call `useGetTournamentEnrolmentsQuery` and pass it any options that fit your needs.\n * When your component renders, `useGetTournamentEnrolmentsQuery` returns an object from Apollo Client that contains loading, error, and data properties\n * you can use to render your UI.\n *\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\n *\n * @example\n * const { data, loading, error } = useGetTournamentEnrolmentsQuery({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useGetTournamentEnrolmentsQuery(baseOptions: Apollo.QueryHookOptions) {\n return Apollo.useQuery(GetTournamentEnrolmentsDocument, baseOptions);\n }\nexport function useGetTournamentEnrolmentsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) {\n return Apollo.useLazyQuery(GetTournamentEnrolmentsDocument, baseOptions);\n }\nexport type GetTournamentEnrolmentsQueryHookResult = ReturnType;\nexport type GetTournamentEnrolmentsLazyQueryHookResult = ReturnType;\nexport type GetTournamentEnrolmentsQueryResult = Apollo.QueryResult;\nexport const SaveUserProfileDocument = gql`\n mutation saveUserProfile($param: SaveUserProfileInput!) {\n saveUserProfile(param: $param) {\n ...UserFragment\n }\n}\n ${UserFragmentFragmentDoc}`;\nexport type SaveUserProfileMutationFn = Apollo.MutationFunction;\n\n/**\n * __useSaveUserProfileMutation__\n *\n * To run a mutation, you first call `useSaveUserProfileMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useSaveUserProfileMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [saveUserProfileMutation, { data, loading, error }] = useSaveUserProfileMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useSaveUserProfileMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(SaveUserProfileDocument, baseOptions);\n }\nexport type SaveUserProfileMutationHookResult = ReturnType;\nexport type SaveUserProfileMutationResult = Apollo.MutationResult;\nexport type SaveUserProfileMutationOptions = Apollo.BaseMutationOptions;\nexport const UpdateUserProfileDocument = gql`\n mutation updateUserProfile($param: UpdateUserProfileInput!) {\n updateUserProfile(param: $param) {\n ...UserFragment\n }\n}\n ${UserFragmentFragmentDoc}`;\nexport type UpdateUserProfileMutationFn = Apollo.MutationFunction;\n\n/**\n * __useUpdateUserProfileMutation__\n *\n * To run a mutation, you first call `useUpdateUserProfileMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useUpdateUserProfileMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [updateUserProfileMutation, { data, loading, error }] = useUpdateUserProfileMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useUpdateUserProfileMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(UpdateUserProfileDocument, baseOptions);\n }\nexport type UpdateUserProfileMutationHookResult = ReturnType;\nexport type UpdateUserProfileMutationResult = Apollo.MutationResult;\nexport type UpdateUserProfileMutationOptions = Apollo.BaseMutationOptions;\nexport const GetUserProfileDocument = gql`\n query getUserProfile {\n getUserProfile {\n ...UserFragment\n }\n}\n ${UserFragmentFragmentDoc}`;\n\n/**\n * __useGetUserProfileQuery__\n *\n * To run a query within a React component, call `useGetUserProfileQuery` and pass it any options that fit your needs.\n * When your component renders, `useGetUserProfileQuery` returns an object from Apollo Client that contains loading, error, and data properties\n * you can use to render your UI.\n *\n * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;\n *\n * @example\n * const { data, loading, error } = useGetUserProfileQuery({\n * variables: {\n * },\n * });\n */\nexport function useGetUserProfileQuery(baseOptions?: Apollo.QueryHookOptions) {\n return Apollo.useQuery(GetUserProfileDocument, baseOptions);\n }\nexport function useGetUserProfileLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) {\n return Apollo.useLazyQuery(GetUserProfileDocument, baseOptions);\n }\nexport type GetUserProfileQueryHookResult = ReturnType;\nexport type GetUserProfileLazyQueryHookResult = ReturnType;\nexport type GetUserProfileQueryResult = Apollo.QueryResult;\nexport const SendMessageDocument = gql`\n mutation sendMessage($param: SendMessageInput!) {\n sendMessage(param: $param)\n}\n `;\nexport type SendMessageMutationFn = Apollo.MutationFunction;\n\n/**\n * __useSendMessageMutation__\n *\n * To run a mutation, you first call `useSendMessageMutation` within a React component and pass it any options that fit your needs.\n * When your component renders, `useSendMessageMutation` returns a tuple that includes:\n * - A mutate function that you can call at any time to execute the mutation\n * - An object with fields that represent the current status of the mutation's execution\n *\n * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;\n *\n * @example\n * const [sendMessageMutation, { data, loading, error }] = useSendMessageMutation({\n * variables: {\n * param: // value for 'param'\n * },\n * });\n */\nexport function useSendMessageMutation(baseOptions?: Apollo.MutationHookOptions) {\n return Apollo.useMutation(SendMessageDocument, baseOptions);\n }\nexport type SendMessageMutationHookResult = ReturnType;\nexport type SendMessageMutationResult = Apollo.MutationResult;\nexport type SendMessageMutationOptions = Apollo.BaseMutationOptions;","import nodeFetch from \"node-fetch\";\n\nexport const fetch =\n typeof window !== \"undefined\" && window.fetch\n ? window.fetch.bind(window)\n : (nodeFetch as any);\n\nenum HttpMethods {\n GET = \"GET\",\n POST = \"POST\",\n PUT = \"PUT\",\n DELETE = \"DELETE\",\n}\n\ninterface IException {\n httpCode: number;\n message: string;\n}\n\nconst isNoContent = (response: Response) => {\n return response.status === 204;\n};\n\nconst get = (\n path: string,\n data?: any,\n headers = {}\n): Promise => {\n const tmpPath = data ? `${path}?${getQueryString(data)}` : path;\n return doFetch(tmpPath, null, HttpMethods.GET, headers);\n};\n\nconst getQueryString = (params: any) =>\n Object.keys(params)\n .map((k) => {\n if (Array.isArray(params[k])) {\n return params[k]\n .map(\n (val: any) =>\n `${encodeURIComponent(k)}[]=${encodeURIComponent(val)}`\n )\n .join(\"&\");\n }\n\n return `${encodeURIComponent(k)}=${encodeURIComponent(params[k])}`;\n })\n .join(\"&\");\n\nconst post = (\n path: string,\n data: any,\n headers = {}\n): Promise => doFetch(path, data, HttpMethods.POST, headers);\n\nconst put = (\n path: string,\n data: any,\n headers = {}\n): Promise => doFetch(path, data, HttpMethods.PUT, headers);\n\nconst del = (\n path: string,\n data: any,\n headers = {}\n): Promise => doFetch(path, data, HttpMethods.DELETE, headers);\n\nconst doFetch = async (\n path: string,\n data: any,\n method: HttpMethods,\n headers: HeadersInit = {}\n) => {\n const request: RequestInit = {\n method,\n headers: {\n ...headers,\n },\n };\n request.body = data;\n const response: Response = await fetch(path, request);\n if (!response.ok) {\n const error: IException = {\n httpCode: response.status,\n message: await getResult(response),\n };\n throw error;\n }\n return getResult(response);\n};\n\nconst getResult = (response: Response) => {\n if (isNoContent(response)) {\n return undefined;\n }\n if (/application\\/json/.test(response.headers.get(\"Content-Type\")!)) {\n return response.json();\n }\n return response.text();\n};\n\nconst rest = {\n get,\n post,\n put,\n delete: del,\n};\n\nexport { rest };\n","import Auth from \"@aws-amplify/auth\";\nimport { CognitoUser } from \"amazon-cognito-identity-js\";\nimport { InMemoryCache } from \"apollo-cache-inmemory\";\nimport { ApolloClient } from \"apollo-client\";\nimport { ApolloLink } from \"apollo-link\";\nimport { setContext } from \"apollo-link-context\";\nimport { createHttpLink } from \"apollo-link-http\";\nimport { fetch } from \"./rest\";\n\nconst httpLink = createHttpLink({\n // uri: \"http://localhost:8080/graphql\",\n credentials: \"same-origin\",\n // need to switch to production url\n uri: \"https://api.viviantabletennis.com/graphql\",\n // uri: \"http://localhost:8080/graphql\",\n fetch,\n});\n\nconst authLink = setContext(async () => {\n try {\n const currentUser: CognitoUser = await Auth.currentAuthenticatedUser();\n const token = currentUser\n ?.getSignInUserSession()\n ?.getIdToken()\n ?.getJwtToken();\n return {\n headers: {\n authorization: token ?? \"\",\n },\n };\n } catch {\n Auth.signOut();\n }\n});\n\nexport const cleanTypeName = new ApolloLink((operation, forward) => {\n if (operation.variables) {\n const omitTypename = (key: any, value: any) =>\n key === \"__typename\" ? undefined : value;\n operation.variables = JSON.parse(\n JSON.stringify(operation.variables),\n omitTypename\n );\n }\n return forward(operation).map((data) => {\n return data;\n });\n});\n\nexport const client = new ApolloClient({\n ssrMode: true,\n link: ApolloLink.from([cleanTypeName, authLink, httpLink]),\n cache: new InMemoryCache(),\n defaultOptions: {\n watchQuery: {\n fetchPolicy: \"no-cache\",\n },\n query: {\n fetchPolicy: \"no-cache\",\n },\n },\n});\n","import {\n GetUserProfileDocument,\n GetUserProfileQuery,\n SaveUserProfileDocument,\n SaveUserProfileInput,\n SaveUserProfileMutation,\n UpdateUserProfileDocument,\n UpdateUserProfileInput,\n UpdateUserProfileMutation,\n} from \"../generated/graphql\";\nimport { client } from \"./client\";\n\nexport const getUserProfile = async () => {\n return (\n await client.query({\n query: GetUserProfileDocument,\n })\n ).data.getUserProfile;\n};\n\nexport const saveUserProfile = async (param: SaveUserProfileInput) => {\n return (\n await client.mutate({\n mutation: SaveUserProfileDocument,\n variables: {\n param: {\n ...param,\n },\n },\n })\n ).data?.saveUserProfile;\n};\n\nexport const updateUserProfile = async (param: UpdateUserProfileInput) => {\n return (\n await client.mutate({\n mutation: UpdateUserProfileDocument,\n variables: {\n param: {\n ...param,\n },\n },\n })\n ).data?.updateUserProfile;\n};\n","import Auth from \"@aws-amplify/auth\";\nimport { CognitoUser } from \"amazon-cognito-identity-js\";\n\nexport interface IAccountRequest {\n email: string;\n password: string;\n}\n\nexport interface IConfirmRequest {\n email: string;\n code: string;\n}\nexport interface ISignInReq extends IAccountRequest {}\n\nexport interface IChangePasswordRequest {\n newPassword: string;\n oldPassword: string;\n repeatPassword?: string;\n}\nexport interface ISignUpReq extends IAccountRequest {\n repeatPassword: string;\n}\n\nexport interface IResetPasswordRequest extends IAccountRequest {\n code: string;\n repeatPassword?: string;\n}\n\nconst signUp = async ({ email: username, password }: IAccountRequest) => {\n const param = {\n username,\n password,\n };\n return await Auth.signUp(param);\n};\n\nconst signIn = async (\n { email, password }: IAccountRequest,\n validationData = {}\n): Promise =>\n await Auth.signIn({ username: email, password, validationData });\n\nconst signOut = async () => await Auth.signOut();\n\nconst confirmSignUp = async ({ email, code }: IConfirmRequest) =>\n await Auth.confirmSignUp(email, code);\n\nconst forgotPassword = async (email: string) =>\n await Auth.forgotPassword(email);\n\nconst changePassword = async ({\n newPassword,\n oldPassword,\n}: IChangePasswordRequest) => {\n const user = await Auth.currentAuthenticatedUser();\n const result = Auth.changePassword(user, oldPassword, newPassword);\n return result;\n};\n\nexport const forgotPasswordSubmit = async ({\n email,\n code,\n password,\n}: IResetPasswordRequest) =>\n await Auth.forgotPasswordSubmit(email, code, password);\n\nconst isAuthenticated = async () => {\n const u = await Auth.currentAuthenticatedUser();\n return u;\n};\n\nconst loggedInCogUser = async () => {\n return await Auth.currentAuthenticatedUser();\n};\n\nexport default {\n signIn,\n signOut,\n signUp,\n confirmSignUp,\n forgotPassword,\n changePassword,\n isAuthenticated,\n loggedInCogUser,\n forgotPasswordSubmit,\n};\n","import { CognitoUser } from \"amazon-cognito-identity-js\";\nimport React, { createContext, useEffect } from \"react\";\nimport { useImmer } from \"use-immer\";\nimport { getUserProfile } from \"../api/user.service\";\nimport { ERole, User } from \"../generated/graphql\";\nimport { IUser } from \"../model/IUser\";\nimport AuthService, {\n IChangePasswordRequest,\n IResetPasswordRequest,\n ISignInReq,\n ISignUpReq,\n} from \"../services/AuthService\";\n\nexport interface IAuthResult {\n success: boolean;\n error?: string;\n hasUserProfile?: boolean;\n}\nexport interface IAuthContext {\n isAuthenticated: boolean;\n signin: (value: ISignInReq) => Promise;\n signup: (value: ISignUpReq) => Promise;\n signout: () => Promise;\n changePassword: (value: IChangePasswordRequest) => Promise;\n forgotPassword: (email: string) => Promise;\n user: IUser | null;\n userProfile: User | null | undefined;\n setUserProfile: (profile: User) => void;\n isLoading: boolean;\n isUserRole: (userRole: ERole) => () => boolean;\n isAdminRole: () => boolean;\n isCoachRole: () => boolean;\n isParentRole: () => boolean;\n forgotPasswordSubmit: (value: IResetPasswordRequest) => Promise;\n}\n\nexport const AuthContext = createContext({} as IAuthContext);\n\ninterface IProps {\n children: any;\n}\n\ninterface IAuthData {\n isAuthenticated: boolean;\n user: IUser | null;\n userProfile?: User | null | undefined;\n isLoading: boolean;\n}\n\nconst AuthContextProvider = (props: IProps) => {\n const [authData, setAuthData] = useImmer({\n user: null,\n isAuthenticated: false,\n isLoading: true,\n });\n\n const authenticate = async () => {\n let isAuthenticated = false;\n let userProfile: User | null | undefined = null;\n let cogUser: CognitoUser;\n try {\n cogUser = await AuthService.loggedInCogUser();\n if (cogUser) {\n isAuthenticated = true;\n userProfile = await getUserProfile();\n }\n } catch (e) {}\n setAuthData((draft: IAuthData) => {\n if (isAuthenticated) {\n draft.user = {\n userName: cogUser?.getUsername(),\n email: (cogUser as any)?.attributes[\"email\"],\n };\n }\n draft.isAuthenticated = isAuthenticated;\n draft.userProfile = userProfile;\n draft.isLoading = false;\n });\n };\n\n useEffect(() => {\n authenticate();\n }, []);\n\n const signup = async ({\n email,\n password,\n }: ISignUpReq): Promise => {\n setAuthData((draft: IAuthData) => {\n draft.isAuthenticated = false;\n draft.user = null;\n draft.userProfile = null;\n });\n const result: IAuthResult = { success: true };\n try {\n await AuthService.signUp({ email, password });\n } catch (e) {\n result.success = false;\n result.error = e.message;\n }\n return result;\n };\n\n const signin = async (value: ISignInReq): Promise => {\n const result: IAuthResult = { success: true, hasUserProfile: false };\n try {\n const signInUser = (await AuthService.signIn(value)) as any;\n const userProfile = await getUserProfile();\n result.hasUserProfile = !!userProfile;\n setAuthData((draft: IAuthData) => {\n draft.isAuthenticated = true;\n draft.user = {\n userName: signInUser.getUsername(),\n email: signInUser.attributes[\"email\"],\n };\n draft.userProfile = userProfile;\n });\n } catch (e) {\n result.success = false;\n result.error = e.message;\n }\n return result;\n };\n\n const signout = async (): Promise => {\n const result: IAuthResult = { success: true };\n try {\n await AuthService.signOut();\n setAuthData((draft) => {\n draft.isAuthenticated = false;\n draft.user = null;\n });\n } catch (e) {\n result.success = false;\n result.error = e.message;\n }\n return result;\n };\n\n const changePassword = async ({\n oldPassword,\n newPassword,\n }: IChangePasswordRequest): Promise => {\n const result: IAuthResult = { success: true };\n try {\n await AuthService.changePassword({ oldPassword, newPassword });\n } catch (e) {\n result.success = false;\n result.error = e.message;\n }\n return result;\n };\n\n const forgotPasswordSubmit = async (param: IResetPasswordRequest) => {\n const result: IAuthResult = { success: true };\n try {\n await AuthService.forgotPasswordSubmit(param);\n } catch (e) {\n result.success = false;\n result.error = e.message;\n }\n return result;\n };\n\n const setUserProfile = (profile: User) => {\n setAuthData((draft) => {\n draft.userProfile = profile;\n });\n };\n\n const forgotPassword = async (email: string) => {\n const result: IAuthResult = { success: true };\n try {\n await AuthService.forgotPassword(email);\n } catch (e) {\n result.success = false;\n result.error = e.message;\n }\n return result;\n };\n\n const isUserRole = (userRole: ERole) => () =>\n authData.userProfile?.role === userRole;\n\n const isAdminRole = isUserRole(ERole.Admin);\n const isParentRole = isUserRole(ERole.Parent);\n const isCoachRole = isUserRole(ERole.Coach);\n\n const { isAuthenticated, user, userProfile, isLoading } = authData;\n const authValue: IAuthContext = {\n isAuthenticated,\n signin,\n signup,\n signout,\n changePassword,\n forgotPassword,\n forgotPasswordSubmit,\n user,\n userProfile,\n setUserProfile,\n isLoading,\n isUserRole,\n isAdminRole,\n isParentRole,\n isCoachRole,\n };\n return (\n \n {props.children}\n \n );\n};\nexport default AuthContextProvider;\n","import { CircularProgress, Paper, Theme, Typography } from \"@material-ui/core\";\nimport { createStyles, WithStyles, withStyles } from \"@material-ui/styles\";\nimport React from \"react\";\n\nconst styles = ({ palette }: Theme) => {\n return createStyles({\n loaderContainer: {\n position: \"fixed\",\n width: \"100%\",\n height: \"100%\",\n top: 0,\n left: 0,\n background: \"rgba(0,0,0,0.4)\",\n zIndex: 2000,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n },\n circleRoot: {\n color: palette.primary.main,\n },\n loaderText: {\n marginTop: 40,\n fontSize: 23,\n fontWeight: 600,\n color: \"#fff\",\n },\n });\n};\n\ninterface Props extends WithStyles {\n width?: number;\n height?: number;\n text?: string;\n isLoading?: boolean;\n}\n\nconst LargeLoading = ({\n classes,\n width = 80,\n height = 80,\n isLoading = true,\n text,\n}: Props) => {\n if (!isLoading) {\n return null;\n }\n return (\n \n \n {text && (\n \n {text}\n \n )}\n \n );\n};\n\nexport default withStyles(styles)(LargeLoading);\n","import React, { createContext } from \"react\";\nimport { useImmer } from \"use-immer\";\nimport LargeLoading from \"../components/LargeLoading\";\n\nexport interface ILoadingContext {\n showLoading: (text?: string) => void;\n hideLoading: () => void;\n}\n\nexport const LoadingContext = createContext({\n showLoading: (_text?: string) => {},\n hideLoading: () => {},\n});\n\ninterface IProps {\n children: any;\n}\ninterface ILoadingData {\n isLoading: boolean;\n text: string;\n}\n\nexport const withLoadingContextProvider = (Component: React.ComponentType) => (\n props: IProps\n) => {\n const [loading, setLoading] = useImmer({\n isLoading: false,\n text: \"\",\n });\n\n const showLoading = (text?: string) => {\n setLoading((draft: ILoadingData) => {\n draft.isLoading = true;\n draft.text = text || \"\";\n });\n };\n\n const hideLoading = () => {\n setLoading((draft: ILoadingData) => {\n draft.isLoading = false;\n });\n };\n\n const { isLoading, text } = loading;\n return (\n \n \n {props.children}\n \n );\n};\n","import { IconButton } from \"@material-ui/core\";\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport { withSnackbar, WithSnackbarProps } from \"notistack\";\nimport React from \"react\";\n\nexport const NotificationContext = React.createContext(\n {} as INotificationContext\n);\n\nexport interface INotificationContext {\n showSuccessNotification: (message: string) => void;\n showErrorNotification: (message: string) => void;\n showWarningNotification: (message: string) => void;\n showNotification: (notificationConfig: INotificationConfig) => void;\n}\n\nexport interface INotificationConfig {\n level?: \"default\" | \"success\" | \"warning\" | \"error\";\n message: string;\n duration?: number;\n}\n\ninterface IProps extends WithSnackbarProps {\n children?: any;\n}\n\nconst InnerNotificationProvider = ({\n enqueueSnackbar,\n closeSnackbar,\n children,\n}: IProps) => {\n const showNotification = ({\n message,\n duration = 5000,\n level = \"default\",\n }: INotificationConfig) => {\n enqueueSnackbar(message, {\n variant: level,\n autoHideDuration: duration,\n });\n };\n\n const closeHandler = (key: string) => () => {\n closeSnackbar(key);\n };\n\n const action = (key: string) => (\n <>\n \n \n \n \n );\n const showSuccessNotification = (message: string) => {\n enqueueSnackbar(message, {\n variant: \"success\",\n autoHideDuration: 5000,\n });\n };\n\n const showErrorNotification = (message: string) => {\n enqueueSnackbar(message, {\n variant: \"error\",\n autoHideDuration: 10000,\n action,\n });\n };\n\n const showWarningNotification = (message: string) => {\n enqueueSnackbar(message, {\n variant: \"warning\",\n autoHideDuration: 10000,\n action,\n });\n };\n\n return (\n \n {children}\n \n );\n};\nexport const NotificationProvider = withSnackbar(InnerNotificationProvider);\n","import React from \"react\";\nimport AuthContextProvider from \"../context/AuthContext\";\nimport { withLoadingContextProvider } from \"../context/LoadingContext\";\nimport { NotificationProvider } from \"../context/NotificationContext\";\n\nexport default withLoadingContextProvider(({ children }: any) => (\n \n {children}\n \n));\n","import {\n AddActiveKidsVouchersInput,\n AddHolidayCourseDocument,\n AddHolidayCourseInput,\n AddHolidayCourseMutation,\n DeleteHolidayCourseDocument,\n DeleteHolidayCourseInput,\n DeleteHolidayCourseMutation,\n GetHolidayCourseDocument,\n GetHolidayCourseQuery,\n UpdateHolidayCourseDocument,\n UpdateHolidayCourseInput,\n UpdateHolidayCourseMutation,\n GetVouchersQuery,\n GetVouchersDocument,\n DeleteActiveKidsVouchersInput,\n DeleteVouchersMutation,\n DeleteVouchersDocument,\n AddVoucherMutation,\n AddVoucherDocument,\n UpdateVoucherDocument,\n UpdateVoucherMutation,\n UpdateActiveKidsVouchersInput,\n ChangeVoucherStatusInput,\n ChangeVoucherStatusMutation,\n ChangeVoucherStatusDocument,\n} from \"../generated/graphql\";\nimport { client } from \"./client\";\n\nexport const addActiveKidsVoucher = async (\n inputData: AddActiveKidsVouchersInput\n) =>\n (\n await client.mutate({\n mutation: AddVoucherDocument,\n variables: {\n param: {\n ...inputData,\n },\n },\n })\n ).data?.addVoucher;\n\nexport const getActiveKidsVouchers = async (ownerId: string) =>\n (\n await client.query({\n query: GetVouchersDocument,\n variables: {\n param: {\n ownerId,\n },\n },\n })\n ).data?.getVouchers;\n\nexport const deleteActiveKidsVouchers = async ({\n voucherIds,\n}: DeleteActiveKidsVouchersInput): Promise => {\n const result =\n (\n await client.mutate({\n mutation: DeleteVouchersDocument,\n variables: {\n param: {\n voucherIds,\n },\n },\n })\n ).data?.deleteVouchers ?? false;\n return result;\n};\n\nexport const updateActiveKidsVoucher = async (\n param: UpdateActiveKidsVouchersInput\n) => {\n const result = (\n await client.mutate({\n mutation: UpdateVoucherDocument,\n variables: {\n param,\n },\n })\n ).data?.updateVoucher;\n return result;\n};\n\nexport const changeVoucherStatus = async (param: ChangeVoucherStatusInput) => {\n const result = (\n await client.mutate({\n mutation: ChangeVoucherStatusDocument,\n variables: {\n param,\n },\n })\n ).data?.changeVoucherStatus;\n return result;\n};\n","import { Paper, Theme, Typography } from \"@material-ui/core\";\nimport { createStyles, WithStyles, withStyles } from \"@material-ui/styles\";\nimport React from \"react\";\n\nconst styles = ({ spacing }: Theme) =>\n createStyles({\n container: {\n margin: spacing(2),\n },\n });\n\ninterface Props extends WithStyles {\n title: string;\n}\nconst EmptyInfo = ({ classes, title }: Props) => {\n return (\n \n {title}\n \n );\n};\n\nexport default withStyles(styles)(EmptyInfo);\n","enum ERoutePath {\n home = \"/\",\n home2 = \"/home\",\n signup = \"/signup\",\n signin = \"/signin\",\n enrolments = \"/enrolments\",\n payments = \"/payments\",\n changePassword = \"/change-password\",\n forgotPassword = \"/forgot-password\",\n resetPassword = \"/reset-password\",\n signout = \"/signout\",\n profile = \"/profile\",\n players = \"/players\",\n courses = \"/courses\",\n activeKidsVoucheres = \"/active-kids-vouchers\",\n holidayCourses = \"/holiday-courses\",\n schoolEnrolment = \"/school-enrolment\",\n holidayCoursesEnrolment = \"/holiday-courses-enrolment\",\n tournamentEnrolment = \"/tournament-enrolment\",\n tournaments = \"/tournaments\",\n makeupRules = \"/makeup-rules\",\n timeTable = \"/classes-timetable\",\n holidayCampsTimeTable = \"/holiday-camps-timetable\",\n contactUs = \"/contact\",\n holidayCamp = \"/sydney-holiday-camps\",\n blog = \"/blog\",\n blogTechniques = \"/blog/table-tennis-backhand-techniques\",\n blogForBeginners = \"/blog/table-tennis-for-beginners-5-tips-to-improve-your-bat-skills\",\n blogWhy = \"/blog/why-to-send-your-kid-to-holiday-programs\",\n blogActivities = \"/blog/extracurricular-activities-in-schools\",\n blogThings = \"/blog/things-to-do-on-holidays\",\n}\n\nexport default ERoutePath;\n","import { Paper, Theme } from \"@material-ui/core\";\nimport { createStyles, WithStyles, withStyles } from \"@material-ui/styles\";\nimport React from \"react\";\n\nconst styles = ({ spacing }: Theme) =>\n createStyles({\n container: {\n margin: spacing(1),\n minWidth: \"80%\",\n },\n });\n\ninterface Props extends WithStyles {\n children: any;\n}\nconst FormContainer = ({ classes, children }: Props) => {\n return {children};\n};\n\nexport default withStyles(styles)(FormContainer);\n","import { Grid } from \"@material-ui/core\";\nimport React from \"react\";\nconst FormRow = (props: any) => (\n \n {props.children}\n \n);\nexport default FormRow;\n","import Auth from \"@aws-amplify/auth\";\nimport { Button, Grid, TextField } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport { useFormik } from \"formik\";\nimport React, { useContext } from \"react\";\nimport * as yup from \"yup\";\nimport {\n addActiveKidsVoucher,\n changeVoucherStatus,\n deleteActiveKidsVouchers,\n updateActiveKidsVoucher,\n} from \"../api/activeKidsVouchers.service\";\nimport { AuthContext } from \"../context/AuthContext\";\n\nimport { LoadingContext } from \"../context/LoadingContext\";\nimport { NotificationContext } from \"../context/NotificationContext\";\nimport {\n AddActiveKidsVouchersInput,\n ERole,\n EVoucherStatus,\n UpdateActiveKidsVouchersInput,\n VouchersResp,\n} from \"../generated/graphql\";\nimport FormContainer from \"./FormContainer\";\nimport FormRow from \"./FormRow\";\n\nconst styles = (theme: Theme) => createStyles({});\n\nexport interface Props extends WithStyles {\n onClose: () => void;\n onNewVoucher: (newVoucher: VouchersResp) => void;\n onVoucherUpdated: (voucherUpdated: VouchersResp) => void;\n onVoucherDeleted: (voucherId: string) => void;\n voucher: VouchersResp | null;\n}\n\nfunction ActiveKidsVoucherDetail({\n classes,\n onClose,\n onNewVoucher,\n voucher,\n onVoucherUpdated,\n onVoucherDeleted,\n}: Props) {\n const isNewVoucher = !!!voucher;\n\n const initialValues = {\n firstName: voucher?.firstName ?? \"\",\n middleName: voucher?.middleName ?? \"\",\n lastName: voucher?.lastName ?? \"\",\n voucherNumber: voucher?.voucherNumber ?? \"\",\n expiryDate: voucher?.expiryDate ?? \"\",\n dob: voucher?.dob ?? \"\",\n status: voucher?.status ?? EVoucherStatus.Submitted,\n };\n const { showLoading, hideLoading } = useContext(LoadingContext);\n const { showErrorNotification, showSuccessNotification } =\n useContext(NotificationContext);\n const { userProfile } = useContext(AuthContext);\n\n const validationSchema = yup.object().shape({\n firstName: yup.string().required(\"Enter first name\"),\n lastName: yup.string().required(\"Enter first name\"),\n dob: yup.date().required(\"Enter Date of birth\"),\n expiryDate: yup.date().required(\"Enter voucher expiry date\"),\n voucherNumber: yup\n .string()\n .required(\"Enter voucher number\")\n .test({\n name: \"Voucher number\",\n message: \"Invalid voucher number\",\n test: (value: string | undefined): boolean =>\n /^\\d{4}\\s?\\d{4}\\s?\\d{4}\\s?\\d{4}$/g.test(value ?? \"\"),\n }),\n });\n const { values, handleSubmit, handleChange, touched, errors, setFieldValue } =\n useFormik({\n initialValues,\n validationSchema,\n onSubmit: async (v) => {\n const {\n firstName,\n middleName,\n lastName,\n voucherNumber,\n expiryDate,\n dob,\n } = v;\n\n try {\n showLoading();\n if (isNewVoucher) {\n const addVoucherParam: AddActiveKidsVouchersInput = {\n firstName,\n middleName,\n lastName,\n voucherNumber,\n expiryDate,\n dob,\n };\n const newVoucher = await addActiveKidsVoucher(addVoucherParam);\n showSuccessNotification(\"Voucher added\");\n if (newVoucher) {\n onNewVoucher(newVoucher);\n }\n } else {\n const voucherToBeUpdated: UpdateActiveKidsVouchersInput = {\n voucherId: voucher?.id ?? \"\",\n firstName,\n middleName,\n lastName,\n voucherNumber,\n expiryDate,\n dob,\n };\n const updatedVoucher = await updateActiveKidsVoucher(\n voucherToBeUpdated\n );\n\n showSuccessNotification(\"Voucher updated\");\n if (updatedVoucher) {\n onVoucherUpdated(updatedVoucher);\n }\n }\n onClose();\n } catch (e) {\n showErrorNotification(\"please try again later\");\n } finally {\n hideLoading();\n }\n },\n });\n\n const handleDeleteVoucher = async () => {\n await deleteActiveKidsVouchers({\n voucherIds: [voucher?.id ?? \"\"],\n });\n onVoucherDeleted(voucher?.id ?? \"\");\n onClose();\n };\n\n const handleUpdateStatus = (status: EVoucherStatus) => async () => {\n const updatedVoucher = await changeVoucherStatus({\n voucherId: voucher?.id ?? \"\",\n status,\n });\n if (updatedVoucher) {\n onVoucherUpdated(updatedVoucher);\n }\n onClose();\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 {(!voucher ||\n (voucher && voucher.status !== EVoucherStatus.Claimed)) && (\n \n \n {isNewVoucher ? \"Save a new voucher\" : \"Update voucher\"}\n \n \n )}\n {voucher && voucher.status !== EVoucherStatus.Claimed && (\n \n \n {\"Delete voucher\"}\n \n \n )}\n {voucher && userProfile?.role === ERole.Admin && (\n \n \n {voucher?.status === EVoucherStatus.Claimed\n ? \"Change voucher status to Submitted\"\n : \"Change voucher status to Claimed\"}\n \n \n )}\n \n \n \n
\n );\n}\n\nexport default withStyles(styles)(ActiveKidsVoucherDetail);\n","import {\n DialogTitle as MuiDialogTitle,\n IconButton,\n Theme,\n Typography\n} from \"@material-ui/core\";\nimport { createStyles, withStyles, WithStyles } from \"@material-ui/core/styles\";\nimport CloseIcon from \"@material-ui/icons/Close\";\n\ninterface IDialogTitleProps extends WithStyles {\n onClose: () => void;\n children: JSX.Element;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n card: {\n maxWidth: 420,\n marginTop: 50,\n },\n container: {\n display: \"Flex\",\n justifyContent: \"center\",\n },\n actions: {\n float: \"right\",\n },\n dialog: {},\n root: {\n margin: 0,\n padding: theme.spacing(2),\n background: theme.palette.primary.main,\n },\n closeButton: {\n position: \"absolute\",\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[500],\n },\n });\n\nconst DialogTitle = withStyles(styles)((props: IDialogTitleProps) => {\n const { children, classes, onClose, ...rest } = props;\n return (\n \n {children}\n {onClose ? (\n \n \n \n ) : null}\n \n );\n});\nexport default DialogTitle;\n","import { Paper, Theme, Typography } from \"@material-ui/core\";\nimport { createStyles, WithStyles, withStyles } from \"@material-ui/core/styles\";\nimport React from \"react\";\n\nconst styles = ({ spacing, breakpoints }: Theme) =>\n createStyles({\n container: {\n margin: spacing(2),\n },\n title: {\n fontSize: \"3em\",\n [breakpoints.down(\"sm\")]: {\n fontSize: \"2em\",\n },\n },\n });\n\ninterface Props extends WithStyles {\n title: string;\n}\nconst FormTitle = ({ title, classes }: Props) => (\n \n {title}\n \n);\nexport default withStyles(styles)(FormTitle);\n","import { withStyles } from \"@material-ui/core\";\nimport { DataGrid } from \"@material-ui/data-grid\";\n\nconst CustomizedDataGrid = withStyles({\n root: {\n // background: \"linear-gradient(45deg, #FE6B8B 30%, #FF8E53 90%)\",\n background: \"yellow\",\n borderRadius: 130,\n border: 0,\n color: \"white\",\n height: 48,\n padding: \"0 30px\",\n boxShadow: \"0 3px 5px 2px rgba(255, 105, 135, .3)\",\n row: {\n selected: {\n \"&.hover\": {\n backgroundColor: \"red\",\n },\n },\n },\n },\n})(DataGrid);\n\nexport default CustomizedDataGrid;\n","import { Paper } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport { RowParams } from \"@material-ui/data-grid\";\nimport React from \"react\";\nimport { VouchersResp } from \"../generated/graphql\";\nimport CustomizedDataGrid from \"./CustomizedDataGrid\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n container: {\n height: \"40vh\",\n overflowY: \"auto\",\n width: \"95%\",\n },\n root: {\n backgroundColor: \"yellow\",\n },\n });\n\nexport interface Props extends WithStyles {\n vouchers: VouchersResp[];\n onSelectedVoucher?: (selectedVoucher: VouchersResp) => void;\n}\n\nexport interface IVouchersRow {\n id: string;\n voucherNumber: string;\n name: string;\n status: string;\n expiryDate: string;\n}\n\nfunction VoucherList(props: Props) {\n const { classes, vouchers, onSelectedVoucher } = props;\n const columns = [\n { field: \"name\", headerName: \"Name\", width: 130 },\n { field: \"voucherNumber\", headerName: \"Voucher number\", width: 130 },\n { field: \"status\", headerName: \"Status\", width: 130 },\n { field: \"expiryDate\", headerName: \"Expiry date\", width: 130 },\n ];\n\n const rows: IVouchersRow[] = vouchers.map((voucher: VouchersResp) => ({\n id: voucher.id,\n voucherNumber: voucher.voucherNumber,\n status: voucher.status,\n name: `${voucher.firstName}${\n voucher.middleName ? \" \" + voucher.middleName : \"\"\n } ${voucher.lastName}`,\n expiryDate: voucher.expiryDate,\n }));\n\n const handleRowClick = ({ rowIndex }: RowParams) => {\n if (onSelectedVoucher) {\n onSelectedVoucher(vouchers[rowIndex]);\n }\n };\n\n return (\n \n \n \n );\n}\n\nexport default withStyles(styles)(VoucherList);\n","import {\n Button,\n Dialog,\n DialogContent,\n Grid,\n Typography,\n} from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport React, { useContext, useEffect, useState } from \"react\";\nimport { useHistory } from \"react-router\";\nimport { useImmer } from \"use-immer\";\nimport { getActiveKidsVouchers } from \"../api/activeKidsVouchers.service\";\nimport { getHolidayCourses } from \"../api/holidayCourse.service\";\nimport { AuthContext } from \"../context/AuthContext\";\nimport { LoadingContext } from \"../context/LoadingContext\";\nimport EmptyInfo from \"../EmptyInfo\";\nimport {\n AddHolidayCourseResp,\n ERole,\n HolidayCourse,\n UpdateHolidayCourseResp,\n VouchersResp,\n} from \"../generated/graphql\";\nimport ERoutePath from \"../routes/ERoutePath\";\nimport ActiveKidsVoucherDetail from \"./ActiveKidsVoucherDetail\";\nimport DialogTitle from \"./DialogTitle\";\nimport FormContainer from \"./FormContainer\";\nimport FormRow from \"./FormRow\";\nimport FormTitle from \"./FormTitle\";\nimport HolidayCourseDetail from \"./HolidayCourseDetail\";\nimport HolidayCourseList from \"./HolidayCourseList\";\nimport VoucherList from \"./VoucherList\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n paperWidthSm: {\n maxWidth: \"80em\",\n },\n });\n\nexport interface Props extends WithStyles {}\n\nfunction ActiveKidsVouchers(props: Props) {\n const { classes } = props;\n const { showLoading, hideLoading } = useContext(LoadingContext);\n const { userProfile } = useContext(AuthContext);\n\n const [addNewVoucher, setAddNewVoucher] = useState(false);\n const [vouchers, setVouchers] = useImmer([]);\n const history = useHistory();\n const [selectedVoucher, setSelectedVoucher] = useState(\n null\n );\n\n // const handleVoucherUpdated = (updatedCourse: UpdateHolidayCourseResp) => {\n const handleVoucherUpdated = (updatedCourse: VouchersResp) => {\n setVouchers((draft) => {\n const idx = draft.findIndex((dc) => dc.id === updatedCourse.id);\n draft[idx] = updatedCourse;\n });\n };\n\n const handleNewVoucher = (newVoucher: VouchersResp) => {\n setVouchers((draft) => {\n draft.push(newVoucher);\n });\n };\n\n const handleVouchersDeleted = (voucherId: string) => {\n setVouchers((draft) => {\n const foundIdx = draft.findIndex((c) => c.id === voucherId);\n if (foundIdx !== -1) {\n draft.splice(foundIdx, 1);\n }\n });\n };\n\n const handleClose = () => {\n setAddNewVoucher(false);\n setSelectedVoucher(null);\n };\n\n const handleAddNewVoucher = () => {\n setAddNewVoucher(true);\n };\n\n const retrieveActiveKidsVouchers = async () => {\n showLoading();\n\n try {\n if (!userProfile?.uid) {\n history.push(ERoutePath.signin);\n return;\n }\n let vouchers: VouchersResp[] = [];\n if (userProfile.role === ERole.Admin) {\n vouchers = await getActiveKidsVouchers(userProfile?.uid);\n } else {\n vouchers = await getActiveKidsVouchers(userProfile?.uid);\n }\n setVouchers((draft) => {\n draft.length = 0;\n if (vouchers) {\n draft.push(...vouchers);\n }\n });\n } finally {\n hideLoading();\n }\n };\n\n useEffect(() => {\n retrieveActiveKidsVouchers();\n }, []);\n\n const handleSelectedVoucher = (voucher: VouchersResp) => {\n setSelectedVoucher(voucher);\n };\n\n const getDialogTitle = () => (\n \n {selectedVoucher ? \"Update voucher\" : \"Add a new voucher\"}\n \n );\n\n return (\n \n \n \n \n \n {vouchers.length > 0 && (\n \n )}\n {vouchers.length === 0 && (\n \n )}\n \n \n \n Add a new voucher\n \n \n \n \n \n {getDialogTitle()}\n \n \n \n \n \n );\n}\n\nexport default withStyles(styles)(ActiveKidsVouchers);\n","import { Grid, Paper } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport React, { useContext } from \"react\";\nimport { blogActivitiesHtml } from \"../htmls/blogActivitiesHtml\";\n\nconst styles = (theme: Theme) => {\n return createStyles({\n main: {\n padding: theme.spacing(2),\n textAlign: \"center\",\n },\n clsImage: {\n maxWidth: \"300px\",\n },\n container: {\n marginLeft: \"50px\",\n marginRight: \"50px\",\n },\n });\n};\ninterface Props extends WithStyles {}\n\nconst BlogActivitiesPage = ({ classes }: Props) => {\n const htmlDoc = { __html: blogActivitiesHtml };\n\n return ;\n};\n\nexport default withStyles(styles)(BlogActivitiesPage);\n","export const blogActivitiesHtml = `\n\n\n\n\n\t\n\tExtracurricular Activities in Schools | Activities for Fun| Vivian TT\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\n\n\n\n\n\t\t\n\t\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\n\n\t\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\t\t\n\t\t\n \n\t
\n\t
\n\t\"Vivian

Vivian table tennis

\n\t

Raising up tomorrow's young champions

\n\t

Extracurricular Activities for School Children

\n

by Vivian Tan

\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

Engaging in extracurricular activities in school is a great way for students to learn about themselves and others. There are so many activities to choose from, that students can find something that they want to do. The extracurricular activities let the students to make new friends and learn new skills. These activities are a great way to make school life more colorful and help students to enjoy their time there.

Studies show that extracurricular activities at school can help students learn important skills that can be used in the future. There are so many extracurricular activities to choose from, and students should try them out to find one that suits them.

There are many benefits to participating in extracurricular activities. For example, students can develop team bonding skills by spending time together in a school club or sports team. They can also learn how to manage their time and stay organized by balancing their school work with their extracurricular commitments. Additionally, students can build their self-confidence by participating in activities that they are passionate about.

If you are looking for a way to get involved in your community, look for extracurricular activities that offer volunteer opportunities. You can help out at a local shelter or soup kitchen, or participate in a fundraising event. You can also find clubs or teams that focus on community service.

There are many benefits to students participating in extracurricular activities. Sydney holiday camps is a best choice for those who looking for the perfect holiday camp experience for their children. They offer a wide range of extracurricular activities, these activities help students to develop their skills and talents. They also allow students to socialize and make friends. Kids and parents are often confused about the things to do on holidays. Active participation in various extracurricular activities in school keeps your kids packed up for the whole holiday.

Schools should offer a variety of extracurricular activities so that all students can find one that interests them. Some popular activities include athletics, music, drama, and clubs. However, schools should also offer less common activities, such as robotics, martial arts, and debate.

No matter what your interests are, there is likely an extracurricular activity that matches them. So get out there and give it a try!

Some of the benefits of participating in extracurricular activities include:

  • Developing teamwork skills
  • Learning how to be a leader or a follower
  • Improving communication skills
  • Gaining new friends
  • Boosting self-confidence
  • Learning new skills
  • Getting exercise
  • Having fun
  • Meeting new people
  • Developing new skills
\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Complete List of Extracurricular Activities: 100s of Examples

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

There are many extracurricular activities that students can get involved in while in school. The list below provides examples of some of the most common extracurricular activities.

  • Student government
  • Model UN
  • Debate
  • Chess club
  • Yearbook
  • Photography club
  • Gardening club
  • Science club
  • Math club
  • Computer club
  • Art club
  • Music club
  • Theater club
  • Sports
  • Volunteering
  • School Newspaper
  • Yearbook
  • Student Council
  • Cheerleading
  • Band
  • Orchestra
  • Choir
  • Glee Club
  • Drama Club
  • Debate Club
  • Math Club
  • Science Club
  • Literary Magazine
  • Art Club
  • Gardening Club
  • Yearbook Staff
  • Student Ambassadors
  • Model UN
  • Mock Trial
  • Robotics Club
  • Running Club
  • Skiing Club
  • Swimming Club
  • Tennis Club
  • Track and Field
  • Ultimate Frisbee
  • Volleyball
  • Water Polo
  • Weightlifting Club
  • Wrestling Club
\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Extracurriculars Activity List by Category

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

There are many opportunities for students to get involved in extracurricular activities. Talk to your school counselor or teachers to find out more about the activities available at your school.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Academic

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

There are a number of academic clubs that students can join in high school. These clubs often focus on a particular subject, such as math or science, and allow students to explore these topics further. Academic clubs can provide a great opportunity for students to meet others with similar interests and learn more about their subject.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Art

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

There are a number of art clubs that students can join in school. These clubs often allow students to explore their creative side and learn new skills. Joining an arts club can be a great way to meet others with similar interests and develop your talents.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Cultural and Language

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

There are many different types of cultural and language clubs that students can join in school. These clubs allow students to explore their interests in different cultures and languages, and to meet other students who share those interests. Some examples of cultural and language clubs include the French club, the Spanish club, the German club, and the Asian club.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Community

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

Extracurricular activities in schools can include community service. Community service is a great way for students to get involved in their community and give back.It can also help students learn new skills and connect with others.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Music

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

Instrumental music programs in schools have been shown to have a positive effect on students’ math and verbal skills, as well as their attitudes toward school.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Social Activism

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

Extracurricular activities in schools can also include social activism. This can include activities such as raising awareness about social issues, fundraising for charities, and volunteering.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Sports and Recreation

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

Extracurricular activities in schools can include sports and recreation. In some schools, all students are required to participate in a sport, while others offer a variety of sports and recreation activities that students can choose from.

Participating in sports and recreation can provide students with many benefits, including improved physical health, socialization opportunities, and skills development. Sports and recreation can also help students to relieve stress and have fun. Vivian Table Tennis Academy encourages children of all ages to participate in table tennis activities and mold them to be an excellent player.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Technology

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

Technology has become an important part of schools, so that extracurricular activities now include using technology. There are many clubs and activities that involve technology. Here are some examples:

1. Robotics club
2. Coding club
3. 3D printing club
4. App development club
5. Web design club
6. Gamer club
7. Technology news club

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Final Word

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

Extracurricular Activities (ECAs) are a vital part of the school experience for many students. ECAs also offer students social and emotional benefits, such as a sense of belonging and self-esteem. Schools should also make sure that ECAs are affordable and accessible to all students. Some common ECAs offered in schools include music and arts programs, sports teams and clubs, academic clubs and competitions, service-learning opportunities, and many more.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t
\n\t\t\t\t\t
\n\t\t
\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 { Grid, Paper } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport React, { useContext } from \"react\";\nimport { blogBeginnersHtml } from \"../htmls/blogBeginnersHtml\";\n\nconst styles = (theme: Theme) => {\n return createStyles({\n main: {\n padding: theme.spacing(2),\n textAlign: \"center\",\n },\n clsImage: {\n maxWidth: \"300px\",\n },\n container: {\n marginLeft: \"50px\",\n marginRight: \"50px\",\n },\n });\n};\ninterface Props extends WithStyles {}\n\nconst BlogBeginnerPage = ({ classes }: Props) => {\n const htmlDoc = { __html: blogBeginnersHtml };\n\n return ;\n};\n\nexport default withStyles(styles)(BlogBeginnerPage);\n","export const blogBeginnersHtml = `\n\n\n\n\n\t\n\t5 Tips to Improve your Bat Skills in Table Tennis\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\n\n\n\n\n\t\t\n\t\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\n\n\t\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\t\t\n\t\t\n \n\t

Table Tennis for Beginners – 5 Tips to Improve your Bat Skills

\n

by Hash Media

\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

Playing table tennis seems easy, but there are some maneuvers that will help you excel in the game. The first thing to know is that it is all about the serve. When you are serving, you will need to learn how to use the spin on the ball. The only way to do this is by using a different spin on the ball for the serve. One of the best ways to do this is to use the inverted serve. It is not difficult to learn, but it does take some practice. Another great way to improve your Ping Pong skills is by learning how to play the table. This can be done by playing the ball back and forth with your opponent. This is a lot easier and will make you more confident in your

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Holding the Bat and Service

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

When holding the bat, ensure that your hand is positioned at the end of the bat and your thumb is gripping the bat. When serving, make sure to use your arm and not your hand to generate power.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Actions on the Ball

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

1. Always try to keep your bat in front of the ball as you hit it. This will give you more time to hit the ball properly and will help to keep the ball on the table.

2. When you hit the ball, make sure to hit it in the center. This will help to make the ball go in the direction that you want it to go.

3. Use your hand and arm to generate power when you hit the ball. This will help you to hit the ball harder and will make it more difficult for your opponent to return the ball.

4. Be sure to keep your body still when you hit the ball. This will help you to hit the ball with more power and will make it more difficult for your opponent to return the ball.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Footwork

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

1. Make sure you have good footwork. This will help you get to the ball quickly and give you the best chance to hit it.

2. Practice your footwork drills. There are a number of different footwork drills you can do to improve your skills.

3. Stay low when you hit the ball. This will give you more power and better control.

4. Practice hitting the ball at different speeds. This will help you become more versatile with your shots.

5. Keep your eye on the ball. This is the most important thing to do when playing table tennis. If you lose sight of the ball, you will not be able to hit it properly.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Technical Strikes

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

In order to improve your bat skills in table tennis, you need to practice the following techniques:

1. Forehand Drive: This is the most basic stroke in table tennis and is used to hit the ball over the net. To perform this stroke, stand in front of the table with your dominant hand (the hand you write with) at the back of the bat. Hold the bat with your other hand and extend your arm forward. When you see the ball coming, hit it with your dominant hand. Make sure to keep your arm and hand close to your body and use your wrist to snap the bat forward.

2. Backhand Drive: This is the mirror image of the forehand drive and is used to hit the ball back over the net. To perform this stroke, stand at the back of the table with your dominant hand at the front of the bat. Hold the bat with your other hand and extend your arm backward. When you see the ball coming, hit it with your dominant hand. Make sure to keep your arm and hand close to your body and use your wrist to snap the bat backward.

3. Forehand Loop: This stroke is used to hit the ball over the net and make

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Top-spin

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

In order to improve your top-spin, you should try to keep your arm and hand close to the ball as you hit it. This will help you generate more power and spin. You should also use a forward motion when you hit the ball, and make sure to hit the ball in the center.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Blocks and Defense

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

1. When you are defending, always keep your racket in front of you so that you can block the ball.

2. When you are blocking, make sure to keep your racket close to the table so that you can return the ball quickly.

3. When you are defending, keep your body sideways to the table so that you can move quickly to the ball.

4. When you are defending, keep your eyes on the ball and the opponent’s racket so that you can react quickly.

5. When you are defending, keep your racket parallel to the table so that you can return the ball with power.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Blocks and Defense

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

Keep the ball with your paddle in the correct position

\n

In order to hit the ball in the correct spot on your paddle, you need to be in the correct position to receive the ball. When you are receiving the ball, make sure your paddle is in the correct position to hit the ball back with the correct spin and speed.

\n

Practice your footwork

\n

Good footwork is essential for good table tennis. You need to be able to move quickly around the table so that you can hit the ball in the correct spot. Practice moving around the table so that you can be in the right position to hit the ball.

\n

Practice your swings

\n

In order to hit the ball with the correct spin and speed, you need to practice your swings. Make sure you are swinging your paddle in the correct direction and at the correct speed.

\n

Keep your eye on the ball

\n

It is important to keep your eye on the ball when you are playing table tennis. This will help you to hit the ball in the correct spot on your paddle.

\n

Vivian Table Tennis Academy, a leading table tennis academy in North Shore Sydney offers professional table tennis training to kids and conducts school holiday camps during school holidays. The team of professional table tennis coaches headed by former Olympian Vivian Tan, ensure the best table tennis lessons to the kids. To know more visit us

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t
\n\t\t\t\t\t
\n\t\t
\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 { Grid, Paper } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport React, { useContext } from \"react\";\nimport { blogHtml } from \"../htmls/blog\";\n\nconst styles = (theme: Theme) => {\n return createStyles({\n main: {\n padding: theme.spacing(2),\n textAlign: \"center\",\n },\n clsImage: {\n maxWidth: \"300px\",\n },\n container: {\n marginLeft: \"50px\",\n marginRight: \"50px\",\n },\n });\n};\ninterface Props extends WithStyles {}\n\nconst BlogPage = ({ classes }: Props) => {\n const htmlDoc = { __html: blogHtml };\n\n return ;\n};\n\nexport default withStyles(styles)(BlogPage);\n","export const blogHtml = `\n \n \n \n \n\n \n Blog | Vivian Table Tennis Academy Sydney\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 var mi_version = \"8.9.1\";\n var mi_track_user = true;\n var mi_no_track_reason = \"\";\n\n var disableStrs = [\"ga-disable-UA-224017852-1\"];\n\n /* Function to detect opted out users */\n function __gtagTrackerIsOptedOut() {\n for (var index = 0; index < disableStrs.length; index++) {\n if (document.cookie.indexOf(disableStrs[index] + \"=true\") > -1) {\n return true;\n }\n }\n\n return false;\n }\n\n /* Disable tracking if the opt-out cookie exists. */\n if (__gtagTrackerIsOptedOut()) {\n for (var index = 0; index < disableStrs.length; index++) {\n window[disableStrs[index]] = true;\n }\n }\n\n /* Opt-out function */\n function __gtagTrackerOptout() {\n for (var index = 0; index < disableStrs.length; index++) {\n document.cookie =\n disableStrs[index] +\n \"=true; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/\";\n window[disableStrs[index]] = true;\n }\n }\n\n if (\"undefined\" === typeof gaOptout) {\n function gaOptout() {\n __gtagTrackerOptout();\n }\n }\n window.dataLayer = window.dataLayer || [];\n\n window.MonsterInsightsDualTracker = {\n helpers: {},\n trackers: {},\n };\n if (mi_track_user) {\n function __gtagDataLayer() {\n dataLayer.push(arguments);\n }\n\n function __gtagTracker(type, name, parameters) {\n if (!parameters) {\n parameters = {};\n }\n\n if (parameters.send_to) {\n __gtagDataLayer.apply(null, arguments);\n return;\n }\n\n if (type === \"event\") {\n parameters.send_to = monsterinsights_frontend.ua;\n __gtagDataLayer(type, name, parameters);\n } else {\n __gtagDataLayer.apply(null, arguments);\n }\n }\n\n __gtagTracker(\"js\", new Date());\n __gtagTracker(\"set\", {\n \"developer_id.dZGIzZG\": true,\n });\n __gtagTracker(\"config\", \"UA-224017852-1\", {\n forceSSL: \"true\",\n link_attribution: \"true\",\n });\n window.gtag = __gtagTracker;\n (function () {\n /* https://developers.google.com/analytics/devguides/collection/analyticsjs/ */\n /* ga and __gaTracker compatibility shim. */\n var noopfn = function () {\n return null;\n };\n var newtracker = function () {\n return new Tracker();\n };\n var Tracker = function () {\n return null;\n };\n var p = Tracker.prototype;\n p.get = noopfn;\n p.set = noopfn;\n p.send = function () {\n var args = Array.prototype.slice.call(arguments);\n args.unshift(\"send\");\n __gaTracker.apply(null, args);\n };\n var __gaTracker = function () {\n var len = arguments.length;\n if (len === 0) {\n return;\n }\n var f = arguments[len - 1];\n if (\n typeof f !== \"object\" ||\n f === null ||\n typeof f.hitCallback !== \"function\"\n ) {\n if (\"send\" === arguments[0]) {\n var hitConverted,\n hitObject = false,\n action;\n if (\"event\" === arguments[1]) {\n if (\"undefined\" !== typeof arguments[3]) {\n hitObject = {\n eventAction: arguments[3],\n eventCategory: arguments[2],\n eventLabel: arguments[4],\n value: arguments[5] ? arguments[5] : 1,\n };\n }\n }\n if (\"pageview\" === arguments[1]) {\n if (\"undefined\" !== typeof arguments[2]) {\n hitObject = {\n eventAction: \"page_view\",\n page_path: arguments[2],\n };\n }\n }\n if (typeof arguments[2] === \"object\") {\n hitObject = arguments[2];\n }\n if (typeof arguments[5] === \"object\") {\n Object.assign(hitObject, arguments[5]);\n }\n if (\"undefined\" !== typeof arguments[1].hitType) {\n hitObject = arguments[1];\n if (\"pageview\" === hitObject.hitType) {\n hitObject.eventAction = \"page_view\";\n }\n }\n if (hitObject) {\n action =\n \"timing\" === arguments[1].hitType\n ? \"timing_complete\"\n : hitObject.eventAction;\n hitConverted = mapArgs(hitObject);\n __gtagTracker(\"event\", action, hitConverted);\n }\n }\n return;\n }\n\n function mapArgs(args) {\n var arg,\n hit = {};\n var gaMap = {\n eventCategory: \"event_category\",\n eventAction: \"event_action\",\n eventLabel: \"event_label\",\n eventValue: \"event_value\",\n nonInteraction: \"non_interaction\",\n timingCategory: \"event_category\",\n timingVar: \"name\",\n timingValue: \"value\",\n timingLabel: \"event_label\",\n page: \"page_path\",\n location: \"page_location\",\n title: \"page_title\",\n };\n for (arg in args) {\n if (\n !(!args.hasOwnProperty(arg) || !gaMap.hasOwnProperty(arg))\n ) {\n hit[gaMap[arg]] = args[arg];\n } else {\n hit[arg] = args[arg];\n }\n }\n return hit;\n }\n\n try {\n f.hitCallback();\n } catch (ex) {}\n };\n __gaTracker.create = newtracker;\n __gaTracker.getByName = newtracker;\n __gaTracker.getAll = function () {\n return [];\n };\n __gaTracker.remove = noopfn;\n __gaTracker.loaded = true;\n window[\"__gaTracker\"] = __gaTracker;\n })();\n } else {\n console.log(\"\");\n (function () {\n function __gtagTracker() {\n return null;\n }\n\n window[\"__gtagTracker\"] = __gtagTracker;\n window[\"gtag\"] = __gtagTracker;\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 \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 \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 \n
\n
\n \n \n
\n \n
\n \n \n \n
\n \n
\n \n
\n

\n \n Important Backhand Techniques in Table\n Tennis\n \n

\n \n
\n

\n In the sport of table tennis, the\n backhand is one of the most important\n techniques that a player must master.\n The backhand can be used\n

\n
\n\n \n Read More »\n \n
\n \n \n \n
\n \n
\n \n
\n

\n \n Table Tennis for Beginners – 5 Tips to\n Improve your Bat Skills\n \n

\n \n
\n

\n Playing table tennis seems easy, but\n there are some maneuvers that will help\n you excel in the game. The first thing\n to know is that\n

\n
\n\n \n Read More »\n \n
\n \n \n \n
\n \n
\n \n
\n

\n \n Why Send Your Kids to Holiday Programs\n \n

\n \n
\n

\n Holiday Programs: Choosing The Right One\n For Your Child Many kids do not get a\n chance to participate in holiday\n programs, so your child should\n

\n
\n\n \n Read More »\n \n
\n \n \n \n
\n \n
\n \n
\n

\n \n Extracurricular Activities for School\n Children\n \n

\n \n
\n

\n Engaging in extracurricular activities\n in school is a great way for students to\n learn about themselves and others. There\n are so many activities to choose\n

\n
\n\n \n Read More »\n \n
\n \n \n \n
\n \n
\n \n
\n

\n \n Things To Do On Holidays for School\n Children\n \n

\n \n
\n

\n There are many things to do on holidays\n for school children. Some children may\n want to spend time with their family,\n others may want to\n

\n
\n\n \n Read More »\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 \n \n \n \n \n\n \n \n`;\n","import { Grid, Paper } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport React, { useContext } from \"react\";\nimport { blogTechniquesHtml } from \"../htmls/blogTechniquesHtml\";\n\nconst styles = (theme: Theme) => {\n return createStyles({\n main: {\n padding: theme.spacing(2),\n textAlign: \"center\",\n },\n clsImage: {\n maxWidth: \"300px\",\n },\n container: {\n marginLeft: \"50px\",\n marginRight: \"50px\",\n },\n });\n};\ninterface Props extends WithStyles {}\n\nconst BlogTechniquePage = ({ classes }: Props) => {\n const htmlDoc = { __html: blogTechniquesHtml };\n\n return ;\n};\n\nexport default withStyles(styles)(BlogTechniquePage);\n","export const blogTechniquesHtml = `\n\n\n\n\n\t\n\tBackhand Techniques in Table Tennis | Vivian Table Tennis Academy\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\n\n\n\n\n\t\t\n\t\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\n\n\t\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\t\t\n\t\t\n \n\t

Important Backhand Techniques in Table Tennis

\n

by Hash Media

\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

In the sport of table tennis, the backhand is one of the most important techniques that a player must master. The backhand can be used to volley, block, drive, and use as a chop. The backhand is best used when the player is in a defensive position on the table. Table tennis players can use a variety of backhand techniques to get the ball back into play.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Types of Backhand Techniques

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

There are four basic backhand strokes: the backhand drive, the backhand loop, the backhand chop, and the backhand flick.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Backhand Drive

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

The backhand has been used in tennis for over 100 years with the intention of hitting a backhand shot with one hand, the left hand for a right-handed player. It is considered to be the most difficult shot to master and is used in many competitive tennis matches. The backhand shot is most effectively executed using a looping swing during which the racket is swung around in a circle. A backhand drive is a shot that is hit with one hand, typically the left hand for a right-handed player. The backhand is considered to be the most difficult shot to master and is used in many competitive tennis matches. The backhand shot is most effectively executed using a loop

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Backhand Loop

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

One of the most common shots in table tennis is the backhand loop. It is a powerful shot that can be used to attack from the back of the table. The player generally grips the paddle with the fingers on the left side of the paddle and leans back to the left when executing the shot. The player takes the ball and brings it back over the table with the blade of the paddle on the right side of the ball. The player releases the ball with a flick of the wrist, and the ball hits the other side of the table with the side of the blade.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Backhand Chop

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

A backhand chop is a defensive shot in table tennis. The backhand is a defensive shot by the hand which is played on the backhand side of the body. It is a downward motion, which is similar to a backhand in tennis. The index finger and middle finger are used to produce the shot. This shot can be used to counter overhand shots such as forehand shots.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Backhand Flick

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

Although there are many different types of strokes, the backhand flick is one of the most effective. In contrast to a backhand block, the backhand flick is a table tennis backhand stroke that is often played from an offensive stance (defensive). The backhand flick can be used to either attack or defend against an opponent.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Importance of Backhand Techniques in Table Tennis

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

Table tennis is an intense game of strategy. The importance of backhand techniques cannot be overstated as it is the key to winning a game. The backhand is necessary to develop an effective game. Without it, a player can’t keep up with the opponent. The technique of the backhand is not just a move, but a necessary part of the game that should be mastered by all players. The importance of backhand technique in table tennis is an important part of the game that should be mastered by all players.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Conclusion

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

In this blog, we discussed the main types of Backhand techniques and it’s importance in Table Tennis. Now it’s time for you to practise to win against your opponent. If you need any guidance or training get in touch with Vivian Table Tennis Academy, renowned table tennis academy in Sydney. We offer table tennis training for both the kids and youth. Visit our website to know more about our table tennis lessons offered here.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t
\n\t\t\t\t\t
\n\t\t
\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 { Grid, Paper } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport React, { useContext } from \"react\";\nimport { blogThingsHtml } from \"../htmls/blogThingsHtml\";\n\nconst styles = (theme: Theme) => {\n return createStyles({\n main: {\n padding: theme.spacing(2),\n textAlign: \"center\",\n },\n clsImage: {\n maxWidth: \"300px\",\n },\n container: {\n marginLeft: \"50px\",\n marginRight: \"50px\",\n },\n });\n};\ninterface Props extends WithStyles {}\n\nconst BlogThingsPage = ({ classes }: Props) => {\n const htmlDoc = { __html: blogThingsHtml };\n\n return ;\n};\n\nexport default withStyles(styles)(BlogThingsPage);\n","export const blogThingsHtml = `\n\n\n\n\n\t\n\tThings to do on the Holidays | Activities for the Holidays | Vivian TT\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\n\n\n\n\n\t\t\n\t\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\n\n\t\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\t\t\n\t\t\n \n\t
\"Vivian

Vivian table tennis

\n\t

Raising up tomorrow's young champions

\n\t

Things To Do On Holidays for School Children

\n

by Vivian Tan

\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

There are many things to do on holidays for school children. Some children may want to spend time with their family, others may want to go on trips, and others are entertained by fun activities. Some family-oriented ideas for holidays include spending time together playing games, going on walks, telling stories, or watching movies. If the weather is nice, going to a park, beach, or hiking trail can be a fun option. 

For children who enjoy traveling, going on a road trip or visiting a new place can be a fun way to spend the holiday. There are many things to do on the holidays, but for kids, there are a few special things they love to do.

One of the best things to do on the holidays for your kid is to participate in holiday camps. Many parents think that extracurricular activities in Schools are enough for the development of their kids. However, that is not enough; holiday activities should also include a holiday camp where they can learn more about themselves, helps them to team bonding, and develop many other skills.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Holiday camps

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

There are numerous types of summer camps, but they all have one thing in common: they are indeed a lot of fun! Some holiday camps are just for kids, while others are for the whole family.
No matter what type of holiday camp you choose for your kid, they are sure to have a great time!

Some popular holiday camp activities include arts and crafts, sports, swimming, and learning new skills. Most holiday camps also offer themed camps, such as science or nature camps, which can be a lot of fun for kids. If you are looking for a camp that will keep your child busy and entertained, be sure to do your research and find the right one for them.

Sydney holiday camps are the perfect way for kids to enjoy their school holidays. They offer plenty of fun and exciting things for kids to do at holiday camps, including sports, arts and crafts, and outdoor activities.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Types of School holiday camp

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

There are many types of holiday camps. Some focus on educational activities, while others emphasize outdoor recreation or creative arts. Types of holiday camps include:

\n

School Holiday Camps

\n

School Holiday Camps are a great way to keep your children entertained and active during the holiday time. Many camps offer a variety of activities, such as swimming, hiking, and arts and crafts, that will keep your children engaged and busy. There are plenty of school holiday camps to choose in Sydney, and they offer a great way to keep the kids engaged by giving activities for fun and keeping them busy during the holidays. From sports camps to creative arts camps, there’s sure to be something to interest every child.

\n

Day camps

\n

Day camps Include lots of variety of fun activities such as organized games. They also have a Counselor to child ratio of 1 to 8 or less, keeping your child safe and supervised. Day camps are also a great way to make new friends, and most camps offer a lot of f activities to keep kids entertained.

\n
    \n
  • Theme park visit
  • \n
  • Take a road trip
  • \n
  • Visiting a new city or town
  • \n
  • Attending a festival or parade
  • \n
  • Watching a fireworks show
  • \n
  • Have a picnic
  • \n
  • Going for a hike or bike ride
  • \n
  • Playing sports or going to the beach
  • \n
\n

Adventure camps

\n

Adventure camps are for the kids that want to have a blast on their holiday break. They can go swimming, hiking, and biking. They can also go on tours and learn about new cultures. Adventurous camps are often supervised by experts in the activity, so campers can be sure to stay safe while still having a lot of fun. Campers can visit friends and family members who live in other parts of the country or even in other parts of the world. This can be a great way to see new places and learn about new cultures.

\n

Music camps

\n

Music camps are for the kids who are into music. Music camps are a great way to spend the holidays. You can learn new songs and instruments, and meet new friends. There are also many different kinds of music camps, so you can find one that’s right for your kid. If they are interested in learning about a specific type of music, there’s probably a camp for that. There are also camps for different age groups, so you can find one that’s appropriate for your child.

\n

Theater camps

\n

Theater camps are a great way to keep kids entertained and engaged in the arts over the holidays. There are many different types of theater camps, so it is important to find one that is a good fit for your child. Some theater camps focus on teaching kids how to act, while others focus on teaching kids how to put on a play. No matter what type of theater camp your child attends, they will have a blast and learn a lot.

\n

Arts camps

\n

There are many art camps offered throughout the holidays for children of all ages. These camps allow children to explore their creative side, learn new techniques, and make new friends.

\n

Sports camps

\n

There are also many sport-specific camps and worksops that your kids may enjoy. For example, many soccer, basketball, and baseball camps offer holiday programs. These are a great way to keep the kids occupied and active on days when school is out. Sports camps usually offer a variety of different sports to choose from, as well as other activities like arts and crafts. Vivian Table Tennis Academy offers Sports and recreation camps Sydney which would be a great opportunity for the children.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Final Word

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

If you’re looking for fun activities for your child to do during the school holidays, Holiday camps are the best choice. They not only keep the children active in areas such as sports, arts, crafts, science, social activities, and adventure activities, but also help your child to become more outgoing and smart. There are many holiday camps available during the school holiday time. You can find the perfect one for your children.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t
\n\t\t\t\t\t
\n\t\t
\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 { Grid, Paper } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport React, { useContext } from \"react\";\nimport { blogWhyHtml } from \"../htmls/blogWhyHtml\";\n\nconst styles = (theme: Theme) => {\n return createStyles({\n main: {\n padding: theme.spacing(2),\n textAlign: \"center\",\n },\n clsImage: {\n maxWidth: \"300px\",\n },\n container: {\n marginLeft: \"50px\",\n marginRight: \"50px\",\n },\n });\n};\ninterface Props extends WithStyles {}\n\nconst BlogWhyPage = ({ classes }: Props) => {\n const htmlDoc = { __html: blogWhyHtml };\n\n return ;\n};\n\nexport default withStyles(styles)(BlogWhyPage);\n","export const blogWhyHtml = `\n\n\n\n\n\t\n\tReasons to Send Your Child to Holiday Programs Sydney\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\n\n\n\n\n\n\t\t\n\t\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\n\n\t\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\t\t\n\t\t\n \n\t

Why Send Your Kids to Holiday Programs

\n

by Vivian Tan

\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Holiday Programs: Choosing The Right One For Your Child

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

Many kids do not get a chance to participate in holiday programs, so your child should have the opportunity to make memories with their friends and have a blast. Holiday Programs are beneficial for the kids because they will get to try different things and it will be a good way to meet new friends.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

The Benefits Of School Holiday Programs For School-Aged Children

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

If you’re like most parents, you are looking for ways to keep your children occupied and entertained over the holiday break. One option to consider is sending them to a school holiday program. Here are some of the benefits of doing so:

  • Keeps kids busy and out of trouble. One of the biggest benefits of sending your kids to a school holiday program is that it keeps them busy and out of trouble. During the break, kids can easily get into trouble if they are not occupied. By sending them to a holiday program, you can rest assured that they will be kept busy and safe.
  • Teaches kids new skills. Many school holiday programs offer a variety of extracurricular activities that teach kids new skills. These activities can range from arts and crafts to sports and science experiments. By participating in these activities, kids can learn new things and have fun at the same time.
  • Provides a social outlet. Another benefit of sending your kids to a school holiday program is that it provides them with a social outlet. During the break, kids can easily become bored if they are not around other kids their age. A holiday program allows them to interact with other kids and make new friends.

There are a number of reasons why you might send your child to a holiday program. One reason might be to give your child a chance to experience a new activity or to meet new friends. Another reason might be to provide your child with a break from your normal routine or to give you a break from your normal routine.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

What Can Kids Learn During The Holiday Camps

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

There are many benefits for school-aged children who attend holiday programs. In addition to having fun and making new friends, they can learn new skills, explore their interests, and develop their talents. The holiday care programs can also help children stay on track with their schoolwork, and provide a supportive environment during a time that can be stressful for some kids.

School holiday programs offer opportunities for children to learn new things and explore their interests. Programs can vary in focus, but often include arts and crafts, science and technology, music, and sports.

Most importantly, holiday programs provide a fun and stimulating environment for kids to spend their break. They can meet new friends and learn new skills, all while having a great time.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

Parenting Tips For Choosing The Right Holiday Camps For Your Child :

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

There are many different types of holiday programs available for children, so it can be difficult to decide which one is right for your child. Some factors to consider when choosing a holiday program include:

  • The age of your child
  • The type of activities your child enjoys
  • The location of the program
  • The cost of the program

Some popular holiday programs for children include:

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Holiday Camp Programs

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

Sydney School holiday camps are a great way for children to learn new things and make friends. There are many different types of camps, so it is important to find the right one for your child. Some camps focus on a particular activity, such as music or sports. Others are more general, and offer a variety of activities. Some camps are for children of a particular age range, while others are open to children of all ages. It is important to research the different camps and compare their programs before making a decision. Talk to your child about what he or she is interested in, and then find a camp that matches those interests. Camp can be a fun and rewarding experience for children, and can help them grow and learn new things.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Daycare Programs

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

Daycare programs are a great way for kids to learn new skills and make new friends during the holiday season.

  • Choose a program that offers a variety of activities, including arts and crafts, sports, and socializing.
  • Make sure the program is staffed by qualified professionals who will ensure your child’s safety.
  • Ask other parents for their recommendations.
\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Recreational Programs

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

Sport and recreation camps NSW can provide a fun and safe environment for your child during the holidays.

  • Look for a program that offers a variety of activities that appeal to your child.
  • The staff should be experienced and qualified in working with children.
  • The program should be licensed and insured.
  • The location should be safe and convenient.
\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Language Camps

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

Language camps can help children learn a new language or improve their fluency in one they are already studying.

  • Arts camps can help children develop their creative skills and boost their self-confidence.
  • Adventure camps can help children learn new skills, explore new places, and make new friends.
  • Science camps can help children learn about science and technology in a fun and interactive way.
\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Sporting Camps

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t

Sporting camps are also a great opportunity for kids to have fun, especially during school holidays

There are many reasons why you might choose to send your child to a holiday program. Some parents might want their kids to stay active and engaged in a fun, safe environment over the break, while others might want their kids to learn new skills or explore their creative side. Here are a few reasons why you might choose to send your child to a holiday program:

  • To keep them active and engaged: If your child is typically home with nothing to do over the break, sending them to a holiday program can help keep them active and engaged. Many holiday programs offer a variety of activities, such as sports, arts and crafts, and music, so your child can try new things and stay busy.
  • To give them new skills or experiences: Some parents choose to send their kids to holiday programs in order to give them new skills or experiences. For example, if your child is interested in music, you might send them to a music camp over the break. Or, if your child loves to paint and draw, you might send them to an arts and crafts camp.
  • To save them from boredom: Boredom

Vivian Table Tennis Academy is a renowned table tennis academy in  North Shore,founded by the former Olympian Vivian Tan, the academy offers professional kids table tennis training. We also offer camp australia holiday programs for children in Sydney. Connect with us to know more.

\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t
\n\t\t\t\t\t
\n\t\t
\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","export const AppName = \"Vivian table tennis academy\";\n\nexport const DEFAULT_EMAIL = \"\"; // \"a21071@hotmail.com\";\nexport const DEFAULT_PASSWORD = \"\"; //\"Ab12@34578\";\n","import {\n IconButton,\n InputAdornment,\n TextField,\n TextFieldProps,\n} from \"@material-ui/core\";\nimport Visibility from \"@material-ui/icons/Visibility\";\nimport VisibilityOff from \"@material-ui/icons/VisibilityOff\";\nimport React, { useState } from \"react\";\n\nenum EPasswordType {\n password = \"password\",\n text = \"text\",\n}\nconst PasswordTextInput = (props: TextFieldProps) => {\n const [passwordType, setPasswordType] = useState(\n EPasswordType.password\n );\n const isPasswordType = (type: EPasswordType) =>\n type === EPasswordType.password;\n return (\n \n {\n setPasswordType(\n isPasswordType(passwordType)\n ? EPasswordType.text\n : EPasswordType.password\n );\n }}\n >\n {isPasswordType(passwordType) ? (\n \n ) : (\n \n )}\n \n \n ),\n }}\n />\n );\n};\nexport default PasswordTextInput;\n","import {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n Grid,\n Typography,\n withStyles,\n} from \"@material-ui/core\";\nimport { createStyles, Theme, WithStyles } from \"@material-ui/core/styles\";\nimport { useFormik } from \"formik\";\nimport React, { useContext } from \"react\";\nimport { useHistory } from \"react-router\";\nimport * as yup from \"yup\";\nimport { DEFAULT_EMAIL, DEFAULT_PASSWORD } from \"../const\";\nimport { AuthContext } from \"../context/AuthContext\";\nimport { NotificationContext } from \"../context/NotificationContext\";\nimport DialogTitle from \"./DialogTitle\";\nimport FormRow from \"./FormRow\";\nimport PasswordTextInput from \"./PasswordTextInput\";\n\nconst validationsForm = yup.object().shape({\n newPassword: yup\n .string()\n .min(8, \"Password must contain at least 8 characters\")\n .required(\"Enter your password\"),\n});\n\nconst styles = (theme: Theme) =>\n createStyles({\n card: {\n maxWidth: 420,\n marginTop: 50,\n },\n container: {\n display: \"Flex\",\n justifyContent: \"center\",\n },\n actions: {\n float: \"right\",\n },\n dlgAction: {\n justifyContent: \"center\",\n },\n root: {\n margin: 0,\n padding: theme.spacing(2),\n },\n closeButton: {\n position: \"absolute\",\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[500],\n },\n });\n\ninterface Props extends WithStyles {}\n\ninterface IChangePasswordValue {\n email: string;\n oldPassword: string;\n newPassword: string;\n repeatNewPassword: string;\n}\n\nconst ChangePassword = (props: Props) => {\n const history = useHistory();\n const { showErrorNotification, showSuccessNotification } = useContext(\n NotificationContext\n );\n const initialValues: IChangePasswordValue = {\n email: DEFAULT_EMAIL,\n oldPassword: DEFAULT_PASSWORD,\n newPassword: DEFAULT_PASSWORD,\n repeatNewPassword: DEFAULT_PASSWORD,\n };\n const {\n values,\n handleSubmit,\n handleChange,\n errors,\n touched,\n handleBlur,\n } = useFormik({\n initialValues,\n validationSchema: validationsForm,\n onSubmit: async ({ oldPassword, newPassword }) => {\n const result = await changePassword({\n oldPassword,\n newPassword,\n });\n if (result) {\n showSuccessNotification(\"Password updated\");\n history.goBack();\n } else {\n showErrorNotification(`Can't sigin, please try again later`);\n }\n },\n });\n const [open, setOpen] = React.useState(true);\n const { isAuthenticated, changePassword, user } = useContext(AuthContext);\n\n const handleClose = () => {\n setOpen(false);\n history.goBack();\n };\n\n const isPasswordCorrect = () => {\n return (\n values.repeatNewPassword?.length >= 8 &&\n values.repeatNewPassword === values.newPassword &&\n values.oldPassword.length >= 8\n );\n };\n const changePasswordMessage = ``;\n if (!isAuthenticated) {\n return null;\n }\n return (\n \n
\n \n Change Password\n \n \n \n \n {changePasswordMessage}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Change password\n \n \n \n \n
\n \n );\n};\n\nexport default withStyles(styles)(ChangePassword);\n","import { Grid, Paper } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport React, { useContext } from \"react\";\nimport { timeTable } from \"../htmls/timeTable\";\n\nconst styles = (theme: Theme) => {\n return createStyles({\n main: {\n padding: theme.spacing(2),\n textAlign: \"center\",\n },\n clsImage: {\n maxWidth: \"300px\",\n },\n container: {\n marginLeft: \"50px\",\n marginRight: \"50px\",\n },\n });\n};\ninterface Props extends WithStyles {}\n\nconst ClassesTimeTable = ({ classes }: Props) => {\n const htmlDoc = { __html: timeTable };\n\n return ;\n};\n\nexport default withStyles(styles)(ClassesTimeTable);\n","export const timeTable = `\n\n\n\n\n\n\t\n\tTime Table | Table Tennis Training | Vivian Table Tennis Academy\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\n\n\n\n\n\n\t\t\n\t\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\n\n\t\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\t\t\n\t\t\n \n\t
\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t
\n\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Classes Timetable

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

We have many classes throughout the week for all skill levels.

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t
\n\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\n\n\t\t\t\t

Private Lesson Booking, Please contact Vivian on 0430 127 018.

\n\t\t\t\t

Term one 19/01/2024(Friday) to 14/04/2024(Sunday)

\n\t\t\t\t\n\t\n\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\n
\n\n\n
\n\t\t\t\t\t
\n\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t
\n\t\t\t\t\t
\n\t\t
\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 validator from \"validator\";\nimport * as yup from \"yup\";\n\nexport const isMobilePhone = validator.isMobilePhone;\n\nexport const firstNameValidator = yup.string().required();\n\nexport const lastNameValidator = yup.string().required();\n\nexport const emailValidator = yup\n .string()\n .required(\"Email required\")\n .test({\n name: \"email\",\n message: \"Email is invalid\",\n test: (value: string = \"\"): boolean => validator.isEmail(value),\n });\n\nexport const mobilePhoneValidator = yup.string().test({\n name: \"phone\",\n message: \"Invalid mobile phone number\",\n test: (value: string | undefined): boolean =>\n isMobilePhone(value ?? \"\", [\"en-AU\"]),\n});\n","import {\n Box,\n Button,\n Grid,\n PropTypes,\n TextField,\n Typography,\n} from \"@material-ui/core\";\nimport Paper from \"@material-ui/core/Paper\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport { Console } from \"console\";\nimport { Form } from \"formik\";\nimport React, { useContext } from \"react\";\nimport FormContainer from \"./FormContainer\";\nimport FormRow from \"./FormRow\";\nimport { useFormik } from \"formik\";\nimport { sendMessage } from \"../api/utils.service\";\nimport * as yup from \"yup\";\nimport { emailValidator, mobilePhoneValidator } from \"../utils/validator\";\nimport { NotificationContext } from \"../context/NotificationContext\";\nimport { LoadingContext } from \"../context/LoadingContext\";\nconst styles = (theme: Theme) =>\n createStyles({\n paper: {},\n });\n\nexport interface Props extends WithStyles {}\n\nconst SendQuestion = (props: Props) => {\n const { classes } = props;\n // const handleSubmit = (evt: Event, data: any) => {\n // evt.preventDefault();\n // console.log(\"hello, data\", data);\n // };\n\n const { showLoading, hideLoading } = useContext(LoadingContext);\n const { showSuccessNotification } = useContext(NotificationContext);\n\n const initialValues = {\n firstName: \"\",\n email: \"\",\n message: \"\",\n phone: \"\",\n };\n\n const validationSchema = yup.object().shape({\n email: emailValidator,\n phone: mobilePhoneValidator,\n message: yup.string().required(\"Message is required\").nullable(false),\n firstName: yup.string().required(\"Name is required\").nullable(false),\n });\n const { handleSubmit, values, handleChange, touched, errors } = useFormik({\n initialValues,\n validationSchema,\n onSubmit: async ({ message, email, firstName, phone }: any) => {\n showLoading();\n setTimeout(() => {\n hideLoading();\n showSuccessNotification(\"Successfully sent your question by email.\");\n }, 1000);\n await sendMessage({\n email,\n firstName,\n message,\n phone,\n });\n },\n });\n\n return (\n <>\n
\n \n \n \n Got a question for us?\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 SEND MESSAGE\n \n \n \n \n \n \n );\n};\n\nexport default withStyles(styles)(SendQuestion);\n","import {\n GetUserProfileDocument,\n GetUserProfileQuery,\n SaveUserProfileDocument,\n SaveUserProfileInput,\n SaveUserProfileMutation,\n SendMessageDocument,\n SendMessageInput,\n SendMessageMutation,\n UpdateUserProfileDocument,\n UpdateUserProfileInput,\n UpdateUserProfileMutation,\n} from \"../generated/graphql\";\nimport { client } from \"./client\";\n\nexport const sendMessage = async (param: SendMessageInput) => {\n return (\n await client.mutate({\n mutation: SendMessageDocument,\n variables: {\n param,\n },\n })\n ).data?.sendMessage;\n};\n","export const headerHtml = `\n\n\n
`;\n","import { Box, Grid, PropTypes, Typography } from \"@material-ui/core\";\nimport Paper from \"@material-ui/core/Paper\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport React from \"react\";\nimport SendQuestion from \"./SendQuestion\";\nimport { headerHtml } from \"../htmls/headerHtml\";\nimport { footerHtml } from \"../htmls/footerHtml\";\nconst styles = (theme: Theme) =>\n createStyles({\n paper: {\n marginBottom: \"100px\",\n },\n });\n\nexport interface Props extends WithStyles {}\n\nexport interface PropOfSimpleText {\n variant?: any;\n title: string;\n text: string;\n isBold?: boolean;\n}\n\nconst SimpleLineOfText = ({\n variant = \"h4\",\n title = \"\",\n text = \"\",\n}: PropOfSimpleText) => {\n return (\n <>\n \n \n {title}\n \n \n \n {text}\n \n \n );\n};\n\nconst ContactUs = (props: Props) => {\n const { classes } = props;\n const htmlDoc = { __html: headerHtml };\n const footerDoc = { __html: footerHtml };\n return (\n <>\n \n \n \n \n \n How to reach us\n \n \n\n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default withStyles(styles)(ContactUs);\n","export const footerHtml = `\n\n\n\t`;\n","import {\n AddCourseDocument,\n AddCourseInput,\n AddCourseMutation,\n DeleteCourseDocument,\n DeleteCourseInput,\n DeleteCourseMutation,\n DisableTermDocument,\n DisableTermInput,\n DisableTermMutation,\n GetCoursesDocument,\n GetCoursesQuery,\n UpdateCourseDocument,\n UpdateCourseInput,\n UpdateCourseMutation,\n useDisableTermMutation,\n} from \"../generated/graphql\";\nimport { client } from \"./client\";\n\nexport const addCourse = async ({\n termDescription,\n termStartDate,\n termEndDate,\n courseLevel,\n courseData,\n}: AddCourseInput) =>\n (\n await client.mutate({\n mutation: AddCourseDocument,\n variables: {\n param: {\n termDescription,\n termStartDate,\n termEndDate,\n courseLevel,\n courseData,\n },\n },\n })\n ).data?.addCourse;\n\nexport const updateCourse = async ({\n termId,\n termDescription,\n termStartDate,\n termEndDate,\n courseData,\n courseLevel,\n}: UpdateCourseInput) =>\n (\n await client.mutate({\n mutation: UpdateCourseDocument,\n variables: {\n param: {\n termId,\n termDescription,\n termStartDate,\n termEndDate,\n courseLevel,\n courseData,\n },\n },\n })\n ).data?.updateCourse;\n\nexport const getCourses = async () =>\n (\n await client.query({\n query: GetCoursesDocument,\n })\n ).data?.getCourses;\n\nexport const deleteCourse = async ({\n termId,\n}: DeleteCourseInput): Promise => {\n const result =\n (\n await client.mutate({\n mutation: DeleteCourseDocument,\n variables: {\n param: {\n termId,\n },\n },\n })\n ).data?.deleteCourse ?? false;\n return result;\n};\n\nexport const disableTerm = async ({\n termId,\n}: DisableTermInput): Promise => {\n const result =\n (\n await client.mutate({\n mutation: DisableTermDocument,\n variables: {\n param: {\n termId,\n },\n },\n })\n ).data?.disableTerm ?? false;\n return result;\n};\n","export const differenceInDays = (dateEnd: Date, dateStart: Date): number => {\n // One day in milliseconds\n const oneDay = 1000 * 60 * 60 * 24;\n // Calculating the time difference between two dates\n const diffInTime = dateEnd.getTime() - dateStart.getTime();\n // Calculating the no. of days between two dates\n const diffInDays = Math.round(diffInTime / oneDay);\n return diffInDays;\n};\n","import { add, getDay } from \"date-fns\";\nimport { DateTime } from \"luxon\";\nimport { EWeekDay } from \"../generated/graphql\";\nimport { differenceInDays } from \"../utils/differenceInDays\";\n\nexport interface ICourseLessonDay {\n day: EWeekDay;\n num: number;\n dates: Date[];\n available: boolean;\n numOfPublicHolidays: number;\n}\n\nconst termLessonCalculation = (\n startDate: string,\n endDate: string\n): ICourseLessonDay[] => {\n const dtStart = new Date(startDate);\n const dtEnd = new Date(endDate);\n const startDay = getDay(dtStart);\n const dayMapping = [\n EWeekDay.Sun,\n EWeekDay.Mon,\n EWeekDay.Tues,\n EWeekDay.Wed,\n EWeekDay.Thu,\n EWeekDay.Fri,\n EWeekDay.Sat,\n ];\n // shift day mapping from dtStart;\n if (startDay !== 0) {\n for (let idx = 0; idx < startDay; idx = idx + 1) {\n dayMapping.push(dayMapping.shift() as EWeekDay);\n }\n }\n const diffInDays = differenceInDays(dtEnd, dtStart) + 1;\n const wks = Math.floor(diffInDays / 7);\n const remainedDays = diffInDays % 7;\n\n const getDates = (startDate: Date, diffDay: number, weeks: number) => {\n const result = [];\n for (let wks = 0; wks < weeks; wks = wks + 1) {\n result.push(add(startDate, { days: diffDay + 7 * wks }));\n }\n return result;\n };\n\n const termDays: ICourseLessonDay[] = dayMapping.map(\n (day: EWeekDay, index: number) => ({\n day,\n num: wks,\n dates: getDates(dtStart, index, wks),\n available: isWeekDayInDate(startDate, endDate)(day),\n numOfPublicHolidays: 0,\n })\n );\n for (let idx = 0; idx < remainedDays; idx = idx + 1) {\n termDays[idx].num = termDays[idx].num + 1;\n termDays[idx].dates.push(add(dtStart, { days: idx + 7 * wks }));\n }\n return termDays;\n};\n\nexport const weekDayToNumber = (day: EWeekDay) => {\n switch (day) {\n case EWeekDay.Sun:\n return 7;\n case EWeekDay.Mon:\n return 1;\n case EWeekDay.Tues:\n return 2;\n case EWeekDay.Wed:\n return 3;\n case EWeekDay.Thu:\n return 4;\n case EWeekDay.Fri:\n return 5;\n case EWeekDay.Sat:\n return 6;\n }\n};\n\nexport const isWeekDayInDate =\n (startDate: string, endDate: string) => (day: EWeekDay) => {\n const startDay = new Date(startDate);\n const endDay = new Date(endDate);\n const diffInDays = differenceInDays(endDay, startDay) + 1;\n for (let n = 0; n < diffInDays && n <= 7; n = n + 1) {\n const a = add(new Date(startDate), { days: n }).toISOString();\n const b = DateTime.fromISO(a).weekday;\n const c = weekDayToNumber(day);\n if (b === c) {\n return true;\n }\n }\n return false;\n };\n\nexport const numOfDayInDate =\n (startDate: string, endDate: string) => (day: EWeekDay) => {\n const diffInDays =\n differenceInDays(new Date(endDate), new Date(startDate)) + 1;\n const remainderDays = diffInDays % 7;\n const wholeWks = Math.floor(diffInDays / 7);\n let extra = 0;\n for (let n = 0; n < remainderDays; n = n + 1) {\n const tmp = DateTime.fromISO(startDate).plus({ days: n }).weekday;\n // add(DateTime.fromISO(startDate),({ days: n }).weekday;\n if (tmp === weekDayToNumber(day)) {\n extra = 1;\n break;\n }\n }\n return wholeWks + extra;\n };\n\nexport default termLessonCalculation;\n","import {\n Card,\n CardActions,\n CardContent,\n CardHeader,\n Grid,\n IconButton,\n TextField,\n Tooltip,\n} from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\nimport clsx from \"clsx\";\nimport { format } from \"date-fns\";\nimport React, { ChangeEvent, Fragment, useState } from \"react\";\nimport { useImmer } from \"use-immer\";\nimport { EWeekDay } from \"../generated/graphql\";\nimport { ICourseLessonDay } from \"../utils/termLessonCalculation\";\nimport FormRow from \"./FormRow\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n paper: {\n maxWidth: 936,\n margin: \"auto\",\n overflow: \"hidden\",\n },\n expand: {\n transform: \"rotate(0deg)\",\n marginLeft: \"auto\",\n transition: theme.transitions.create(\"transform\", {\n duration: theme.transitions.duration.shortest,\n }),\n },\n activeCard: {\n background: theme.palette.primary.light,\n },\n inactiveCard: {\n background: theme.palette.common.white,\n },\n notAvailableDay: {\n background: \"red\",\n },\n expandOpen: {\n transform: \"rotate(180deg)\",\n },\n });\n\nexport interface ICourseDayData {\n courseDay: EWeekDay;\n lessonStartTime: string;\n lessonEndTime: string;\n capacity: number;\n unitPrice: number;\n numOfLessons: number;\n available: boolean;\n numOfPublicHolidays?: number;\n}\nexport interface ICourseDaysData {\n [name: string]: ICourseDayData;\n}\n\nexport interface Props extends WithStyles {\n termDays: ICourseLessonDay[];\n startDate: string;\n courseDaysData: ICourseDaysData;\n onChange: (e: ChangeEvent) => void;\n updateCourseDaysAvailable?: (day: EWeekDay, available: boolean) => void;\n}\n\nfunction CourseDayDetail({\n classes,\n termDays,\n startDate,\n courseDaysData,\n onChange,\n updateCourseDaysAvailable,\n}: Props) {\n const [expanded, setExpaned] = useImmer<{ [name: string]: boolean }>({});\n const [availableDays, setAvailableDays] = useImmer(\n termDays.filter((d) => d.available).map((d) => d.day)\n );\n const [activeCard, setActiveCard] = useState(termDays[0].day);\n const handleExpandClick = (day: string) => () => {\n setExpaned((draft) => {\n draft[day] = !draft[day];\n });\n };\n const showLessonDates = (termDay: ICourseLessonDay) => {\n return (\n \n {termDay.dates.map((date: Date, idx: number) => {\n return (\n {format(date, \"yyyy-MM-dd\")}\n );\n })}\n \n );\n };\n\n const handleCardClick = (day: EWeekDay) => () => {\n setActiveCard(day);\n };\n\n return (\n \n {termDays.map((termDay: ICourseLessonDay, index: number) => {\n const actualNumOfLessons =\n termDay.num - (courseDaysData[termDay.day].numOfPublicHolidays ?? 0);\n\n return (\n \n ad === termDay.day) >= 0\n ? activeCard === termDay.day\n ? classes.activeCard\n : classes.inactiveCard\n : classes.notAvailableDay\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 setAvailableDays((draft) => {\n const found = draft.findIndex(\n (c) => c === termDay.day\n );\n let isAvailable = false;\n if (found >= 0) {\n draft.splice(found, 1);\n } else {\n draft.push(termDay.day);\n isAvailable = true;\n }\n if (updateCourseDaysAvailable) {\n updateCourseDaysAvailable(termDay.day, isAvailable);\n }\n // courseDaysData[termDay.day].available = isAvailable;\n });\n }}\n />\n \n \n \n \n \n \n {/* \n \n Lesson dates:\n {showLessonDates(termDay)}\n \n */}\n \n \n );\n })}\n \n );\n}\n\nexport default withStyles(styles)(CourseDayDetail);\n","import { MenuItem, TextField, TextFieldProps } from \"@material-ui/core\";\nimport { ECourseLevel } from \"../generated/graphql\";\nimport React from \"react\";\nconst courseLevels = [\n { label: \"Private\", value: ECourseLevel.Private },\n { label: \"Elite\", value: ECourseLevel.ELite },\n { label: \"Beginner\", value: ECourseLevel.Beginner },\n { label: \"Intermediate 1\", value: ECourseLevel.Intermediate1 },\n { label: \"Intermediate 2\", value: ECourseLevel.Intermediate2 },\n { label: \"Intermediate 3\", value: ECourseLevel.Intermediate3 },\n { label: \"Advanced 1\", value: ECourseLevel.Advanced1 },\n { label: \"Advanced 2\", value: ECourseLevel.Advanced2 },\n { label: \"Advanced 3\", value: ECourseLevel.Advanced3 },\n { label: \"NSGH\", value: ECourseLevel.Nsgh },\n { label: \"RosevilleCollege\", value: ECourseLevel.RosevilleCollege },\n { label: \"NSBH\", value: ECourseLevel.Nsbh },\n];\n\nconst CourseLevelSelect = (props: TextFieldProps) => (\n \n {courseLevels.map((option) => (\n \n {option.label}\n \n ))}\n \n);\nexport default CourseLevelSelect;\n","import { Button, Grid, TextField } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport { useFormik } from \"formik\";\nimport React, { useContext } from \"react\";\nimport { useImmer } from \"use-immer\";\nimport * as yup from \"yup\";\nimport {\n addCourse,\n deleteCourse,\n disableTerm,\n updateCourse,\n} from \"../api/course.service\";\nimport { LoadingContext } from \"../context/LoadingContext\";\nimport { NotificationContext } from \"../context/NotificationContext\";\nimport {\n AddCourseInput,\n AddCourseResp,\n Course,\n CoursesResp,\n ECourseLevel,\n EWeekDay,\n UpdateCourseInput,\n UpdateCourseResp,\n} from \"../generated/graphql\";\nimport termLessonCalculation, {\n ICourseLessonDay,\n isWeekDayInDate,\n numOfDayInDate,\n weekDayToNumber,\n} from \"../utils/termLessonCalculation\";\nimport CourseDayDetail, {\n ICourseDayData,\n ICourseDaysData,\n} from \"./CourseDayDetail\";\nimport CourseLevelSelect from \"./CourseLevelSelect\";\nimport FormContainer from \"./FormContainer\";\nimport FormRow from \"./FormRow\";\n\nconst styles = (theme: Theme) => createStyles({});\n\nexport interface Props extends WithStyles {\n onClose: () => void;\n onNewCourse: (newCourse: AddCourseResp) => void;\n onCourseUpdated: (courseUpdated: UpdateCourseResp) => void;\n onCourseDeleted: (termId: string) => void;\n onTermDisabled: (termId: string) => void;\n course: CoursesResp | null;\n startDate: string;\n endDate: string;\n termDescription: string;\n}\n\ninterface ITermLessonData {\n termDescription: string;\n startDate: string;\n endDate: string;\n courseLevel: ECourseLevel;\n termDays: ICourseLessonDay[];\n}\n\nconst convertCoursesToCourseDays = (\n courses: Course[] | undefined,\n startDate: string,\n endDate: string\n): ICourseDaysData => {\n const newCourseDays = () => {\n // new course\n const defaultCapacity = 20;\n const defaultUnitPrice = 30;\n const defaultCourseDay = (\n courseDay: EWeekDay,\n available: boolean = true,\n numOfLessons: number = 0\n ): ICourseDayData => ({\n lessonStartTime: \"17:30\",\n lessonEndTime: \"19:00\",\n capacity: defaultCapacity,\n unitPrice: defaultUnitPrice,\n numOfLessons,\n available,\n courseDay,\n numOfPublicHolidays: 0,\n });\n const checkDay = isWeekDayInDate(startDate, endDate);\n const numOfWeekDay = numOfDayInDate(startDate, endDate);\n\n return {\n [EWeekDay.Sun]: defaultCourseDay(\n EWeekDay.Sun,\n checkDay(EWeekDay.Sun),\n numOfWeekDay(EWeekDay.Sun)\n ),\n [EWeekDay.Mon]: defaultCourseDay(\n EWeekDay.Mon,\n checkDay(EWeekDay.Mon),\n numOfWeekDay(EWeekDay.Mon)\n ),\n [EWeekDay.Tues]: defaultCourseDay(\n EWeekDay.Tues,\n checkDay(EWeekDay.Tues),\n numOfWeekDay(EWeekDay.Tues)\n ),\n [EWeekDay.Wed]: defaultCourseDay(\n EWeekDay.Wed,\n checkDay(EWeekDay.Wed),\n numOfWeekDay(EWeekDay.Wed)\n ),\n [EWeekDay.Thu]: defaultCourseDay(\n EWeekDay.Thu,\n checkDay(EWeekDay.Thu),\n numOfWeekDay(EWeekDay.Thu)\n ),\n [EWeekDay.Fri]: defaultCourseDay(\n EWeekDay.Fri,\n checkDay(EWeekDay.Fri),\n numOfWeekDay(EWeekDay.Fri)\n ),\n [EWeekDay.Sat]: defaultCourseDay(\n EWeekDay.Sat,\n checkDay(EWeekDay.Sat),\n numOfWeekDay(EWeekDay.Sat)\n ),\n };\n };\n\n const existingCourseDays = (courses: Course[]) => {\n const result: ICourseDaysData = {};\n courses.forEach(\n ({\n courseDay,\n startTime: lessonStartTime,\n endTime: lessonEndTime,\n capacity,\n numOfLessons,\n unitPrice,\n available,\n numOfPublicHolidays = 0,\n }: Course) => {\n result[`${courseDay}`] = {\n courseDay: courseDay as EWeekDay,\n lessonStartTime,\n lessonEndTime,\n capacity,\n numOfLessons,\n unitPrice,\n available,\n numOfPublicHolidays,\n };\n }\n );\n return result;\n };\n if (!courses) {\n return newCourseDays();\n }\n return existingCourseDays(courses);\n};\n\nconst getTermDays = (course: CoursesResp) => {\n return course.courses\n .map(\n (c: Course): ICourseLessonDay => ({\n day: c.courseDay,\n num: c.numOfLessons,\n dates: [],\n available: c.available,\n numOfPublicHolidays: c.numOfPublicHolidays,\n })\n )\n .sort((aCourse, bCourse): number =>\n weekDayToNumber(aCourse.day) > weekDayToNumber(bCourse.day) ? 1 : -1\n );\n};\n\nfunction CourseDetail({\n classes,\n startDate,\n endDate,\n termDescription,\n onClose,\n onNewCourse,\n course,\n onCourseUpdated,\n onCourseDeleted,\n onTermDisabled,\n}: Props) {\n const isNewCourse = !!!course;\n\n const termDays = course\n ? getTermDays(course)\n : termLessonCalculation(startDate, endDate);\n\n const [termLessonData, setTermLessonData] = useImmer({\n startDate,\n endDate,\n termDescription,\n courseLevel: course?.term?.level ?? ECourseLevel.Beginner,\n termDays,\n });\n\n const defaultCourseDayData = convertCoursesToCourseDays(\n course?.courses,\n termLessonData.startDate,\n termLessonData.endDate\n );\n\n const initialValues = {\n termDescription: termLessonData.termDescription,\n termStartDate: termLessonData.startDate,\n termEndDate: termLessonData.endDate,\n courseLevel: (course?.term.level ?? ECourseLevel.Beginner) as ECourseLevel,\n courseDaysData: defaultCourseDayData,\n };\n const { showLoading, hideLoading } = useContext(LoadingContext);\n const { showErrorNotification, showSuccessNotification } =\n useContext(NotificationContext);\n\n const validationSchema = yup.object().shape({\n termDescription: yup.string().required(\"Enter your term description\"),\n });\n const { values, handleSubmit, handleChange, setFieldValue } = useFormik({\n initialValues,\n validationSchema,\n onSubmit: async (v) => {\n const {\n termDescription,\n termStartDate,\n termEndDate,\n courseLevel,\n courseDaysData,\n } = v;\n\n // convert course days from objects into array\n const courseData = [];\n for (const [_, weekDayData] of Object.entries(courseDaysData)) {\n courseData.push({\n ...weekDayData,\n });\n }\n try {\n showLoading();\n if (isNewCourse) {\n const addCourseParam: AddCourseInput = {\n termDescription,\n termStartDate,\n termEndDate,\n courseLevel,\n courseData,\n };\n const newCourse = await addCourse(addCourseParam);\n showSuccessNotification(\"Course saved\");\n if (newCourse) {\n onNewCourse(newCourse);\n }\n } else {\n const updateCourseParam: UpdateCourseInput = {\n termId: course?.term.id,\n termDescription,\n termStartDate,\n termEndDate,\n courseLevel,\n courseData,\n };\n const updatedCourse = await updateCourse(updateCourseParam);\n showSuccessNotification(\"Course updated\");\n if (updatedCourse) {\n onCourseUpdated(updatedCourse);\n }\n }\n onClose();\n } catch (e) {\n showErrorNotification(\"please try again later\");\n } finally {\n hideLoading();\n }\n },\n });\n\n const handleStartDateChange = (e: any) => {\n const startDate = e.target.value;\n const termDays = termLessonCalculation(startDate, termLessonData.endDate);\n setTermLessonData((draft) => {\n draft.termDays = termDays;\n draft.startDate = startDate;\n });\n const defaultCourseDayData = convertCoursesToCourseDays(\n course?.courses,\n termLessonData.startDate,\n termLessonData.endDate\n );\n setFieldValue(`courseDaysData`, defaultCourseDayData);\n termDays.forEach((d) => {\n setFieldValue(`courseDaysData[${d.day}].numOfLessons`, d.num);\n setFieldValue(`courseDaysData[${d.day}].available`, d.num > 0);\n });\n handleChange(e);\n };\n\n const handleDeleteCourse = async () => {\n await deleteCourse({\n termId: course?.term.id,\n });\n onCourseDeleted(course?.term.id);\n onClose();\n };\n\n const handleDisableTerm = async () => {\n await disableTerm({\n termId: course?.term.id,\n });\n onTermDisabled(course?.term.id);\n onClose();\n };\n\n const handleEndDateChange = (e: any) => {\n const endDate = e.target.value;\n const termDays = termLessonCalculation(termLessonData.startDate, endDate);\n setTermLessonData((draft) => {\n draft.termDays = termDays;\n draft.endDate = endDate;\n });\n termDays.forEach((d) => {\n setFieldValue(`courseDaysData[${d.day}].numOfLessons`, d.num);\n setFieldValue(`courseDaysData[${d.day}].available`, d.num > 0);\n });\n handleChange(e);\n };\n\n const handleCourseLevelChange = (e: any) => {\n handleChange(e);\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 setFieldValue(`courseDaysData[${day}].available`, available);\n }}\n />\n \n \n \n \n {isNewCourse ? \"Save a new course\" : \"Update course\"}\n \n \n {course && (\n \n \n {\"Delete course\"}\n \n \n )}\n {course && (\n \n \n {\"Disable term\"}\n \n \n )}\n \n \n \n
\n );\n}\n\nexport default withStyles(styles)(CourseDetail);\n","import { Paper } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport { RowParams } from \"@material-ui/data-grid\";\nimport React from \"react\";\nimport { CoursesResp, ECourseLevel } from \"../generated/graphql\";\nimport CustomizedDataGrid from \"./CustomizedDataGrid\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n container: {\n height: \"70vh\",\n overflowY: \"auto\",\n width: \"95%\",\n },\n root: {\n backgroundColor: \"yellow\",\n },\n });\n\nexport interface Props extends WithStyles {\n courses: CoursesResp[];\n onSelectedCourse?: (selectedCourse: CoursesResp) => void;\n}\n\nexport interface ICourseRow {\n id: string;\n termDescription: string;\n termDate: string;\n time: string;\n day: string;\n level: ECourseLevel;\n selectedCourseIndex?: number;\n}\n\nfunction CourseList(props: Props) {\n const { classes, courses, onSelectedCourse } = props;\n const columns = [\n { field: \"termDescription\", headerName: \"Description\", width: 270 },\n { field: \"termDate\", headerName: \"Term date\", width: 130 },\n // { field: \"endDate\", headerName: \"End date\", width: 130 },\n { field: \"level\", headerName: \"Level\", width: 130 },\n { field: \"time\", headerName: \"Start time\", width: 130 },\n { field: \"day\", headerName: \"Course day\", width: 130 },\n ];\n\n const getTermDate = ({ term: { startDate, endDate } }: CoursesResp) => {\n return `${startDate} - ${endDate}`;\n };\n const getCourseStartTime = (course: CoursesResp) => {\n return course.courses\n .filter((c) => c.available)\n .map((c) => `${c.startTime} - ${c.endTime}`)\n .join(\";\");\n };\n const getCourseDay = (course: CoursesResp) => {\n return course.courses\n .filter((c) => c.available)\n .map((c) => `${c.courseDay}`)\n .join(\";\");\n };\n const rows: ICourseRow[] = courses.map((course: CoursesResp) => ({\n id: course.term.id,\n termDescription: course.term.description,\n termDate: getTermDate(course),\n level: course.term.level as ECourseLevel,\n time: getCourseStartTime(course),\n day: getCourseDay(course),\n }));\n\n const handleRowClick = ({ rowIndex }: RowParams) => {\n if (onSelectedCourse) {\n onSelectedCourse(courses[rowIndex]);\n }\n };\n\n return (\n \n \n \n );\n}\n\nexport default withStyles(styles)(CourseList);\n","import {\n Button,\n Dialog,\n DialogContent,\n Grid,\n Typography,\n} from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport { DateTime } from \"luxon\";\nimport React, { useContext, useEffect, useState } from \"react\";\nimport { useImmer } from \"use-immer\";\nimport { getCourses } from \"../api/course.service\";\nimport { LoadingContext } from \"../context/LoadingContext\";\nimport EmptyInfo from \"../EmptyInfo\";\nimport {\n AddCourseResp,\n CoursesResp,\n UpdateCourseResp,\n} from \"../generated/graphql\";\nimport CourseDetail from \"./CourseDetail\";\nimport CourseList from \"./CourseList\";\nimport DialogTitle from \"./DialogTitle\";\nimport FormContainer from \"./FormContainer\";\nimport FormRow from \"./FormRow\";\nimport FormTitle from \"./FormTitle\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n paperWidthSm: {\n maxWidth: \"80em\",\n },\n });\n\nexport interface Props extends WithStyles {}\n\nfunction Course(props: Props) {\n const { classes } = props;\n const { showLoading, hideLoading } = useContext(LoadingContext);\n\n const [addNewCourse, setAddNewCourse] = useState(false);\n const [courses, setCourses] = useImmer([]);\n const [selectedCourse, setSelectedCourse] = useState(\n null\n );\n\n const handleAddNewCourse = () => {\n setAddNewCourse(true);\n };\n\n const handlleNewCourse = (newCourse: AddCourseResp) => {\n setCourses((draft) => {\n draft.push(newCourse as CoursesResp);\n });\n };\n\n const handleCourseUpdated = (updatedCourse: UpdateCourseResp) => {\n setCourses((draft) => {\n const idx = draft.findIndex((c) => c.term.id === updatedCourse.term.id);\n draft[idx] = updatedCourse as CoursesResp;\n });\n };\n\n const handleCourseDeleted = (termId: string) => {\n setCourses((draft) => {\n const foundIdx = draft.findIndex((c) => c.term.id === termId);\n if (foundIdx !== -1) {\n draft.splice(foundIdx, 1);\n }\n });\n };\n\n const handleTermDisabled = (termId: string) => {\n setCourses((draft) => {\n const foundIdx = draft.findIndex((c) => c.term.id === termId);\n if (foundIdx !== -1) {\n draft.splice(foundIdx, 1);\n }\n });\n };\n\n const handleClose = () => {\n setAddNewCourse(false);\n setSelectedCourse(null);\n };\n\n const retrieveCourses = async () => {\n showLoading();\n\n const courses = (await getCourses()) as CoursesResp[];\n setCourses((draft) => {\n if (courses) {\n draft.push(...courses);\n }\n });\n hideLoading();\n };\n\n useEffect(() => {\n retrieveCourses();\n }, []);\n\n const handleSelectedCourse = (course: CoursesResp) => {\n setSelectedCourse(course);\n };\n\n const getDialogTitle = () => (\n \n {selectedCourse ? \"Update course\" : \"Add a new Course\"}\n \n );\n\n const startDate =\n selectedCourse?.term.startDate ?? DateTime.now().toISODate();\n const endDate =\n selectedCourse?.term.endDate ??\n DateTime.now().plus({ days: 6 }).toISODate();\n const termDescription = selectedCourse?.term?.description ?? \"\";\n\n return (\n \n \n \n \n \n {courses.length > 0 && (\n \n )}\n {courses.length === 0 && (\n \n )}\n \n \n \n Add a new course\n \n \n \n \n \n {getDialogTitle()}\n \n \n \n \n \n );\n}\n\nexport default withStyles(styles)(Course);\n","import {\n AddEnrolmentDocument,\n AddEnrolmentInput,\n AddEnrolmentMutation,\n DeclineEnrolmentDocument,\n DeclineEnrolmentInput,\n DeclineEnrolmentMutation,\n GetEnrolmentsDocument,\n GetEnrolmentsInput,\n GetEnrolmentsQuery,\n} from \"../generated/graphql\";\nimport { client } from \"./client\";\n\nexport const getEnrolments = async ({\n userId,\n playerId,\n ...rest\n}: GetEnrolmentsInput) => {\n return (\n await client.query({\n query: GetEnrolmentsDocument,\n variables: {\n param: {\n type: rest.type ?? undefined,\n userId,\n playerId,\n },\n },\n })\n ).data.getEnrolments;\n};\n\nexport const addEnrolment = async ({\n courseIds,\n playerIds,\n type,\n userId,\n paymentAmount,\n}: AddEnrolmentInput) =>\n (\n await client.mutate({\n mutation: AddEnrolmentDocument,\n variables: {\n param: {\n userId,\n type,\n courseIds,\n playerIds,\n paymentAmount,\n },\n },\n })\n ).data?.addEnrolment;\n\nexport const declineEnrolment = async ({ id }: DeclineEnrolmentInput) =>\n await client.mutate({\n mutation: DeclineEnrolmentDocument,\n variables: {\n param: {\n id,\n },\n },\n });\n","import {\n AddHolidayCourseDocument,\n AddHolidayCourseInput,\n AddHolidayCourseMutation,\n DeleteHolidayCourseDocument,\n DeleteHolidayCourseInput,\n DeleteHolidayCourseMutation,\n GetHolidayCourseDocument,\n GetHolidayCourseQuery,\n HolidayCourse,\n SetCourseStatusInput,\n SetHolidayCourseStatusDocument,\n SetHolidayCourseStatusMutation,\n UpdateHolidayCourseDocument,\n UpdateHolidayCourseInput,\n UpdateHolidayCourseMutation,\n} from \"../generated/graphql\";\nimport { client } from \"./client\";\n\nexport const addHolidayCourse = async (inputData: AddHolidayCourseInput) =>\n (\n await client.mutate({\n mutation: AddHolidayCourseDocument,\n variables: {\n param: {\n ...inputData,\n },\n },\n })\n ).data?.addHolidayCourse;\n\nexport const updateHolidayCourse = async (\n inputData: UpdateHolidayCourseInput\n) =>\n (\n await client.mutate({\n mutation: UpdateHolidayCourseDocument,\n variables: {\n param: {\n ...inputData,\n },\n },\n })\n ).data?.updateHolidayCourse;\n\nexport const getHolidayCourses = async () =>\n (\n await client.query({\n query: GetHolidayCourseDocument,\n })\n ).data?.getHolidayCourses;\n\nexport const deleteHolidayCourse = async ({\n courseId,\n}: DeleteHolidayCourseInput): Promise => {\n const result =\n (\n await client.mutate({\n mutation: DeleteHolidayCourseDocument,\n variables: {\n param: {\n courseId,\n },\n },\n })\n ).data?.deleteHolidayCourse ?? false;\n return result;\n};\n\nexport const setHolidayCourseStatus = async ({\n courseId,\n status,\n}: SetCourseStatusInput): Promise => {\n const result = (\n await client.mutate({\n mutation: SetHolidayCourseStatusDocument,\n variables: {\n param: {\n courseId,\n status,\n },\n },\n })\n ).data?.setHolidayCourseStatus;\n return result?.course;\n};\n","import {\n AddPlayerDocument,\n AddPlayerInput,\n AddPlayerMutation,\n GetPlayersDocument,\n GetPlayersInput,\n GetPlayersQuery,\n SavePlayerDocument,\n SavePlayerInput,\n SavePlayerMutation,\n} from \"../generated/graphql\";\nimport { client } from \"./client\";\n\nexport const getPlayers = async ({ parentId }: GetPlayersInput) => {\n return (\n await client.query({\n query: GetPlayersDocument,\n variables: {\n param: {\n parentId,\n },\n },\n })\n ).data.getPlayers;\n};\n\nexport const addPlayer = async ({\n firstName,\n lastName,\n school,\n gender,\n dob,\n parentId,\n disability,\n disabilityClass,\n disabilityDescription,\n}: AddPlayerInput) =>\n (\n await client.mutate({\n mutation: AddPlayerDocument,\n variables: {\n param: {\n firstName,\n lastName,\n school,\n gender,\n dob,\n parentId,\n disability,\n disabilityClass,\n disabilityDescription,\n },\n },\n })\n ).data?.addPlayer;\n\nexport const savePlayer = async ({\n playerId,\n firstName,\n lastName,\n school,\n gender,\n dob,\n parentId,\n disability,\n disabilityClass,\n disabilityDescription,\n}: SavePlayerInput) =>\n (\n await client.mutate({\n mutation: SavePlayerDocument,\n variables: {\n param: {\n playerId,\n firstName,\n lastName,\n school,\n gender,\n dob,\n parentId,\n disability,\n disabilityClass,\n disabilityDescription,\n },\n },\n })\n ).data?.savePlayer;\n","import { Player } from \"../generated/graphql\";\n\nconst getPlayerName = (player?: Player) =>\n `${player?.firstName} ${player?.lastName}`;\nexport default getPlayerName;\n","import {\n Card,\n CardContent,\n CardHeader,\n Grid,\n Paper,\n Typography,\n} from \"@material-ui/core\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport { useImmer } from \"use-immer\";\nimport {\n Course,\n CoursesResp,\n ECourseLevel,\n EWeekDay,\n Term,\n} from \"../generated/graphql\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n container: {\n minHeight: \"500px\",\n padding: theme.spacing(1),\n },\n root: {\n backgroundColor: \"yellow\",\n },\n card: {\n margin: theme.spacing(2),\n },\n selectedGrid: {\n background: theme.palette.info.main,\n },\n disableSelectGrid: {\n background: \"red\",\n },\n begininerLevel: {\n background: \"yellow\",\n },\n intermediateLevel: {\n background: \"lightblue\",\n },\n advancedLevel: {\n background: \"purple\",\n },\n privateLevel: {\n background: \"green\",\n },\n eliteLevel: {\n background: \"burlywood\",\n },\n });\n\nexport interface Props extends WithStyles {\n courses: CoursesResp[];\n onSelectedCourse?: (\n selectedCourse: { course: Course; term: Term },\n bSelectCourse: boolean\n ) => void;\n}\n\nexport interface ICourseRow {\n id: string;\n termDescription: string;\n startDate: string;\n endDate: string;\n level: ECourseLevel;\n selectedCourseIndex?: number;\n}\n\nfunction CourseListInWeekView(props: Props) {\n const { classes, courses, onSelectedCourse } = props;\n const [selectedCourseIds, setSelectedCourseIds] = useImmer([]);\n interface WkCourse {\n [name: string]: { course?: Course; term?: Term }[];\n }\n const coursesInWkDay = courses\n .filter(\n (course: CoursesResp) => course.courses.findIndex((c) => c.available) >= 0\n )\n .reduce(\n (acc: WkCourse, curr: CoursesResp) => {\n const xxx = curr.courses.filter((c: any) => c.available);\n xxx.forEach((course: Course) => {\n acc[course.courseDay].push({\n course: course as Course,\n term: curr.term,\n });\n });\n return acc;\n },\n {\n [EWeekDay.Sun]: [],\n [EWeekDay.Mon]: [],\n [EWeekDay.Tues]: [],\n [EWeekDay.Wed]: [],\n [EWeekDay.Thu]: [],\n [EWeekDay.Fri]: [],\n [EWeekDay.Sat]: [],\n }\n );\n\n const getCardClassName = (t: Term | undefined, c: Course | undefined) => {\n if (c && c?.availableCapacity <= 0) {\n return classes.disableSelectGrid;\n }\n // if (selectedCourseIds.find((cid) => c?.id === cid)) {\n // return classes.selectedGrid;\n // }\n if (t?.level === ECourseLevel.Beginner) {\n return classes.begininerLevel;\n }\n if (\n t?.level === ECourseLevel.Intermediate1 ||\n t?.level === ECourseLevel.Intermediate2 ||\n t?.level === ECourseLevel.Intermediate3\n ) {\n return classes.intermediateLevel;\n }\n if (\n t?.level === ECourseLevel.Advanced1 ||\n t?.level === ECourseLevel.Advanced2 ||\n t?.level === ECourseLevel.Advanced3\n ) {\n return classes.advancedLevel;\n }\n if (t?.level === ECourseLevel.Private) {\n return classes.privateLevel;\n }\n if (t?.level.toLowerCase() === ECourseLevel.ELite.toLowerCase()) {\n return classes.eliteLevel;\n }\n return \"\";\n };\n\n return (\n \n {Object.keys(coursesInWkDay).map((wkDayName: string) => {\n return (\n \n \n \n \n {coursesInWkDay[wkDayName].length === 0 && (\n No lessons \n )}\n {coursesInWkDay[wkDayName].map((c) => {\n const isCourseSelected =\n selectedCourseIds.findIndex(\n (cid) => cid === c.course?.id\n ) >= 0;\n\n const checkboxColor = isCourseSelected\n ? \"secondary\"\n : \"primary\";\n\n return (\n {\n const foundIdx = selectedCourseIds.findIndex(\n (cid) => cid == c.course?.id\n );\n if (c && c.course && c.course?.availableCapacity <= 0) {\n return;\n }\n const bSelectCourse = foundIdx < 0;\n setSelectedCourseIds((draft) => {\n if (foundIdx >= 0) {\n draft.splice(foundIdx, 1);\n } else {\n draft.push(c.course?.id);\n }\n });\n if (onSelectedCourse) {\n onSelectedCourse(\n c as { course: Course; term: Term },\n bSelectCourse\n );\n }\n }}\n >\n \n \n \n \n \n \n Level: {c.term?.level}\n \n {\" \"}\n Term date: {c.term?.startDate} to{\" \"}\n {c.term?.endDate}\n \n \n Traing time: {c.course?.startTime} -{\" \"}\n {c.course?.endTime}{\" \"}\n \n \n Available: {c.course?.availableCapacity}\n \n \n Total lessons:{\" \"}\n {(c.course?.numOfLessons ?? 0) -\n (c.course?.numOfPublicHolidays ?? 0)}\n \n {/* \n Price: ${c.course?.unitPrice}\n */}\n \n \n \n \n );\n })}\n \n \n \n );\n })}\n \n );\n}\n\nexport default withStyles(styles)(CourseListInWeekView);\n","import {\n AddPaymentMethodDocument,\n AddPaymentMethodMutation,\n CreatePaymentIntentDocument,\n CreatePaymentIntentInput,\n CreatePaymentIntentMutation,\n DeletePaymentMethodDocument,\n DeletePaymentMethodMutation,\n GetPaymentMethodsDocument,\n GetPaymentMethodsQuery,\n GetPaymentsDocument,\n GetPaymentsInput,\n GetPaymentsQuery,\n UpdatePaymentStatusDocument,\n UpdatePaymentStatusInput,\n UpdatePaymentStatusMutation,\n} from \"../generated/graphql\";\nimport { client } from \"./client\";\n\nexport const getPayments = async ({ userId }: GetPaymentsInput) => {\n return (\n await client.query({\n query: GetPaymentsDocument,\n variables: {\n param: {\n userId,\n },\n },\n })\n ).data.getPayments;\n};\n\nexport const updatePaymentStatus = async ({\n paymentId,\n status,\n}: UpdatePaymentStatusInput) => {\n return (\n await client.query({\n query: UpdatePaymentStatusDocument,\n variables: {\n param: {\n paymentId,\n status,\n },\n },\n })\n ).data.updatePaymentStatus;\n};\n\nexport const getPaymentMethods = async () => {\n return (\n await client.query({\n query: GetPaymentMethodsDocument,\n variables: {},\n })\n ).data.getPaymentMethods;\n};\n\nexport const addPaymentMethod = async () => {\n return (\n await client.mutate({\n mutation: AddPaymentMethodDocument,\n })\n ).data?.addPaymentMethod;\n};\n\nexport const deletePaymentMethod = async (id: string) => {\n return (\n await client.mutate({\n mutation: DeletePaymentMethodDocument,\n variables: {\n param: {\n id,\n },\n },\n })\n ).data?.deletePaymentMethod;\n};\n\nexport const createPaymentIntent = async ({\n amount,\n paymentMethodId,\n paymentCode,\n}: CreatePaymentIntentInput) => {\n return (\n await client.mutate({\n mutation: CreatePaymentIntentDocument,\n variables: {\n param: {\n amount,\n paymentMethodId,\n paymentCode,\n },\n },\n })\n ).data?.createPaymentIntent;\n};\n","import React, { useContext, useState } from \"react\";\nimport {\n useStripe,\n useElements,\n PaymentElement,\n} from \"@stripe/react-stripe-js\";\nimport { NotificationContext } from \"../context/NotificationContext\";\n\ninterface Props {\n onResult: (succeed: boolean) => void;\n}\nconst SetupForm = ({ onResult }: Props) => {\n const stripe = useStripe();\n const elements = useElements();\n\n const [errorMessage, setErrorMessage] = useState(null);\n\n const handleSubmit = async (event: any) => {\n // We don't want to let default form submission happen here,\n // which would refresh the page.\n event.preventDefault();\n\n if (!stripe || !elements) {\n // Stripe.js hasn't yet loaded.\n // Make sure to disable form submission until Stripe.js has loaded.\n return null;\n }\n\n const resp = await stripe.confirmSetup({\n //`Elements` instance that was used to create the Payment Element\n elements,\n redirect: \"if_required\",\n });\n\n console.log(\"xxxx resp\", resp);\n if (resp.error) {\n // This point will only be reached if there is an immediate error when\n // confirming the payment. Show error to your customer (for example, payment\n // details incomplete)\n // setErrorMessage(error?.message);\n onResult(false);\n } else {\n onResult(true);\n // Your customer will be redirected to your `return_url`. For some payment\n // methods like iDEAL, your customer will be redirected to an intermediate\n // site first to authorize the payment, then redirected to the `return_url`.\n }\n };\n\n return (\n
\n \n \n {/* Show error message to your customers */}\n {errorMessage &&
{errorMessage}
}\n \n );\n};\n\nexport default SetupForm;\n","import React, { Fragment, useContext, useEffect, useState } from \"react\";\nimport {\n createStyles,\n Theme,\n WithStyles,\n withStyles,\n} from \"@material-ui/core/styles\";\nimport { loadStripe } from \"@stripe/stripe-js\";\nimport { Elements } from \"@stripe/react-stripe-js\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport { addPaymentMethod, deletePaymentMethod } from \"../api/payment.service\";\nimport { GetPaymentMethodsResp } from \"../generated/graphql\";\nimport {\n Button,\n IconButton,\n List,\n ListItem,\n ListItemSecondaryAction,\n ListItemText,\n Typography,\n} from \"@material-ui/core\";\nimport SetupForm from \"./SetupForm\";\nimport { NotificationContext } from \"../context/NotificationContext\";\nconst stripePromise = loadStripe(\n // \"pk_test_51NBHD7ILmiXWY2zVIgEWetQXixqHQnRvanCHiW4jIIjj8uYdE0RzX3QuC0zwTvtROtfpWT1CJJfWnnjo3Wg0T9B700VM4HnXLY\"\n \"pk_live_51NOGRMBhd1nZaB4CFfLL8uh3zN6b9NLhxJmaQ6ujNm7Vm1BFpoX6bzZ0TTE4yENWBzuPkgThjtfv162qjrXFD7ay00noWiUxxl\"\n);\n\nconst styles = (theme: Theme) =>\n createStyles({\n paperWidthSm: {\n maxWidth: \"80em\",\n },\n button: {\n marginTop: theme.spacing(1),\n marginRight: theme.spacing(1),\n },\n container: {\n padding: theme.spacing(3),\n },\n });\n\nconst PaymentMethodList = ({ methods, onChange, reload, classes }: Props) => {\n const loadSetupIntent = async () => {\n if (methods.length === 0) {\n const addPaymentMethodResp = await addPaymentMethod();\n setClientSetupIntent(addPaymentMethodResp?.clientSecret);\n }\n };\n const [selectedMethod, setSelectedMethod] = useState();\n\n const handleToggle = (method: GetPaymentMethodsResp) => () => {\n onChange(method);\n setSelectedMethod(method);\n };\n const { showSuccessNotification, showErrorNotification } =\n useContext(NotificationContext);\n const [clientSetupIntent, setClientSetupIntent] = useState<\n string | undefined\n >(undefined);\n\n useEffect(() => {\n loadSetupIntent();\n }, [methods.length]);\n\n const [toAddNewCard, setToAddNewCard] = useState(false);\n const addNewCard = () => {\n setToAddNewCard(true);\n };\n\n const removeCard = (cardToBeRemoved: any) => async () => {\n await deletePaymentMethod(cardToBeRemoved.id);\n showSuccessNotification(\n `Payment with last 4 digits ${cardToBeRemoved.last4} expiration ${cardToBeRemoved.exp_year} has been removed`\n );\n reload();\n return;\n };\n const options = {\n clientSecret: clientSetupIntent,\n };\n\n return (\n
\n {methods.length > 0 && (\n <>\n \n Please choose a card below to pay\n \n \n {methods.map((method) => (\n \n \n {`${method.last4} ${method.exp_month} / ${method.exp_year}`}\n \n \n \n \n \n \n \n ))}\n \n \n )}\n {methods.length === 0 && clientSetupIntent && (\n \n Add a new card\n \n )}\n\n {toAddNewCard && clientSetupIntent && (\n <>\n Please add a card to pay.{\" \"}\n \n {\n if (succeed) {\n showSuccessNotification(\"Payment method added\");\n setToAddNewCard(false);\n reload();\n } else {\n showErrorNotification(\"Failed to add payment method\");\n }\n }}\n />\n \n \n )}\n
\n );\n};\nexport interface Props extends WithStyles {\n methods: GetPaymentMethodsResp[];\n onChange: (method: GetPaymentMethodsResp) => void;\n reload: () => void;\n}\n\nexport default withStyles(styles)(PaymentMethodList);\n","// 1.75 % + A$0.30\n// 3.5% + A$0.30\nconst applyGst = (amount: number) => amount * 1.1;\n// amout should be in cents\n// const applyStripeDomestic = (amount: number) => amount * 1.0175 + 30;\nconst applyStripeDomestic = (amount: number) => amount * 1.02 + 30; // 2 percent;\nconst applyStripeInternational = (amount: number) => amount * 1.03 + 30;\n\nexport const applyPaymentAmount = (\n amount: number,\n doemestic: boolean = true,\n applyGST: boolean = false\n) => {\n const amountInCents = amount * 100;\n return doemestic\n ? Math.round(\n applyStripeDomestic(applyGST ? applyGst(amountInCents) : amountInCents)\n )\n : Math.round(\n applyStripeInternational(\n applyGST ? applyGst(amountInCents) : amountInCents\n )\n );\n};\n\nexport const amountToDollar = (amount: number) => (amount / 100).toFixed(2);\n","import React, { Fragment, useContext, useEffect, useState } from \"react\";\nimport {\n createStyles,\n Theme,\n WithStyles,\n withStyles,\n} from \"@material-ui/core/styles\";\nimport { StripeElementsOptions, loadStripe } from \"@stripe/stripe-js\";\nimport {\n PaymentElement,\n Elements,\n useStripe,\n useElements,\n} from \"@stripe/react-stripe-js\";\nimport {\n addPaymentMethod,\n createPaymentIntent,\n getPaymentMethods,\n} from \"../api/payment.service\";\nimport {\n GetPaymentMethodsQueryResult,\n GetPaymentMethodsResp,\n} from \"../generated/graphql\";\nimport PaymentMethodList from \"./PaymentMethodList\";\nimport { Button, Icon, Typography } from \"@material-ui/core\";\nimport { Info } from \"@material-ui/icons\";\nimport { amountToDollar, applyPaymentAmount } from \"../utils/paymentAmount\";\nimport { LoadingContext } from \"../context/LoadingContext\";\nimport { NotificationContext } from \"../context/NotificationContext\";\nconst styles = (theme: Theme) =>\n createStyles({\n container: {\n padding: theme.spacing(3),\n },\n paperWidthSm: {\n maxWidth: \"80em\",\n },\n button: {\n marginTop: theme.spacing(1),\n marginRight: theme.spacing(1),\n },\n actionsContainer: {\n marginBottom: theme.spacing(2),\n },\n resetContainer: {\n padding: theme.spacing(3),\n },\n });\n\nconst PaymentForm = ({\n amount,\n totalAmount,\n onResult,\n submitForm,\n classes,\n}: {\n amount: number;\n totalAmount: number;\n submitForm: () => Promise;\n onResult: (status: {\n succeed: boolean;\n paymentId?: string;\n paymentMethod?: string;\n }) => void;\n} & Props) => {\n const [selectedPaymentMethod, setSelectedPaymentMethod] =\n useState();\n\n const { showLoading, hideLoading } = useContext(LoadingContext);\n const { showSuccessNotification } = useContext(NotificationContext);\n const [methods, setMethods] = useState([]);\n\n const retrievePaymentMethods = async () => {\n const paymentMethods = await getPaymentMethods();\n setMethods(paymentMethods);\n };\n\n useEffect(() => {\n retrievePaymentMethods();\n }, []);\n\n const submitPayment = async () => {\n try {\n showLoading();\n const resp = await submitForm();\n const paymentResp = await createPaymentIntent({\n amount: totalAmount, // in cents\n paymentMethodId: selectedPaymentMethod?.id,\n paymentCode: resp.payment?.reference,\n });\n showSuccessNotification(\"Payment succeed\");\n hideLoading();\n onResult({\n succeed: true,\n paymentMethod: paymentResp?.paymentMethod,\n paymentId: paymentResp?.paymentId,\n });\n } catch (err) {\n hideLoading();\n onResult({ succeed: false });\n }\n };\n return (\n
\n \n Payment includes base fee ${amount}, plus transaction fee (2% and\n A$0.30), total ${amountToDollar(totalAmount)}.\n \n {\n retrievePaymentMethods();\n }}\n methods={methods}\n onChange={(method: GetPaymentMethodsResp) => {\n setSelectedPaymentMethod(method);\n }}\n />\n\n \n Confirm to pay\n \n {/* {paymentIntentSecret && (\n \n \n \n )} */}\n
\n );\n};\nexport interface Props extends WithStyles {}\n\nexport default withStyles(styles)(PaymentForm);\n","import { Button, Card, CardContent, Grid, Typography } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n WithStyles,\n withStyles,\n} from \"@material-ui/core/styles\";\nimport { useFormik } from \"formik\";\nimport React, { useContext, useState } from \"react\";\nimport { addEnrolment } from \"../api/enrolment.service\";\nimport { AuthContext } from \"../context/AuthContext\";\nimport { LoadingContext } from \"../context/LoadingContext\";\nimport { NotificationContext } from \"../context/NotificationContext\";\nimport {\n Course,\n CoursesResp,\n EEnrolmentType,\n EnrolmentResult,\n HolidayCourse,\n Player,\n Term,\n} from \"../generated/graphql\";\nimport FormContainer from \"./FormContainer\";\nimport PaymentForm from \"./PaymentForm\";\nimport { applyPaymentAmount } from \"../utils/paymentAmount\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n container: {},\n button: {\n marginTop: theme.spacing(1),\n marginRight: theme.spacing(1),\n },\n actionsContainer: {\n marginBottom: theme.spacing(2),\n },\n resetContainer: {\n padding: theme.spacing(3),\n },\n card: {\n border: \"1px solid green\",\n margin: theme.spacing(2),\n },\n });\n\nexport interface IEnrolmentData {\n courses: CoursesResp[];\n filteredCourses: CoursesResp[];\n holidayCourses?: HolidayCourse[];\n players: Player[];\n enrolments: EnrolmentResult[];\n selectedPlayers: Player[];\n selectedCourses?: { course: Course; term: Term }[];\n selectedDays?: { [name: string]: { [name: string]: boolean } };\n}\n\nexport interface Props extends WithStyles {\n enrolmentData: IEnrolmentData;\n onClose: () => void;\n onEnrolmentAdded: (enrolment: EnrolmentResult) => void;\n}\n\nfunction EnrolmentDetail(props: Props) {\n const { classes, onClose } = props;\n const enrolmentData = props.enrolmentData;\n const onEnrolmentAdded = props.onEnrolmentAdded;\n const { userProfile } = useContext(AuthContext);\n const { showLoading, hideLoading } = useContext(LoadingContext);\n const { showSuccessNotification, showErrorNotification } =\n useContext(NotificationContext);\n const [enroled, setEnroled] = useState(false);\n const handleSubmit2 = async () => {\n try {\n const { selectedCourses, selectedPlayers, selectedDays } = enrolmentData;\n const courseIds = selectedCourses?.map((c) => c.course.id);\n const playerIds = selectedPlayers.map((p) => p.id);\n if (courseIds && playerIds) {\n showLoading();\n const paymentAmount = `${getTotalPrice(enrolmentData)}`;\n const addEnrolmentData = {\n type: EEnrolmentType.Term,\n userId: userProfile?.id,\n courseIds,\n playerIds,\n paymentAmount,\n };\n const r = await addEnrolment(addEnrolmentData);\n console.log(\"xxxxx r\", r);\n if (onEnrolmentAdded && r) {\n onEnrolmentAdded(r);\n }\n setEnroled(true);\n showSuccessNotification(\"Enroled\");\n return r;\n }\n } catch (e) {\n showErrorNotification(\"Please retry later\");\n } finally {\n hideLoading();\n onClose();\n }\n };\n\n // const { values, handleSubmit, handleChange, errors, touched } = useFormik({\n // enableReinitialize: true,\n // initialValues: {},\n // // validationSchema: validationsForm,\n // onSubmit: async (values) => {\n // try {\n // const { selectedCourses, selectedPlayers, selectedDays } =\n // enrolmentData;\n // const courseIds = selectedCourses?.map((c) => c.course.id);\n // const playerIds = selectedPlayers.map((p) => p.id);\n // if (courseIds && playerIds) {\n // showLoading();\n // const paymentAmount = `${getTotalPrice(enrolmentData)}`;\n // const addEnrolmentData = {\n // type: EEnrolmentType.Term,\n // userId: userProfile?.id,\n // courseIds,\n // playerIds,\n // paymentAmount,\n // };\n // const r = await addEnrolment(addEnrolmentData);\n // if (onEnrolmentAdded && r) {\n // onEnrolmentAdded(r);\n // }\n // setEnroled(true);\n // showSuccessNotification(\"Enroled\");\n // }\n // } catch (e) {\n // showErrorNotification(\"Please retry later\");\n // } finally {\n // hideLoading();\n // onClose();\n // }\n // },\n // });\n\n const convertDaysObjToDaysList = (daysObj: { [name: string]: boolean }) => {\n const result = [];\n for (const [day, selected] of Object.entries(daysObj)) {\n if (selected) {\n result.push(day);\n }\n }\n return result;\n };\n\n const selectedDaysList = (selectedDays: {\n [name: string]: boolean;\n }): string => {\n const result = convertDaysObjToDaysList(selectedDays);\n return result.join(\", \");\n };\n\n const getPlayersName = (players: Player[]) => {\n return players.map((x) => `${x.firstName} ${x.lastName}`).join(\", \");\n };\n\n const getTotalPrice = ({\n selectedDays,\n selectedCourses,\n selectedPlayers,\n }: IEnrolmentData): number => {\n return (\n selectedCourses?.reduce((allPrice, currentCourse) => {\n return (\n allPrice +\n currentCourse.course.unitPrice *\n selectedPlayers.length *\n (currentCourse.course.numOfLessons -\n (currentCourse.course.numOfPublicHolidays ?? 0))\n );\n }, 0) ?? 0\n );\n };\n\n const selectedCourse = enrolmentData.selectedCourses?.[0];\n const isCourseSelected = !!selectedCourse;\n const isPlayersSelected = enrolmentData.selectedPlayers.length > 0;\n // const isDaysSelected = enrolmentData.selectedDays[selectedCourse?.term.id]; // days are selected\n const canBeEnroled = isCourseSelected && isPlayersSelected;\n const amount = getTotalPrice(enrolmentData);\n const totalAmount = applyPaymentAmount(amount);\n\n return (\n \n {!isCourseSelected && (\n Please select course \n )}\n {!isPlayersSelected && (\n \n No player selected, please select player first\n \n )}\n {/* {!isDaysSelected && Please choose lesson day} */}\n {\n //
\n \n \n {enrolmentData?.selectedPlayers?.length > 0 && (\n \n \n \n The following player(s) are selected\n \n \n \n \n {getPlayersName(enrolmentData.selectedPlayers)}\n \n \n \n )}\n {enrolmentData.selectedCourses?.length === 0 && (\n \n No course selected, please select one course first\n \n )}\n {enrolmentData.selectedCourses &&\n enrolmentData.selectedCourses.length > 0 && (\n \n The following course(s) are selected\n \n )}\n {enrolmentData.selectedCourses?.map((course) => (\n \n \n \n Level: {`${course?.term?.level}`}\n \n \n Price: ${`${course?.course.unitPrice}`}\n \n \n Start time: {course?.course.startTime} to{\" \"}\n {course?.course.endTime}\n \n \n Week day: {`${course?.course.courseDay}`}\n \n \n Term period:\n {`${course?.term.startDate} to ${course?.term.endDate}`}\n \n \n Total lessons:{\" \"}\n {course.course.numOfLessons -\n course.course.numOfPublicHolidays}\n \n \n \n ))}\n\n {(enrolmentData.selectedCourses?.length ?? 0) > 0 && (\n \n Your spot is secured at the time of paymet. Please bring exact\n amount and pay in person ASAP since the places are limited.\n \n )}\n {canBeEnroled && (\n {\n return await handleSubmit2();\n }}\n onResult={({ succeed, paymentId }) => {}}\n >\n )}\n {/* \n Account Name: Zhenhua Dederko\n \n BSB: 062 140\n Account No. 1161 4669 */}\n \n {/* \n \n Enrol\n \n */}\n \n //
\n }\n
\n );\n}\n\nexport default withStyles(styles)(EnrolmentDetail);\n","import { DateTime } from \"luxon\";\n\nconst formatDate = (date: string, format = \"dd/MM/yyyy\") => {\n return DateTime.fromISO(date).toFormat(format);\n};\nexport default formatDate;\n","import {\n Button,\n Dialog,\n DialogContent,\n Grid,\n Paper,\n Typography,\n withStyles,\n} from \"@material-ui/core\";\nimport { createStyles, Theme, WithStyles } from \"@material-ui/core/styles\";\nimport { DataGrid, RowSelectedParams } from \"@material-ui/data-grid\";\nimport React, { useState } from \"react\";\nimport {\n Course,\n EEnrolmentType,\n EGender,\n EnrolmentResult,\n HolidayCourse,\n} from \"../generated/graphql\";\nimport formatDate from \"../utils/formatDate\";\nimport getPlayerName from \"../utils/getPlayerName\";\nimport DialogTitle from \"./DialogTitle\";\nimport { IEnrolmentData } from \"./EnrolmentDetail\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n container: {\n height: \"40vh\",\n overflowY: \"auto\",\n width: \"95%\",\n },\n });\n\nexport interface IEnrolmentRow {\n id: string;\n firstName: string;\n lastName: string;\n dob: string;\n gender: EGender;\n school: string;\n disability: boolean;\n parentId: string;\n}\n\ninterface Props extends WithStyles {\n enrolmentData: IEnrolmentData;\n}\n\nconst getRowsColumns = (enrolmentData: IEnrolmentData) => {\n const { enrolments, players, courses, selectedDays, holidayCourses } =\n enrolmentData;\n const rows = enrolments.map((enrolment: EnrolmentResult) => {\n const { id, playerIds, courseIds, enrolDate } = enrolment.enrolment;\n const { status, reference } = enrolment.payment;\n const playersName = players\n .filter((p) => playerIds.indexOf(p.id) >= 0)\n .map(getPlayerName)\n .join(\",\");\n\n const courseDays = enrolment.enrolment.courseIds.map((id) => {\n // find the course id from courses;\n for (const c of courses) {\n const found = c.courses.find((c) => c.id === id);\n if (found) {\n return found.courseDay;\n }\n }\n return \"\";\n });\n const holidayDays = enrolment.enrolment.courseIds\n .filter((id) => holidayCourses?.find((hc) => hc.id === id))\n .map((hc) => \"Holiday Camp\");\n return {\n id,\n playersName,\n enrolDate: formatDate(enrolDate, \"yyyy/MM/dd\"),\n courses: [...courseDays, ...holidayDays].filter(\n (s) => s.trim().length > 0\n ),\n status,\n };\n });\n const columns = [\n { field: \"playersName\", headerName: \"Players\", width: 300 },\n { field: \"enrolDate\", headerName: \"Enrol date\", width: 140 },\n { field: \"status\", headerName: \"Payment\", width: 120 },\n { field: \"courses\", headerName: \"Courses\", width: 120 },\n ];\n return {\n rows,\n columns,\n };\n};\n\nconst EnrolmentList = ({ classes, enrolmentData }: Props) => {\n const { enrolments } = enrolmentData;\n const { rows, columns } = getRowsColumns(enrolmentData);\n const [showDialog, setShowDialog] = useState(false);\n const [selectedEnrolment, setSelectedEnrolment] = useState<\n EnrolmentResult | undefined\n >(undefined);\n const handleRowSelected = (rowData: RowSelectedParams) => {\n const foundElement = enrolments.find(\n (x) => x.enrolment.id === rowData.data.id\n );\n if (foundElement) {\n setSelectedEnrolment(foundElement);\n setShowDialog(true);\n }\n };\n\n const handleCloseDialog = () => {\n setShowDialog(false);\n };\n\n const getSelectedPlayersName = () => {\n return enrolmentData.players\n .filter(\n (p) =>\n selectedEnrolment &&\n selectedEnrolment?.enrolment?.playerIds?.indexOf(p.id) >= 0\n )\n .map(getPlayerName)\n .join(\",\");\n };\n\n return (\n \n {enrolments.length > 0 && (\n \n )}\n \n \n Enrolment detail\n \n \n \n \n \n {\" \"}\n Players: {getSelectedPlayersName()}\n \n \n \n {selectedEnrolment?.enrolment.courseIds.map((id) => {\n const isHolidayType =\n selectedEnrolment.enrolment.type == EEnrolmentType.Holiday;\n let foundEnrolmentData;\n let detailCourse;\n if (isHolidayType) {\n detailCourse = enrolmentData?.holidayCourses?.find(\n (c) => c.id === id\n );\n } else {\n foundEnrolmentData = enrolmentData.courses.find(\n (c) => c.courses.findIndex((cc) => cc.id === id) >= 0\n );\n detailCourse = foundEnrolmentData?.courses.find(\n (c) => c.id === id\n );\n }\n return (\n \n {!isHolidayType && (\n \n \n {foundEnrolmentData?.term.startDate} to{\" \"}\n {foundEnrolmentData?.term.endDate}\n \n \n )}\n \n {isHolidayType && (\n \n Holiday course: From{\" \"}\n {(detailCourse as HolidayCourse)?.startDate} to{\" \"}\n {(detailCourse as HolidayCourse)?.endDate}\n \n )}\n\n {!isHolidayType && (\n \n {(detailCourse as Course)?.courseDay}\n \n )}\n \n \n \n From {detailCourse?.startTime} to{\" \"}\n {detailCourse?.endTime}\n \n \n \n \n {foundEnrolmentData?.term.level}\n \n \n \n );\n })}\n \n \n \n {\" \"}\n Fee: ${selectedEnrolment?.payment.amount}\n \n \n \n \n Status: {selectedEnrolment?.payment.status}\n \n \n \n \n Phone: {selectedEnrolment?.user?.phone}\n \n \n \n \n Email: {selectedEnrolment?.user?.email}\n \n \n \n \n Close\n \n \n \n \n \n \n );\n};\n\nexport default withStyles(styles)(EnrolmentList);\n","import {\n Button,\n Checkbox,\n Dialog,\n DialogContent,\n FormControlLabel,\n Grid,\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n Typography,\n} from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n WithStyles,\n withStyles,\n} from \"@material-ui/core/styles\";\nimport { DateTime } from \"luxon\";\nimport React, { useContext, useEffect, useState } from \"react\";\nimport { useImmer } from \"use-immer\";\nimport { getCourses } from \"../api/course.service\";\nimport { getEnrolments } from \"../api/enrolment.service\";\nimport { getHolidayCourses } from \"../api/holidayCourse.service\";\nimport { getPlayers } from \"../api/player.service\";\nimport { AuthContext } from \"../context/AuthContext\";\nimport { LoadingContext } from \"../context/LoadingContext\";\nimport EmptyInfo from \"../EmptyInfo\";\nimport {\n Course,\n CoursesResp,\n ECourseLevel,\n EnrolmentResult,\n ERole,\n Player,\n Term,\n} from \"../generated/graphql\";\nimport getPlayerName from \"../utils/getPlayerName\";\nimport CourseListInWeekView from \"./CourseListInWeekView\";\nimport DialogTitle from \"./DialogTitle\";\nimport EnrolmentDetail, { IEnrolmentData } from \"./EnrolmentDetail\";\nimport EnrolmentList from \"./EnrolmentList\";\nimport FormContainer from \"./FormContainer\";\nimport FormRow from \"./FormRow\";\nimport FormTitle from \"./FormTitle\";\nconst styles = (theme: Theme) =>\n createStyles({\n container: {},\n paperWidthSm: {\n maxWidth: \"80em\",\n },\n root: {\n borderRadius: 3,\n border: 0,\n color: \"white\",\n height: 48,\n padding: \"0 30px\",\n },\n button: {\n marginTop: theme.spacing(1),\n marginRight: theme.spacing(1),\n },\n actionsContainer: {\n marginBottom: theme.spacing(2),\n },\n resetContainer: {\n padding: theme.spacing(3),\n },\n });\n\nexport interface Props extends WithStyles {}\n\nconst steps = [\"Please select player\", \"Please select a course\", \"Enrol now\"];\n\nfunction Enrolment(props: Props) {\n const { classes } = props;\n const [activeStep, setActiveStep] = useState(0);\n const { userProfile } = useContext(AuthContext);\n const [openEnrolmentDlg, setOpenEnrolmentDlg] = useState(false);\n const { showLoading, hideLoading } = useContext(LoadingContext);\n const [loadedData, setLoadedData] = useState(false);\n\n const [filterDays, setFilterDays] = useState({});\n const [filterLevel, setFilterLevel] = useState<{ [name: string]: boolean }>({\n Private: true,\n Beginner: true,\n Intermediate: true,\n Advanced: true,\n Elite: true,\n });\n const handleClose = () => {\n setOpenEnrolmentDlg(false);\n };\n const [enrolmentData, setEnrolmentData] = useImmer({\n courses: [],\n filteredCourses: [],\n holidayCourses: [],\n players: [],\n enrolments: [],\n selectedPlayers: [],\n selectedDays: {},\n selectedCourses: [],\n });\n\n const [selectedPlayerList, setSelectedPlayerList] = useImmer<\n {\n id: string;\n selected: boolean;\n }[]\n >([]);\n\n const handleSelectedCourse = (\n course: { course: Course; term: Term },\n bSelectCourse: boolean\n ) => {\n setEnrolmentData((draft) => {\n if (bSelectCourse) {\n draft.selectedCourses?.push(course);\n } else {\n const idx = draft.selectedCourses?.findIndex(\n (c) => course.course.id === c.course.id\n );\n if (idx !== undefined && idx >= 0) {\n draft.selectedCourses?.splice(idx, 1);\n }\n }\n });\n };\n const retrieveData = async () => {\n showLoading();\n setLoadedData(false);\n const param =\n userProfile?.role === ERole.Admin ? {} : { userId: userProfile?.id };\n const parentId = userProfile?.role === ERole.Admin ? \"\" : userProfile?.id;\n const [courses, holidayCourses, players, enrolments] = await Promise.all([\n getCourses(),\n getHolidayCourses(),\n getPlayers({ parentId }),\n getEnrolments(param),\n ]);\n\n setEnrolmentData((draft) => {\n if (courses) {\n draft.courses = courses.filter((c) => {\n const a = DateTime.now().startOf(\"day\");\n const b = DateTime.fromISO(c.term.endDate).startOf(\"day\");\n\n const schoolList = [\n `${ECourseLevel.Nsbh}`,\n `${ECourseLevel.Nsgh}`,\n `${ECourseLevel.RosevilleCollege}`,\n ];\n // if it's admin, then pass all courses\n if (userProfile?.role === ERole.Admin) {\n return true;\n }\n // if it's parent, then from willoughby menu, only pass term courses\n const result =\n schoolList.indexOf(c.term.level) < 0 &&\n DateTime.now().startOf(\"day\") <=\n DateTime.fromISO(c.term.endDate).startOf(\"day\");\n return result;\n }) as CoursesResp[];\n draft.filteredCourses = draft.courses;\n }\n if (players) {\n draft.players = players;\n }\n if (holidayCourses) {\n draft.holidayCourses = holidayCourses.courses;\n }\n if (enrolments) {\n draft.enrolments = enrolments;\n }\n hideLoading();\n setLoadedData(false);\n });\n };\n\n useEffect(() => {\n retrieveData();\n }, []);\n\n const selectCourseStep = () => (\n <>\n \n \n );\n const updateFilterLevel = (level: string) => (evt: any) => {\n const newFilterLevels = {\n ...filterLevel,\n [level]: filterLevel[level] ? false : true,\n };\n setFilterLevel(newFilterLevels);\n setEnrolmentData((draft) => {\n draft.filteredCourses = enrolmentData.courses.filter(({ term }) => {\n if (term.level === ECourseLevel.Private && newFilterLevels.Private) {\n return true;\n }\n if (term.level === ECourseLevel.Beginner && newFilterLevels.Beginner) {\n return true;\n }\n if (term.level === ECourseLevel.ELite && newFilterLevels.Elite) {\n return true;\n }\n if (\n [\n ECourseLevel.Intermediate1 as string,\n ECourseLevel.Intermediate2 as string,\n ECourseLevel.Intermediate3 as string,\n ].indexOf(term.level) >= 0 &&\n newFilterLevels.Intermediate\n ) {\n return true;\n }\n if (\n [\n ECourseLevel.Advanced1 as string,\n ECourseLevel.Advanced2 as string,\n ECourseLevel.Advanced3 as string,\n ].indexOf(term.level) >= 0 &&\n newFilterLevels.Intermediate\n ) {\n return true;\n }\n return false;\n });\n });\n };\n\n const showFilterCheckboxes = () => {\n return (\n <>\n Choose your level: \n \n }\n />\n \n }\n />\n \n }\n />\n \n }\n />\n \n }\n />\n \n );\n };\n\n const handleSelectdPlayer = (player: Player) => (evt: any) => {\n setSelectedPlayerList((draft) => {\n const foundPlayer = draft.find((p) => p.id === player.id);\n if (foundPlayer) {\n foundPlayer.selected = !foundPlayer.selected;\n } else {\n draft.push({\n id: player.id,\n selected: true,\n });\n }\n setEnrolmentData((x) => {\n x.selectedPlayers = x.players.filter((xx) => {\n const f = draft.find((yy) => yy.id === xx.id && yy.selected);\n return !!f;\n });\n });\n });\n };\n\n const isPlayerSelected = (player: Player) =>\n // !!selectedPlayerList.find((p) => p.id === player.id && p.selected);\n !!enrolmentData.selectedPlayers.find((p) => p.id === player.id);\n\n const selectPlayerStep = () => (\n \n {enrolmentData.players.map((player: Player) => (\n \n \n \n \n \n \n ))}\n \n );\n\n const enrolmentDetailStep = () => (\n {\n setEnrolmentData((draft) => {\n draft.enrolments.push(newEnrolment);\n });\n }}\n onClose={() => {\n handleClose();\n }}\n />\n );\n\n function getStepContent(step: number) {\n switch (step) {\n case 0:\n return selectPlayerStep();\n case 1:\n return selectCourseStep();\n case 2:\n return enrolmentDetailStep();\n default:\n return \"Unknown step\";\n }\n }\n\n const handleStepClick = (stepIndex: number) => () => {\n setActiveStep(stepIndex);\n };\n\n return (\n \n \n \n \n \n {enrolmentData.enrolments?.length > 0 && (\n \n )}\n {loadedData && enrolmentData.enrolments?.length === 0 && (\n \n )}\n \n {userProfile?.role === ERole.Parent && (\n \n {\n // clear all the enrolmentData\n setEnrolmentData((draft) => {\n draft.selectedCourses = [];\n draft.selectedPlayers = [];\n });\n setOpenEnrolmentDlg(true);\n }}\n >\n Enrol a course\n \n \n )}\n \n \n {\n \n \n Enrol\n \n \n \n \n Please select players\n {selectPlayerStep()}\n \n \n \n {\" \"}\n Please select lesson you want to enrol\n \n {showFilterCheckboxes()}\n\n {selectCourseStep()}\n \n {enrolmentDetailStep()}\n \n \n \n }\n \n );\n}\n\nexport default withStyles(styles)(Enrolment);\n","import {\n IconButton,\n InputAdornment,\n TextField,\n TextFieldProps,\n} from \"@material-ui/core\";\nimport EmailIcon from \"@material-ui/icons/Email\";\nimport React from \"react\";\n\nconst EmailTextInput = (props: TextFieldProps) => (\n \n \n \n \n \n ),\n }}\n />\n);\nexport default EmailTextInput;\n","import {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n Grid,\n Typography,\n withStyles,\n} from \"@material-ui/core\";\nimport { createStyles, Theme, WithStyles } from \"@material-ui/core/styles\";\nimport { useFormik } from \"formik\";\nimport React, { useContext } from \"react\";\nimport { useHistory } from \"react-router\";\nimport * as yup from \"yup\";\nimport { DEFAULT_EMAIL } from \"../const\";\nimport { AuthContext } from \"../context/AuthContext\";\nimport { NotificationContext } from \"../context/NotificationContext\";\nimport ERoutePath from \"../routes/ERoutePath\";\nimport { emailValidator } from \"../utils/validator\";\nimport DialogTitle from \"./DialogTitle\";\nimport EmailTextInput from \"./EmailTextInput\";\nimport FormRow from \"./FormRow\";\n\nconst validationsForm = yup.object().shape({\n email: emailValidator,\n});\n\nconst styles = (theme: Theme) =>\n createStyles({\n card: {\n maxWidth: 420,\n marginTop: 50,\n },\n container: {\n display: \"Flex\",\n justifyContent: \"center\",\n },\n actions: {\n float: \"right\",\n },\n dlgAction: {\n justifyContent: \"center\",\n },\n root: {\n margin: 0,\n padding: theme.spacing(2),\n },\n closeButton: {\n position: \"absolute\",\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[500],\n },\n });\n\ninterface Props extends WithStyles {}\n\ninterface IForgotPasswordValue {\n email: string;\n}\n\nconst ForgotPassword = (props: Props) => {\n const history = useHistory();\n const { showSuccessNotification, showErrorNotification } = useContext(\n NotificationContext\n );\n const { isAuthenticated, forgotPassword } = useContext(AuthContext);\n const initialValues: IForgotPasswordValue = {\n email: DEFAULT_EMAIL,\n };\n const {\n values,\n handleSubmit,\n handleChange,\n errors,\n touched,\n handleBlur,\n } = useFormik({\n initialValues,\n validationSchema: validationsForm,\n onSubmit: async ({ email }) => {\n const result = await forgotPassword(email);\n if (result.success) {\n showSuccessNotification(\n \"Please check your email to reset your password\"\n );\n history.push(ERoutePath.home);\n } else {\n showErrorNotification(\n result.error ?? \"Unable to sign in, please try again later.\"\n );\n }\n },\n });\n const { classes } = props;\n const [open, setOpen] = React.useState(true);\n\n const handleClose = () => {\n setOpen(false);\n };\n const welcomeMessage = `Reset password message will be sent to below email`;\n if (isAuthenticated) {\n return null;\n }\n return (\n \n
\n \n Forgot password \n \n \n \n \n {welcomeMessage}\n \n \n \n \n \n \n \n \n \n \n \n \n Forgot password\n \n \n \n \n
\n \n );\n};\n\nexport default withStyles(styles)(ForgotPassword);\n","import { Grid, Paper } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport React, { useContext } from \"react\";\nimport { holidayCamp } from \"../htmls/holidayCamp\";\n\nconst styles = (theme: Theme) => {\n return createStyles({\n main: {\n padding: theme.spacing(2),\n textAlign: \"center\",\n },\n clsImage: {\n maxWidth: \"300px\",\n },\n container: {\n marginLeft: \"50px\",\n marginRight: \"50px\",\n },\n });\n};\ninterface Props extends WithStyles {}\n\nconst ClassesTimeTable = ({ classes }: Props) => {\n const htmlDoc = { __html: holidayCamp };\n\n return ;\n};\n\nexport default withStyles(styles)(ClassesTimeTable);\n","export const holidayCamp = `\n \n \n \n \n\n \n Sydney Holiday Camps | Vivian Table Tennis Academy\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 var mi_version = \"8.9.1\";\n var mi_track_user = true;\n var mi_no_track_reason = \"\";\n\n var disableStrs = [\"ga-disable-UA-224017852-1\"];\n\n /* Function to detect opted out users */\n function __gtagTrackerIsOptedOut() {\n for (var index = 0; index < disableStrs.length; index++) {\n if (document.cookie.indexOf(disableStrs[index] + \"=true\") > -1) {\n return true;\n }\n }\n\n return false;\n }\n\n /* Disable tracking if the opt-out cookie exists. */\n if (__gtagTrackerIsOptedOut()) {\n for (var index = 0; index < disableStrs.length; index++) {\n window[disableStrs[index]] = true;\n }\n }\n\n /* Opt-out function */\n function __gtagTrackerOptout() {\n for (var index = 0; index < disableStrs.length; index++) {\n document.cookie =\n disableStrs[index] +\n \"=true; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/\";\n window[disableStrs[index]] = true;\n }\n }\n\n if (\"undefined\" === typeof gaOptout) {\n function gaOptout() {\n __gtagTrackerOptout();\n }\n }\n window.dataLayer = window.dataLayer || [];\n\n window.MonsterInsightsDualTracker = {\n helpers: {},\n trackers: {},\n };\n if (mi_track_user) {\n function __gtagDataLayer() {\n dataLayer.push(arguments);\n }\n\n function __gtagTracker(type, name, parameters) {\n if (!parameters) {\n parameters = {};\n }\n\n if (parameters.send_to) {\n __gtagDataLayer.apply(null, arguments);\n return;\n }\n\n if (type === \"event\") {\n parameters.send_to = monsterinsights_frontend.ua;\n __gtagDataLayer(type, name, parameters);\n } else {\n __gtagDataLayer.apply(null, arguments);\n }\n }\n\n __gtagTracker(\"js\", new Date());\n __gtagTracker(\"set\", {\n \"developer_id.dZGIzZG\": true,\n });\n __gtagTracker(\"config\", \"UA-224017852-1\", {\n forceSSL: \"true\",\n link_attribution: \"true\",\n });\n window.gtag = __gtagTracker;\n (function () {\n /* https://developers.google.com/analytics/devguides/collection/analyticsjs/ */\n /* ga and __gaTracker compatibility shim. */\n var noopfn = function () {\n return null;\n };\n var newtracker = function () {\n return new Tracker();\n };\n var Tracker = function () {\n return null;\n };\n var p = Tracker.prototype;\n p.get = noopfn;\n p.set = noopfn;\n p.send = function () {\n var args = Array.prototype.slice.call(arguments);\n args.unshift(\"send\");\n __gaTracker.apply(null, args);\n };\n var __gaTracker = function () {\n var len = arguments.length;\n if (len === 0) {\n return;\n }\n var f = arguments[len - 1];\n if (\n typeof f !== \"object\" ||\n f === null ||\n typeof f.hitCallback !== \"function\"\n ) {\n if (\"send\" === arguments[0]) {\n var hitConverted,\n hitObject = false,\n action;\n if (\"event\" === arguments[1]) {\n if (\"undefined\" !== typeof arguments[3]) {\n hitObject = {\n eventAction: arguments[3],\n eventCategory: arguments[2],\n eventLabel: arguments[4],\n value: arguments[5] ? arguments[5] : 1,\n };\n }\n }\n if (\"pageview\" === arguments[1]) {\n if (\"undefined\" !== typeof arguments[2]) {\n hitObject = {\n eventAction: \"page_view\",\n page_path: arguments[2],\n };\n }\n }\n if (typeof arguments[2] === \"object\") {\n hitObject = arguments[2];\n }\n if (typeof arguments[5] === \"object\") {\n Object.assign(hitObject, arguments[5]);\n }\n if (\"undefined\" !== typeof arguments[1].hitType) {\n hitObject = arguments[1];\n if (\"pageview\" === hitObject.hitType) {\n hitObject.eventAction = \"page_view\";\n }\n }\n if (hitObject) {\n action =\n \"timing\" === arguments[1].hitType\n ? \"timing_complete\"\n : hitObject.eventAction;\n hitConverted = mapArgs(hitObject);\n __gtagTracker(\"event\", action, hitConverted);\n }\n }\n return;\n }\n\n function mapArgs(args) {\n var arg,\n hit = {};\n var gaMap = {\n eventCategory: \"event_category\",\n eventAction: \"event_action\",\n eventLabel: \"event_label\",\n eventValue: \"event_value\",\n nonInteraction: \"non_interaction\",\n timingCategory: \"event_category\",\n timingVar: \"name\",\n timingValue: \"value\",\n timingLabel: \"event_label\",\n page: \"page_path\",\n location: \"page_location\",\n title: \"page_title\",\n };\n for (arg in args) {\n if (\n !(!args.hasOwnProperty(arg) || !gaMap.hasOwnProperty(arg))\n ) {\n hit[gaMap[arg]] = args[arg];\n } else {\n hit[arg] = args[arg];\n }\n }\n return hit;\n }\n\n try {\n f.hitCallback();\n } catch (ex) {}\n };\n __gaTracker.create = newtracker;\n __gaTracker.getByName = newtracker;\n __gaTracker.getAll = function () {\n return [];\n };\n __gaTracker.remove = noopfn;\n __gaTracker.loaded = true;\n window[\"__gaTracker\"] = __gaTracker;\n })();\n } else {\n console.log(\"\");\n (function () {\n function __gtagTracker() {\n return null;\n }\n\n window[\"__gtagTracker\"] = __gtagTracker;\n window[\"gtag\"] = __gtagTracker;\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 \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 \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
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n \n \n
\n \n
\n
\n
\n
\n
\n
\n \n
\n \n Sydney's Best School Holiday Camps\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 School Holiday camps are the perfect way to\n spend school holidays for kids. Camps will\n offer activities such as outdoor sports,\n archery, and more. They can also get a break\n and do some arts and crafts.\n

\n

\n If you’re looking for holiday camps all around\n the year in Sydney  for your kids, we’ve\n got you covered. We offer some of Sydney’s\n best holiday camp options.\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 School Holiday Programs In Sydney\n \n
\n
\n \n
\n \n

\n There are plenty of school holiday activities\n programs in Sydney that will keep the kids\n entertained. Some of the most popular programs\n include art classes, swimming lessons, sports\n clinics, sports and recreation camps, and\n drama workshops.\n

\n
\n
\n
\n \n
\n \n

\n Some of the best school holiday activities\n programs in Sydney include:\n

\n
    \n
  • \n Art classes: These classes allow\n children to explore their creative side and\n express themselves through art.\n
  • \n
  • \n Swimming lessons: Swimming is a great\n way to stay active and healthy, and it is\n also a vital life skill.\n
  • \n
  • \n Sports and recreation camps: These\n camps provide children with a fun and active\n way to spend their holiday.\n
  • \n
  • \n Drama workshops: These workshops\n allow children to explore their creative\n side and have fun while acting.\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 Sport and Recreation Camps\n \n
\n
\n \n
\n \n

\n Sport and recreation camps in NSW Sydney,\n which offer a variety of camp ideas for\n children . Camps are available for a range of\n different sports, including cricket, football,\n tennis, netball, and more.\n

\n
\n \n \n \n
\n \n

\n If you’re looking for a fun-filled holiday\n camp for your kids, look no further than these\n excellent options in new south wales. From\n sports to performing arts, these camps are\n sure to keep your child entertained and\n engaged. In addition, they also include social\n activities, such as movie nights and Pizza\n Fridays, so children can make new friends and\n have a great time. These camps offer children\n the opportunity to learn from experienced\n coaches and improve their talent in a fun and\n supportive environment.\n

\n
\n \n \n \n \n \n \n \n \n \n
\n
\n \n \n
\n \n
\n \n Sport and Recreation Camps\n \n
\n
\n \n
\n \n

\n Sport and recreation camps in NSW Sydney,\n which offer a variety of camp ideas for\n children . Camps are available for a range of\n different sports, including cricket, football,\n tennis, netball, and more.\n

\n
\n
\n
\n \n
\n \n

\n If you’re looking for a fun-filled holiday\n camp for your kids, look no further than these\n excellent options in new south wales. From\n sports to performing arts, these camps are\n sure to keep your child entertained and\n engaged. In addition, they also include social\n activities, such as movie nights and Pizza\n Fridays, so children can make new friends and\n have a great time. These camps offer children\n the opportunity to learn from experienced\n coaches and improve their talent in a fun and\n supportive environment.\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 Holiday Care Programs\n \n
\n
\n \n
\n \n

\n There are a number of great sports and\n recreation camps available in Sydney. These\n camps offer children the opportunity to\n participate in a range of different sports and\n recreational activities,\n

\n
\n
\n
\n \n
\n \n

\n Sydney’s holiday care programs are the perfect\n place for children to learn new skills, meet\n new friends, and have heaps of fun. Vivian\n Table Tennis Academy camps cater to children\n of all ages and ability levels, with programs\n available in a range of sports, including\n football, soccer, cricket, basketball,\n netball, table tennis, AFL, and more.\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 Camp Australia Holiday Programs\n \n
\n
\n \n
\n \n

\n The Vivian\n Table Tennis\n Academy camp in Sydney is one of the leading\n provider of sports and recreation camps. Our\n sports camps are the perfect way for kids to\n improve their sporting skills and have a heap\n of fun! We offer Camp Australia Holiday\n Programs and are the ideal way to keep kids\n entertained and refreshed during the school\n holidays.\n

\n
\n \n \n \n
\n \n

\n Our camps offer a range of activities,\n including sports, arts and crafts, and games.\n

\n
\n \n \n \n
\n \n

\n At our camps, kids will have the opportunity\n to:\n

\n

\n – Improve their sporting skills
– Make\n new friends
– Explore their interests
–\n Learn
– Have fun!\n

\n
\n \n \n \n \n \n \n \n \n \n
\n
\n \n \n
\n \n
\n \n Camp Australia Holiday Programs\n \n
\n
\n \n
\n \n

\n The Vivian Table Tennis Academy camp in Sydney\n is one of the leading provider of sports and\n recreation camps. Our sports camps are the\n perfect way for kids to improve their sporting\n skills and have a heap of fun! We offer Camp\n Australia Holiday Programs and are the ideal\n way to keep kids entertained and refreshed\n during the school holidays.\n

\n
\n
\n
\n \n
\n \n

\n Our camps offer a range of activities,\n including sports, arts and crafts, and games.\n

\n
\n \n \n \n
\n \n

\n At our camps, kids will have the opportunity\n to:\n

\n

\n – Improve their sporting skills
– Make\n new friends
– Explore their interests
–\n Learn
– Have fun!\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 Camping in Summer: Best Summer Camps in Sydney\n \n
\n
\n \n
\n \n

\n Summer camps in Sydney are great for both kids\n and parents. Camps are a great way for kids to\n have fun and explore their creativity for a\n summer. Camps also provide a great opportunity\n for parents to have a break from taking care\n of the kids. Camps will provide a safe and\n secure environment where kids are free from\n daily responsibilities. Camps will also\n provide activities and instruction that will\n help kids grow and develop while they have a\n lot of fun.\n

\n
\n
\n
\n \n
\n \n

\n If you’re looking for a summer camp in Sydney,\n you’ve come to the right place. Our\n comprehensive directory of summer camps in\n Sydney will help you find the perfect camp for\n your child.\n

\n
\n \n \n \n \n \n \n \n
\n \n

\n There are a few great camping spots near\n Sydney, but if you’re looking for a more\n organized camping experience, there are a few\n great holiday camps around Sydney that will\n take care of everything for you.\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 Winter Camps Australia\n \n
\n
\n \n
\n \n

\n Winter Camps Australia offers a wide range of\n options for your child. The camps can be set\n up in various locations around the country, so\n no matter where you are from, you’ll be able\n to find a camp to suit your need. Activities\n vary by location but often include skiing,\n snowboarding, sledding, and more.\n

\n
\n \n \n \n
\n \n

\n – Winter Camp helps your kid to Get\n active!\n

\n
\n \n \n \n
\n \n

\n The camps are designed to get your child up\n and active, enjoying the winter weather. The\n combination of physical activity and fresh air\n is great for the development of young minds\n and bodies.\n

\n
\n \n \n \n
\n \n

– Make friends!

\n
\n \n \n \n
\n \n

\n The camps provide a perfect opportunity for\n children to make new friends. They’ll be able\n to bond with others over their love of winter\n sports and activities and create memories that\n will last a lifetime.\n

\n
\n \n \n \n \n \n \n \n \n \n
\n
\n \n \n
\n \n
\n \n Winter Camps Australia\n \n
\n
\n \n
\n \n

\n Winter Camps Australia offers a wide range of\n options for your child. The camps can be set\n up in various locations around the country, so\n no matter where you are from, you’ll be able\n to find a camp to suit your need. Activities\n vary by location but often include skiing,\n snowboarding, sledding, and more.\n

\n
\n
\n
\n \n
\n \n

\n – Winter Camp helps your kid to Get\n active!\n

\n
\n \n \n \n
\n \n

\n The camps are designed to get your child up\n and active, enjoying the winter weather. The\n combination of physical activity and fresh air\n is great for the development of young minds\n and bodies.\n

\n
\n \n \n \n
\n \n

– Make friends!

\n
\n \n \n \n
\n \n

\n The camps provide a perfect opportunity for\n children to make new friends. They’ll be able\n to bond with others over their love of winter\n sports and activities and create memories that\n will last a lifetime.\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 Spring Camps\n \n
\n
\n \n
\n \n

\n Spring is the time for a new beginning. With\n the new season comes new opportunities, and\n one of the best opportunities to get outside\n and have fun is by – Spring Camps!\n

\n
\n
\n
\n \n
\n \n

\n Spring Camps are a fantastic way for your kids\n to explore nature, release some energy, and\n make new friends. Vivian Table Tennis Academy\n Spring Camps in Sydney include everything from\n day camps to overnight camps, and they all\n teach children about the natural world and its\n many secrets. Activities are supervised by\n experienced and qualified instructors, and\n they include everything from guided hikes to\n arts and crafts.\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 Autumn Camps in Sydney\n \n
\n
\n \n
\n \n

\n Autumn camps in Sydney are the perfect way to\n get your children out of the house and enjoy\n the crisp and fresh air. With the colder\n weather that is just around the corner, it is\n important to make sure your children are kept\n busy and entertained. Vivian Table Tennis\n Academy autumn camp in Sydney offers a variety\n of different activities for children of all\n ages, making it easy to find the perfect one\n for your child. From bushwalking and cycling\n to visiting local attractions and going on day\n trips are all offered by autumn camps in\n Sydney.\n

\n
\n \n \n \n
\n \n

\n With Holiday Camps all around the year there\n are many options for the\n things to do during the school holidays. Vivian Table Tennis Academy understands\n your needs and will assist you in finding the\n best holiday camps in Sydney.\n

\n
\n \n \n \n \n \n \n \n \n \n
\n
\n \n \n
\n \n
\n \n Autumn Camps in Sydney\n \n
\n
\n \n
\n \n

\n Autumn camps in Sydney are the perfect way to\n get your children out of the house and enjoy\n the crisp and fresh air. With the colder\n weather that is just around the corner, it is\n important to make sure your children are kept\n busy and entertained. Vivian Table Tennis\n Academy autumn camp in Sydney offers a variety\n of different activities for children of all\n ages, making it easy to find the perfect one\n for your child. From bushwalking and cycling\n to visiting local attractions and going on day\n trips are all offered by autumn camps in\n Sydney.\n

\n
\n
\n
\n \n
\n \n

\n With Holiday Camps all around the year there\n are many options for the\n things to do during the school\n holidays. Vivian Table Tennis Academy understands\n your needs and will assist you in finding the\n best holiday camps in Sydney.\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 \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n`;\n","import { Grid, Paper } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport React, { useContext } from \"react\";\nimport { holidayCampsTimeTableHtml } from \"../htmls/holidayCampsTimeTableHtml\";\n\nconst styles = (theme: Theme) => {\n return createStyles({\n main: {\n padding: theme.spacing(2),\n textAlign: \"center\",\n },\n clsImage: {\n maxWidth: \"300px\",\n },\n container: {\n marginLeft: \"50px\",\n marginRight: \"50px\",\n },\n });\n};\ninterface Props extends WithStyles {}\n\nconst HolidayCampsTimeTable = ({ classes }: Props) => {\n const htmlDoc = { __html: holidayCampsTimeTableHtml };\n\n return ;\n};\n\nexport default withStyles(styles)(HolidayCampsTimeTable);\n","export const holidayCampsTimeTableHtml = `\n\n\n\n\n\n\t\n\tTime Table | Table Tennis Training | Vivian Table Tennis Academy\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\n\n\n\n\n\n\t\t\n\t\t\t\t\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\n\n\t\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\t\t\n\t\t\n \n\t
\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t
\n\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Holiday Camps Classes Timetable

\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t \n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t
\n\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t
\n\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\n\t\t\t\t
\n\t\t
\n\t\t\n\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t

Ready for your child to reach their potential?

\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n
\n \n
\n\n
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t
\n\t\t\t\t\t
\n\t\t
\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 { Paper } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport { RowParams } from \"@material-ui/data-grid\";\nimport React from \"react\";\nimport { HolidayCourse } from \"../generated/graphql\";\nimport CustomizedDataGrid from \"./CustomizedDataGrid\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n container: {\n height: \"40vh\",\n overflowY: \"auto\",\n width: \"95%\",\n margin: \"8px\",\n },\n root: {\n backgroundColor: \"yellow\",\n },\n });\n\nexport interface Props extends WithStyles {\n courses: HolidayCourse[];\n onSelectedCourse?: (selectedCourse: HolidayCourse) => void;\n}\n\nexport interface IHolidayCourseRow {\n id: string;\n date: string;\n time: string;\n}\n\nfunction HolidayCourseList(props: Props) {\n const { classes, courses, onSelectedCourse } = props;\n const columns = [\n { field: \"date\", headerName: \"Date\", width: 170 },\n { field: \"time\", headerName: \"Time\", width: 170 },\n { field: \"price\", headerName: \"Price\", width: 100 },\n { field: \"capacity\", headerName: \"Capacity\", width: 100 },\n { field: \"status\", headerName: \"Status\", width: 80 },\n ];\n\n const getCourseDate = ({ startDate, endDate }: HolidayCourse) =>\n `${startDate} - ${endDate}`;\n const getCourseTime = ({ startTime, endTime }: HolidayCourse) =>\n `${startTime} - ${endTime}`;\n\n const rows: IHolidayCourseRow[] = courses.map((course: HolidayCourse) => ({\n id: course.id,\n date: getCourseDate(course),\n time: getCourseTime(course),\n price: `$${course.price}`,\n capacity: course.capacity,\n status: course.status,\n }));\n\n const handleRowClick = ({ rowIndex }: RowParams) => {\n if (onSelectedCourse) {\n onSelectedCourse(courses[rowIndex]);\n }\n };\n\n return (\n \n \n \n );\n}\n\nexport default withStyles(styles)(HolidayCourseList);\n","import {\n Button,\n Dialog,\n DialogContent,\n Grid,\n Paper,\n Typography,\n withStyles,\n} from \"@material-ui/core\";\nimport { createStyles, Theme, WithStyles } from \"@material-ui/core/styles\";\nimport { DataGrid, RowSelectedParams } from \"@material-ui/data-grid\";\nimport React, { useState } from \"react\";\nimport { EGender, EnrolmentResult } from \"../generated/graphql\";\nimport formatDate from \"../utils/formatDate\";\nimport getPlayerName from \"../utils/getPlayerName\";\nimport DialogTitle from \"./DialogTitle\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n container: {\n height: \"40vh\",\n overflowY: \"auto\",\n width: \"95%\",\n },\n });\n\nexport interface IHolidayEnrolmentRow {\n id: string;\n firstName: string;\n lastName: string;\n dob: string;\n gender: EGender;\n school: string;\n disability: boolean;\n parentId: string;\n}\n\ninterface Props extends WithStyles {\n enrolmentData: any;\n}\n\nconst getRowsColumns = (enrolmentData: any) => {\n const { enrolments, players, courses } = enrolmentData;\n const rows = enrolments.map((enrolment: EnrolmentResult) => {\n const { id, playerIds, courseIds, enrolDate } = enrolment.enrolment;\n const { status, reference } = enrolment.payment;\n const playersName = players\n .filter((p: any) => playerIds.indexOf(p.id) >= 0)\n .map(getPlayerName)\n .join(\",\");\n\n return {\n id,\n playersName,\n enrolDate: formatDate(enrolDate),\n status,\n };\n });\n const columns = [\n { field: \"playersName\", headerName: \"Players\", width: 300 },\n { field: \"enrolDate\", headerName: \"Enrol date\", width: 140 },\n { field: \"status\", headerName: \"Payment\", width: 120 },\n ];\n return {\n rows,\n columns,\n };\n};\n\nconst HolidayEnrolmentList = ({ classes, enrolmentData }: Props) => {\n const { enrolments } = enrolmentData;\n const { rows, columns } = getRowsColumns(enrolmentData);\n const [showDialog, setShowDialog] = useState(false);\n const [selectedEnrolment, setSelectedEnrolment] = useState<\n EnrolmentResult | undefined\n >(undefined);\n const handleRowSelected = (rowData: RowSelectedParams) => {\n const foundElement = enrolments.find(\n (x: any) => x.enrolment.id === rowData.data.id\n );\n if (foundElement) {\n setSelectedEnrolment(foundElement);\n setShowDialog(true);\n }\n };\n\n const handleCloseDialog = () => {\n setShowDialog(false);\n };\n\n const getSelectedPlayersName = () => {\n return enrolmentData.players\n .filter(\n (p: any) =>\n selectedEnrolment &&\n selectedEnrolment?.enrolment?.playerIds?.indexOf(p.id) >= 0\n )\n .map(getPlayerName)\n .join(\",\");\n };\n\n return (\n \n {enrolments.length > 0 && (\n \n )}\n \n \n Enrolment detail\n \n \n \n \n \n {\" \"}\n Players: {getSelectedPlayersName()}\n \n \n \n {selectedEnrolment?.enrolment.courseIds.map((id) => {\n const foundEnrolmentData = enrolmentData.courses.find(\n (c: any) => c.id === id\n );\n const detailCourse = enrolmentData?.courses.find(\n (c: any) => c.id === id\n );\n return (\n \n \n \n Holiday course: from {foundEnrolmentData?.startDate} to{\" \"}\n {foundEnrolmentData?.endDate} {detailCourse?.startTime}{\" \"}\n to {detailCourse?.endTime}\n \n \n \n );\n })}\n \n \n \n {\" \"}\n Fee: ${selectedEnrolment?.payment.amount}\n \n \n \n \n Status: {selectedEnrolment?.payment.status}\n \n \n \n \n Phone: {selectedEnrolment?.user?.phone}\n \n \n \n \n Email: {selectedEnrolment?.user?.email}\n \n \n\n \n \n Close\n \n \n \n \n \n \n );\n};\n\nexport default withStyles(styles)(HolidayEnrolmentList);\n","import {\n Button,\n Checkbox,\n Dialog,\n DialogContent,\n Grid,\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n Typography,\n} from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n WithStyles,\n withStyles,\n} from \"@material-ui/core/styles\";\nimport { DateTime } from \"luxon\";\nimport React, { Fragment, useContext, useEffect, useState } from \"react\";\nimport { useImmer } from \"use-immer\";\nimport { addEnrolment, getEnrolments } from \"../api/enrolment.service\";\nimport { getHolidayCourses } from \"../api/holidayCourse.service\";\nimport { getPlayers } from \"../api/player.service\";\nimport HolidayCourseList from \"../components/HolidayCourseList\";\nimport { AuthContext } from \"../context/AuthContext\";\nimport { LoadingContext } from \"../context/LoadingContext\";\nimport { NotificationContext } from \"../context/NotificationContext\";\nimport EmptyInfo from \"../EmptyInfo\";\nimport {\n EEnrolmentType,\n ERole,\n HolidayCourse,\n Player,\n} from \"../generated/graphql\";\nimport getPlayerName from \"../utils/getPlayerName\";\nimport DialogTitle from \"./DialogTitle\";\nimport FormContainer from \"./FormContainer\";\nimport FormRow from \"./FormRow\";\nimport FormTitle from \"./FormTitle\";\nimport HolidayEnrolmentList from \"./HolidayEnrolmentList\";\nimport PaymentForm from \"./PaymentForm\";\nimport { applyPaymentAmount } from \"../utils/paymentAmount\";\nconst styles = (theme: Theme) =>\n createStyles({\n container: {},\n paperWidthSm: {\n maxWidth: \"80em\",\n },\n button: {\n marginTop: theme.spacing(1),\n marginRight: theme.spacing(1),\n },\n actionsContainer: {\n marginBottom: theme.spacing(2),\n },\n resetContainer: {\n padding: theme.spacing(3),\n },\n });\n\nexport interface Props extends WithStyles {}\n\nconst steps = [\"Please select player\", \"Please select a course\", \"Enrol now\"];\n\nfunction HolidayCourseEnrolment(props: Props) {\n const { classes } = props;\n const [activeStep, setActiveStep] = useState(0);\n const { userProfile } = useContext(AuthContext);\n const [openEnrolmentDlg, setOpenEnrolmentDlg] = useState(false);\n const { showLoading, hideLoading } = useContext(LoadingContext);\n const { showSuccessNotification, showErrorNotification } =\n useContext(NotificationContext);\n const [loadedData, setLoadedData] = useState(false);\n const handleClose = () => {\n setOpenEnrolmentDlg(false);\n };\n\n const handleSubmit = async () => {\n // const paymentAmount = `${getTotalPrice(enrolmentData)}`;\n const courseIds = enrolmentData.selectedCourses?.map((c) => c.id);\n const playerIds = enrolmentData.selectedPlayers.map((p) => p.id);\n\n const addEnrolmentData = {\n type: EEnrolmentType.Holiday,\n userId: userProfile?.id,\n courseIds,\n playerIds,\n paymentAmount: `${\n enrolmentData.selectedCourses[0].price *\n enrolmentData.selectedPlayers?.length\n }`,\n };\n const result = await addEnrolment(addEnrolmentData);\n // showSuccessNotification(\"Enroled\");\n setOpenEnrolmentDlg(false);\n // re-load enrolments\n const enrolments = await getEnrolments(\n userProfile?.role === ERole.Admin\n ? {}\n : { userId: userProfile?.id, type: EEnrolmentType.Holiday }\n );\n setEnrolmentData((draft) => {\n draft.enrolments.length = 0;\n draft.enrolments.push(...enrolments);\n });\n return result;\n };\n\n const [enrolmentData, setEnrolmentData] = useImmer<{\n courses: HolidayCourse[];\n players: any[];\n enrolments: any[];\n selectedPlayers: any[];\n selectedCourses: HolidayCourse[];\n }>({\n courses: [],\n players: [],\n enrolments: [],\n selectedPlayers: [],\n selectedCourses: [],\n });\n\n const [selectedPlayerList, setSelectedPlayerList] = useImmer<\n {\n id: string;\n selected: boolean;\n }[]\n >([]);\n\n const retrieveData = async () => {\n showLoading();\n setLoadedData(false);\n const param =\n userProfile?.role === ERole.Admin\n ? {}\n : { userId: userProfile?.id, type: EEnrolmentType.Holiday };\n const parentId = userProfile?.role === ERole.Admin ? \"\" : userProfile?.id;\n const [courses, players, enrolments] = await Promise.all([\n getHolidayCourses(),\n getPlayers({ parentId }),\n getEnrolments(param),\n ]);\n\n setEnrolmentData((draft) => {\n if (players) {\n draft.players = players;\n }\n if (enrolments) {\n draft.enrolments = enrolments;\n }\n draft.courses = courses.courses;\n hideLoading();\n setLoadedData(false);\n });\n };\n\n useEffect(() => {\n retrieveData();\n }, []);\n\n const handleSelectedCourse = (course: HolidayCourse) => {\n setEnrolmentData((draft) => {\n draft.selectedCourses = [course];\n });\n };\n const selectCourseStep = () => (\n <>\n \n \n );\n\n const handleSelectdPlayer = (player: Player) => (evt: any) => {\n setSelectedPlayerList((draft) => {\n const foundPlayer = draft.find((p) => p.id === player.id);\n if (foundPlayer) {\n foundPlayer.selected = !foundPlayer.selected;\n } else {\n draft.push({\n id: player.id,\n selected: true,\n });\n }\n setEnrolmentData((x) => {\n x.selectedPlayers = x.players.filter((xx) => {\n const f = draft.find((yy) => yy.id === xx.id && yy.selected);\n return !!f;\n });\n });\n });\n };\n\n const isPlayerSelected = (player: Player) =>\n // !!selectedPlayerList.find((p) => p.id === player.id && p.selected);\n !!enrolmentData.selectedPlayers.find((p) => p.id === player.id);\n\n const selectPlayerStep = () => (\n \n {enrolmentData.players.map((player: Player) => (\n \n \n \n \n \n \n ))}\n \n );\n\n function getStepContent(step: number) {\n switch (step) {\n case 0:\n return selectPlayerStep();\n case 1:\n return selectCourseStep();\n case 2:\n // return enrolmentDetailStep();\n return ;\n default:\n return \"Unknown step\";\n }\n }\n\n const handleStepClick = (stepIndex: number) => () => {\n setActiveStep(stepIndex);\n };\n const isPlayersSelected = enrolmentData.selectedPlayers.length > 0;\n const isCourseSelected = enrolmentData.selectedCourses?.length > 0;\n\n const canBeEnroled = isCourseSelected && isPlayersSelected;\n return (\n \n \n \n \n \n {enrolmentData.enrolments?.length > 0 && (\n \n )}\n {enrolmentData?.enrolments?.length === 0 && (\n \n )}\n \n {userProfile?.role === ERole.Parent && (\n \n {\n // clear all the enrolmentData\n setEnrolmentData((draft) => {\n draft.selectedCourses = [];\n draft.selectedPlayers = [];\n });\n setOpenEnrolmentDlg(true);\n }}\n >\n Enrol a holiday course\n \n \n )}\n \n \n {\n \n \n Enrol\n \n \n \n \n Please select players\n {selectPlayerStep()}\n \n \n \n Please select a holiday course you want to enrol\n \n {selectCourseStep()}\n \n \n {canBeEnroled && (\n {\n return handleSubmit();\n }}\n onResult={({ succeed, paymentId }) => {\n if (succeed && paymentId) {\n }\n }}\n >\n )}\n \n \n \n \n }\n \n );\n}\n\nexport default withStyles(styles)(HolidayCourseEnrolment);\n","import { Button, Grid, TextField } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport { useFormik } from \"formik\";\nimport React, { useContext } from \"react\";\nimport * as yup from \"yup\";\nimport {\n addHolidayCourse,\n deleteHolidayCourse,\n setHolidayCourseStatus,\n updateHolidayCourse,\n} from \"../api/holidayCourse.service\";\nimport { LoadingContext } from \"../context/LoadingContext\";\nimport { NotificationContext } from \"../context/NotificationContext\";\nimport {\n AddHolidayCourseInput,\n AddHolidayCourseResp,\n ECourseStatus,\n HolidayCourse,\n UpdateHolidayCourseInput,\n UpdateHolidayCourseResp,\n} from \"../generated/graphql\";\nimport FormContainer from \"./FormContainer\";\nimport FormRow from \"./FormRow\";\n\nconst styles = (theme: Theme) => createStyles({});\n\nexport interface Props extends WithStyles {\n onClose: () => void;\n onNewCourse: (newCourse: AddHolidayCourseResp) => void;\n onCourseUpdated: (courseUpdated: UpdateHolidayCourseResp) => void;\n onCourseDeleted: (courseId: string) => void;\n onCourseStatusUpdated: (course: HolidayCourse | null | undefined) => void;\n course: HolidayCourse | null;\n}\n\nfunction HolidayCourseDetail({\n classes,\n onClose,\n onNewCourse,\n course,\n onCourseUpdated,\n onCourseDeleted,\n onCourseStatusUpdated,\n}: Props) {\n const isNewCourse = !!!course;\n\n const initialValues = {\n description: course?.description ?? \"Spring school holiday\",\n startDate: course?.startDate ?? \"2022-02-11\",\n endDate: course?.endDate ?? \"2022-03-11\",\n startTime: course?.startTime ?? \"09:30:00\",\n endTime: course?.endTime ?? \"15:30:00\",\n price: course?.price ?? 300,\n capacity: course?.capacity ?? 20,\n };\n const { showLoading, hideLoading } = useContext(LoadingContext);\n const { showErrorNotification, showSuccessNotification } =\n useContext(NotificationContext);\n\n const validationSchema = yup.object().shape({\n description: yup.string().required(\"Enter your description\"),\n capacity: yup.number().required(\"Enter capacity\"),\n price: yup.number().required(\"Enter price\"),\n });\n const { values, handleSubmit, handleChange, setFieldValue } = useFormik({\n initialValues,\n validationSchema,\n onSubmit: async (v) => {\n const {\n startDate,\n endDate,\n startTime,\n endTime,\n description,\n price: priceText,\n capacity: capacityText,\n } = v;\n\n // convert course days from objects into array\n const price = Number(priceText);\n const capacity = Number(capacityText);\n const courseData = [];\n try {\n showLoading();\n if (isNewCourse) {\n const addCourseParam: AddHolidayCourseInput = {\n courseData: [\n {\n description,\n startDate,\n endDate,\n startTime,\n endTime,\n price,\n capacity,\n },\n ],\n };\n const newCourse = await addHolidayCourse(addCourseParam);\n showSuccessNotification(\"Course saved\");\n if (newCourse) {\n onNewCourse(newCourse);\n }\n } else {\n const updateCourseParam: UpdateHolidayCourseInput = {\n courseId: course?.id,\n courseData: {\n description,\n startDate,\n endDate,\n startTime,\n endTime,\n price,\n capacity,\n },\n };\n const updatedCourse = await updateHolidayCourse(updateCourseParam);\n showSuccessNotification(\"Course updated\");\n if (updatedCourse && updatedCourse.courses?.length > 0) {\n onCourseUpdated(updatedCourse);\n }\n }\n onClose();\n } catch (e) {\n showErrorNotification(\"please try again later\");\n } finally {\n hideLoading();\n }\n },\n });\n\n const handleStartDateChange = (e: any) => {\n const startDate = e.target.value;\n setFieldValue(`startDate`, startDate);\n handleChange(e);\n };\n\n const handleDeleteCourse = async () => {\n await deleteHolidayCourse({\n courseId: course?.id,\n });\n onCourseDeleted(course?.id);\n onClose();\n };\n\n const handleSetCourseStatus = (currentStatus: ECourseStatus) => async () => {\n const updatedCourse = await setHolidayCourseStatus({\n courseId: course?.id,\n status:\n currentStatus == ECourseStatus.Active\n ? ECourseStatus.Inactive\n : ECourseStatus.Active,\n });\n onCourseStatusUpdated(updatedCourse);\n onClose();\n };\n\n const handleEndDateChange = (e: any) => {\n const endDate = e.target.value;\n setFieldValue(\"endDate\", endDate);\n handleChange(e);\n };\n\n const handleTimeChange = (fieldName: string) => (e: any) => {\n const tm = e.target.value;\n setFieldValue(fieldName, tm);\n handleChange(e);\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 {isNewCourse ? \"Save a new course\" : \"Update course\"}\n \n \n {course && (\n \n \n {\"Delete course\"}\n \n \n )}\n {course && (\n \n \n {course.status === ECourseStatus.Active\n ? \"Disable this course\"\n : \"Enable this course\"}\n \n \n )}\n \n \n \n
\n );\n}\n\nexport default withStyles(styles)(HolidayCourseDetail);\n","import {\n Button,\n Dialog,\n DialogContent,\n Grid,\n Typography,\n} from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport React, { useContext, useEffect, useState } from \"react\";\nimport { useImmer } from \"use-immer\";\nimport { getHolidayCourses } from \"../api/holidayCourse.service\";\nimport { LoadingContext } from \"../context/LoadingContext\";\nimport EmptyInfo from \"../EmptyInfo\";\nimport {\n AddHolidayCourseResp,\n HolidayCourse,\n UpdateHolidayCourseResp,\n} from \"../generated/graphql\";\nimport DialogTitle from \"./DialogTitle\";\nimport FormContainer from \"./FormContainer\";\nimport FormRow from \"./FormRow\";\nimport FormTitle from \"./FormTitle\";\nimport HolidayCourseDetail from \"./HolidayCourseDetail\";\nimport HolidayCourseList from \"./HolidayCourseList\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n paperWidthSm: {\n maxWidth: \"80em\",\n },\n });\n\nexport interface Props extends WithStyles {}\n\nfunction HolidayCourses(props: Props) {\n const { classes } = props;\n const { showLoading, hideLoading } = useContext(LoadingContext);\n\n const [addNewCourse, setAddNewCourse] = useState(false);\n const [courses, setCourses] = useImmer([]);\n const [selectedCourse, setSelectedCourse] = useState(\n null\n );\n\n const handlleNewCourse = (newCourse: AddHolidayCourseResp) => {\n setCourses((draft) => {\n draft.push(...newCourse.courses);\n });\n };\n\n const handleCourseUpdated = (updatedCourse: UpdateHolidayCourseResp) => {\n setCourses((draft) => {\n updatedCourse.courses?.forEach((c) => {\n const idx = draft.findIndex((dc) => dc.id === c.id);\n if (idx >= 0) {\n draft[idx] = c;\n }\n });\n });\n };\n\n const handleSetCourseUpdated = (\n updatedCourse: HolidayCourse | undefined | null\n ) => {\n setCourses((draft) => {\n const idx = draft.findIndex((dc) => (dc.id = updatedCourse?.id));\n if (idx >= 0 && updatedCourse) {\n draft[idx] = updatedCourse;\n }\n });\n };\n\n const handleCourseDeleted = (courseId: string) => {\n setCourses((draft) => {\n const foundIdx = draft.findIndex((c) => c.id === courseId);\n if (foundIdx !== -1) {\n draft.splice(foundIdx, 1);\n }\n });\n };\n\n const handleClose = () => {\n setAddNewCourse(false);\n setSelectedCourse(null);\n };\n const handleAddNewHolidayCourse = () => {\n setAddNewCourse(true);\n };\n\n const retrieveHolidayCourses = async () => {\n showLoading();\n\n try {\n const courses = (await getHolidayCourses())?.courses;\n setCourses((draft) => {\n draft.length = 0;\n if (courses) {\n draft.push(...courses);\n }\n });\n } finally {\n hideLoading();\n }\n };\n\n useEffect(() => {\n retrieveHolidayCourses();\n }, []);\n\n const handleSelectedCourse = (course: HolidayCourse) => {\n setSelectedCourse(course);\n };\n\n const getDialogTitle = () => (\n \n {selectedCourse ? \"Update course\" : \"Add a new Course\"}\n \n );\n\n return (\n \n \n \n \n \n {courses.length > 0 && (\n \n )}\n {courses.length === 0 && (\n \n )}\n \n \n \n Add a new holiday course\n \n \n \n \n \n {getDialogTitle()}\n \n \n \n \n \n );\n}\n\nexport default withStyles(styles)(HolidayCourses);\n","import { Grid, Paper } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport React, { useContext } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { AuthContext } from \"../context/AuthContext\";\nimport ERoutePath from \"../routes/ERoutePath\";\nimport { firstPage } from \"../htmls/firstPage\";\n\nconst styles = (theme: Theme) => {\n return createStyles({\n main: {\n padding: theme.spacing(2),\n textAlign: \"center\",\n },\n clsImage: {\n maxWidth: \"300px\",\n },\n container: {\n marginLeft: \"50px\",\n marginRight: \"50px\",\n },\n });\n};\ninterface Props extends WithStyles {}\n\nconst HomePage = ({ classes }: Props) => {\n // const bannerTitle1 = \"Vivian Table Tennis Academy\";\n // const { isAuthenticated, userProfile } = useContext(AuthContext);\n // const history = useHistory();\n // if (isAuthenticated) {\n // if (!userProfile) {\n // history.push(ERoutePath.profile);\n // } else {\n // history.push(ERoutePath.enrolments);\n // }\n // }\n\n const htmlDoc = { __html: firstPage };\n\n return ;\n};\n\nexport default withStyles(styles)(HomePage);\n","export const firstPage = `\n\n \n \n \n \n\n \n \n Vivian Tan Table Tennis Academy | TT Coaching |Holiday Camps Sydney\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 var mi_version = \"8.9.1\";\n var mi_track_user = true;\n var mi_no_track_reason = \"\";\n\n var disableStrs = [\"ga-disable-UA-224017852-1\"];\n\n /* Function to detect opted out users */\n function __gtagTrackerIsOptedOut() {\n for (var index = 0; index < disableStrs.length; index++) {\n if (document.cookie.indexOf(disableStrs[index] + \"=true\") > -1) {\n return true;\n }\n }\n\n return false;\n }\n\n /* Disable tracking if the opt-out cookie exists. */\n if (__gtagTrackerIsOptedOut()) {\n for (var index = 0; index < disableStrs.length; index++) {\n window[disableStrs[index]] = true;\n }\n }\n\n /* Opt-out function */\n function __gtagTrackerOptout() {\n for (var index = 0; index < disableStrs.length; index++) {\n document.cookie =\n disableStrs[index] +\n \"=true; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/\";\n window[disableStrs[index]] = true;\n }\n }\n\n if (\"undefined\" === typeof gaOptout) {\n function gaOptout() {\n __gtagTrackerOptout();\n }\n }\n window.dataLayer = window.dataLayer || [];\n\n window.MonsterInsightsDualTracker = {\n helpers: {},\n trackers: {},\n };\n if (mi_track_user) {\n function __gtagDataLayer() {\n dataLayer.push(arguments);\n }\n\n function __gtagTracker(type, name, parameters) {\n if (!parameters) {\n parameters = {};\n }\n\n if (parameters.send_to) {\n __gtagDataLayer.apply(null, arguments);\n return;\n }\n\n if (type === \"event\") {\n parameters.send_to = monsterinsights_frontend.ua;\n __gtagDataLayer(type, name, parameters);\n } else {\n __gtagDataLayer.apply(null, arguments);\n }\n }\n\n __gtagTracker(\"js\", new Date());\n __gtagTracker(\"set\", {\n \"developer_id.dZGIzZG\": true,\n });\n __gtagTracker(\"config\", \"UA-224017852-1\", {\n forceSSL: \"true\",\n link_attribution: \"true\",\n });\n window.gtag = __gtagTracker;\n (function () {\n /* https://developers.google.com/analytics/devguides/collection/analyticsjs/ */\n /* ga and __gaTracker compatibility shim. */\n var noopfn = function () {\n return null;\n };\n var newtracker = function () {\n return new Tracker();\n };\n var Tracker = function () {\n return null;\n };\n var p = Tracker.prototype;\n p.get = noopfn;\n p.set = noopfn;\n p.send = function () {\n var args = Array.prototype.slice.call(arguments);\n args.unshift(\"send\");\n __gaTracker.apply(null, args);\n };\n var __gaTracker = function () {\n var len = arguments.length;\n if (len === 0) {\n return;\n }\n var f = arguments[len - 1];\n if (\n typeof f !== \"object\" ||\n f === null ||\n typeof f.hitCallback !== \"function\"\n ) {\n if (\"send\" === arguments[0]) {\n var hitConverted,\n hitObject = false,\n action;\n if (\"event\" === arguments[1]) {\n if (\"undefined\" !== typeof arguments[3]) {\n hitObject = {\n eventAction: arguments[3],\n eventCategory: arguments[2],\n eventLabel: arguments[4],\n value: arguments[5] ? arguments[5] : 1,\n };\n }\n }\n if (\"pageview\" === arguments[1]) {\n if (\"undefined\" !== typeof arguments[2]) {\n hitObject = {\n eventAction: \"page_view\",\n page_path: arguments[2],\n };\n }\n }\n if (typeof arguments[2] === \"object\") {\n hitObject = arguments[2];\n }\n if (typeof arguments[5] === \"object\") {\n Object.assign(hitObject, arguments[5]);\n }\n if (\"undefined\" !== typeof arguments[1].hitType) {\n hitObject = arguments[1];\n if (\"pageview\" === hitObject.hitType) {\n hitObject.eventAction = \"page_view\";\n }\n }\n if (hitObject) {\n action =\n \"timing\" === arguments[1].hitType\n ? \"timing_complete\"\n : hitObject.eventAction;\n hitConverted = mapArgs(hitObject);\n __gtagTracker(\"event\", action, hitConverted);\n }\n }\n return;\n }\n\n function mapArgs(args) {\n var arg,\n hit = {};\n var gaMap = {\n eventCategory: \"event_category\",\n eventAction: \"event_action\",\n eventLabel: \"event_label\",\n eventValue: \"event_value\",\n nonInteraction: \"non_interaction\",\n timingCategory: \"event_category\",\n timingVar: \"name\",\n timingValue: \"value\",\n timingLabel: \"event_label\",\n page: \"page_path\",\n location: \"page_location\",\n title: \"page_title\",\n };\n for (arg in args) {\n if (\n !(!args.hasOwnProperty(arg) || !gaMap.hasOwnProperty(arg))\n ) {\n hit[gaMap[arg]] = args[arg];\n } else {\n hit[arg] = args[arg];\n }\n }\n return hit;\n }\n\n try {\n f.hitCallback();\n } catch (ex) {}\n };\n __gaTracker.create = newtracker;\n __gaTracker.getByName = newtracker;\n __gaTracker.getAll = function () {\n return [];\n };\n __gaTracker.remove = noopfn;\n __gaTracker.loaded = true;\n window[\"__gaTracker\"] = __gaTracker;\n })();\n } else {\n console.log(\"\");\n (function () {\n function __gtagTracker() {\n return null;\n }\n\n window[\"__gtagTracker\"] = __gtagTracker;\n window[\"gtag\"] = __gtagTracker;\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 \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 \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
\n
\n \n
\n
\n
\n \n \n
\n \n
\n
\n
\n
\n
\n
\n \n
\n \n Raising up tomorrow’s young champions.\n \n
\n
\n \n
\n \n The Olympic Standard in table tennis coaching\n for children and students\n \n
\n
\n \n
\n
\n \n \n Book Assessment\n \n \n
\n
\n
\n \n
\n
\n \n \n \n Watch video\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
\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 Looking for a quality table tennis academy and\n coaches for your child?\n \n
\n
\n
\n
\n \n \n \n
\n \n
\n \n
    \n
  • \n Concerned about a friendly coaching\n environment?\n
  • \n
  • \n Afraid your child won’t be given the\n attention they need?\n
  • \n
  • \n Not sure what level of coaching will be best\n for them?\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 Come learn table tennis with Olympian, Vivian\n Tan!\n \n
\n
\n \n
\n \n

\n We believe it should be easy to find a table\n tennis academy that is both fun and delivers a\n professional standard of coaching.\n

\n

\n Vivian’s Table Tennis Academy delivers olympic\n standard coaching for the Willoughby area and\n Sydney’s North Shore.\n

\n

\n We exist to raise up tomorrow’s champions from\n ages 5 to 18 years old.\n

\n
\n \n \n \n
\n
\n \n \n Our Table Tennis Coaches\n \n \n
\n
\n \n \n \n \n \n \n \n \n
\n
\n \n \n
\n \n
\n \n Term classes\n \n
\n
\n \n
\n \n

\n We have multiple classes each week that run at\n set times during the school term. Book a free\n trial lesson for your child today and\n experience an environment that encourages\n growth and learning.\n

\n
\n
\n
\n \n
\n
\n \n \n Class timetable\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 School holiday camp\n \n
\n
\n \n
\n \n

\n Every school holiday, we create opportunities\n for kids to have fun and connect with each\n other while learning a skill that they can\n keep for life. Spaces fill up fast so book\n your child in today.\n

\n
\n
\n
\n \n
\n
\n \n \n Register now\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 Corporate events\n \n
\n
\n \n
\n \n

\n Looking for a fun event for your company? We\n host many friendly competitions and events for\n corporate groups throughout the year. Enquire\n today about what we can organise for your\n group event.\n

\n
\n
\n
\n \n
\n
\n \n \n Enquire today\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 \"My girl loved their NSW Sport and\n Recreation Camp...''\n

\n

\n My 9-year-old girl joined their\n recreation camp and she enjoyed it\n so much and made so many friends\n

\n

\n also this is one of the best TT\n training academies in the region\n that organise tennis\n

\n

\n camps in Sydney for both girls and\n boys\n

\n
\n
\n \n \n Melissa\n Mom of Vivian Tan fan\n
\n
\n
\n \n
\n \n \n

\n “My older boy is now competing at\n a state level...”\n

\n

\n As my kids say, “You learn\n different skills, tricks and\n strategies to be competitive and\n have fun.” You get to meet a great\n bunch of people, it's very\n inclusive, and the monthly\n tournaments are great for both\n compeitive and non-competitive\n people.\n

\n

\n My older boy is now competing at a\n state level and representing his\n high school.\n

\n

\n We recommend you give Vivian Table\n Tennis Academy a try.”\n

\n
\n
\n \n AdamDad of two boys // Students at\n VTTA\n \n \n \n \n
\n \n \n

\n \"Best TT Academy for Kids &\n Youths...\"\n

\n

\n Best table tennis training\n provider near me. Both of my\n children are going there for table\n tennis training.\n

\n

\n The coach is very professional and\n skilful. This place has a friendly\n environment for the students.\n

\n

\n Vivian table tennis academy is\n highly recommended by me\n

\n
\n \n \n JosephDad of Two VTTians\n \n \n \n \n
\n \n \n

\n \"My girl loved their NSW Sport and\n Recreation Camp...''\n

\n

\n My 9-year-old girl joined their\n recreation camp and she enjoyed it\n so much and made so many friends\n

\n

\n also this is one of the best TT\n training academies in the region\n that organise tennis\n

\n

\n camps in Sydney for both girls and\n boys\n

\n
\n \n \n \n Melissa\n Mom of Vivian Tan fan\n \n \n \n \n
\n \n \n

\n “My older boy is now competing at\n a state level...”\n

\n

\n As my kids say, “You learn\n different skills, tricks and\n strategies to be competitive and\n have fun.” You get to meet a great\n bunch of people, it's very\n inclusive, and the monthly\n tournaments are great for both\n compeitive and non-competitive\n people.\n

\n

\n My older boy is now competing at a\n state level and representing his\n high school.\n

\n

\n We recommend you give Vivian Table\n Tennis Academy a try.”\n

\n
\n \n \n AdamDad of two boys // Students at\n VTTA\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 Why should you choose Vivian’s Table Tennis\n Academy for your child?\n \n
\n
\n \n
\n \n
    \n
  • 12 classes every week
  • \n
  • \n Beginner, intermediate, and advanced levels\n
  • \n
  • \n 14 years of Olympic-standard coaching\n experience\n
  • \n
  • \n Guaranteed coach-to-student ratio of 1:3\n
  • \n
  • Fun and friendly coaches and players
  • \n
  • \n Structured learning environment including\n assessments\n
  • \n
  • \n We focus on the transformation of the\n students in their self-confidence, skills\n ability, and their increasing achievements\n
  • \n
  • \n Represent the state competitively in the\n State Team\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 Want to join the Vivian Table Tennis Academy\n family?\n \n
\n
\n \n \n
\n \n \n
\n \n
\n
\n \n
\n
\n
\n
\n \n Book Assessment\n \n \n Book your child for a free trial\n and experience our academy for\n yourself.\n
\n
\n
\n
\n \n \n \n \n \n \n
\n \n
\n
\n \n
\n
\n
\n
\n \n Register for term\n \n \n Find yourself smiling during\n your trial? Join the rest of our\n Vivian family for term.\n
\n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n \n
\n
\n
\n
\n \n Reach potential\n \n \n Track your child's progress\n during the term and watch their\n abilities come alive.\n
\n \n \n \n \n \n \n \n \n \n \n \n
\n
\n \n \n Book Assessment\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 \n \n \n \n\n \n \n\n`;\n","import { Grid, List, ListItem, Typography } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n WithStyles,\n withStyles,\n} from \"@material-ui/core/styles\";\nimport React from \"react\";\nimport FormContainer from \"./FormContainer\";\nimport FormTitle from \"./FormTitle\";\nconst styles = (theme: Theme) =>\n createStyles({\n container: {},\n paperWidthSm: {\n maxWidth: \"80em\",\n },\n button: {\n marginTop: theme.spacing(1),\n marginRight: theme.spacing(1),\n },\n actionsContainer: {\n marginBottom: theme.spacing(2),\n },\n resetContainer: {\n padding: theme.spacing(3),\n },\n });\n\nexport interface Props extends WithStyles {}\n\nconst steps = [\"Please select player\", \"Please select a course\", \"Enrol now\"];\n\nfunction MakeupRules(props: Props) {\n const { classes } = props;\n\n return (\n \n \n \n \n \n \n A student may receive one (1) make-up lesson per eligible absence,\n up to a maximum of two (2) make-up lessons per term. To be\n eligible for a make-up lesson, a student is required to:\n \n \n\n \n Notify the Vivian of the absence at least 4 hours prior to the\n scheduled lesson start time by SMS to 0430 127 108.\n \n \n Request a make-up lesson in the same term as the noted absence. i.e\n make-up lessons will not be rolled over to the following term\n Make-up lessons Requests by SMS to 0430 127 108:\n \n \n Are subject to availability. Lack of availability is not a valid\n reason for partial or full refund. • May be requested up to 7 days\n in advance and at any stage during the current term.\n \n \n Requests will be actioned within the Monday to Sunday period and you\n will receive confirmation message once the make-lesson is booked.\n Requests will be rejected if the eligibility conditions are not met.\n Once a make-up lesson is booked and confirmed it cannot be\n rearranged. Failure to attend will result in forfeiting the make-up\n lesson. Please note: Notification of absence forfeits your position\n in the specified class. Please contact Vivian if you want to attend\n your original class after notifying the absence, as another student\n may be booked into your original time-slot for a make-up lesson.\n \n \n \n \n );\n}\n\nexport default withStyles(styles)(MakeupRules);\n","import { User } from \"../generated/graphql\";\n\nconst getUserFullName = ({ firstName, lastName }: User) =>\n `${firstName ?? \"\"} ${lastName ?? \"\"}`;\n\nexport default getUserFullName;\n","import {\n Button,\n Dialog,\n DialogContent,\n Grid,\n Paper,\n Typography,\n withStyles,\n} from \"@material-ui/core\";\nimport { createStyles, Theme, WithStyles } from \"@material-ui/core/styles\";\nimport { DataGrid } from \"@material-ui/data-grid\";\nimport { useFormik } from \"formik\";\nimport React, { useContext, useState } from \"react\";\nimport { declineEnrolment } from \"../api/enrolment.service\";\nimport { updatePaymentStatus } from \"../api/payment.service\";\nimport { LoadingContext } from \"../context/LoadingContext\";\nimport { NotificationContext } from \"../context/NotificationContext\";\nimport { EPaymentStatus, PaymentInfoResp, User } from \"../generated/graphql\";\nimport getPlayerName from \"../utils/getPlayerName\";\nimport getUserFullName from \"../utils/getUserFullName\";\nimport DialogTitle from \"./DialogTitle\";\nimport FormRow from \"./FormRow\";\nconst styles = (theme: Theme) =>\n createStyles({\n container: {\n height: \"75vh\",\n overflowY: \"auto\",\n width: \"95%\",\n },\n paperWidthSm: {\n maxWidth: \"80em\",\n },\n });\n\ninterface Props extends WithStyles {\n payments: PaymentInfoResp[];\n onUpdate: () => Promise;\n}\n\nconst getRowsColumns = (payments: PaymentInfoResp[]) => {\n const rows = payments.map(\n ({\n id,\n status,\n reference,\n enrolmentId,\n paidDate,\n payerInfo,\n enrolmentInfo,\n coursesInfo,\n playersInfo,\n amount,\n }: PaymentInfoResp) => {\n return {\n id,\n status,\n reference,\n payer: getUserFullName(payerInfo),\n paidDate: status === EPaymentStatus.Paid ? paidDate ?? \"\" : \"\",\n players: playersInfo.map(getPlayerName).join(\",\"),\n courses: coursesInfo.map((c) => c.courseDay).join(\",\"),\n amount: `$${amount}`,\n };\n }\n );\n const columns = [\n { field: \"status\", headerName: \"Status\", width: 120 },\n { field: \"payer\", headerName: \"Payer\", width: 120 },\n { field: \"amount\", headerName: \"Amount\", width: 120 },\n { field: \"paidDate\", headerName: \"Paid date\", width: 120 },\n { field: \"players\", headerName: \"Player\", width: 240 },\n { field: \"courses\", headerName: \"Courses\", width: 120 },\n // { field: \"reference\", headerName: \"Reference\", width: 120 },\n ];\n return {\n rows,\n columns,\n };\n};\n\nconst PaymentList = ({ classes, payments, onUpdate }: Props) => {\n const { showSuccessNotification, showErrorNotification } =\n useContext(NotificationContext);\n\n const { showLoading, hideLoading } = useContext(LoadingContext);\n const { rows, columns } = getRowsColumns(payments);\n\n const [showDetailDlg, setShowDetailDlg] = useState(false);\n const [paymentId, setPaymentId] = useState(\"\");\n const [selectedPaymentInfo, setSelectedPaymentInfo] = useState<\n PaymentInfoResp | undefined\n >(undefined);\n const handleRowClick = ({ row: { id: paymentId, status } }: any) => {\n // if (status !== EPaymentStatus.Paid) {\n setSelectedPaymentInfo(payments.find((p) => p.id === paymentId));\n setPaymentId(paymentId);\n setShowDetailDlg(true);\n // }\n };\n\n const handleClose = () => {\n setShowDetailDlg(false);\n };\n const { values, handleSubmit, handleChange, errors, touched, handleBlur } =\n useFormik({\n initialValues: {},\n onSubmit: async ({}) => {\n showLoading();\n showSuccessNotification(\"Payment updated\");\n await updatePaymentStatus({\n paymentId: selectedPaymentInfo?.id,\n status: EPaymentStatus.Paid,\n });\n hideLoading();\n setShowDetailDlg(false);\n onUpdate();\n },\n });\n\n const handleDeclineEnrolment = async () => {\n if (!selectedPaymentInfo?.enrolmentId) {\n return;\n }\n showLoading();\n await declineEnrolment({\n id: selectedPaymentInfo?.enrolmentId,\n });\n onUpdate();\n hideLoading();\n setShowDetailDlg(false);\n };\n\n const handleConfirmed = async () => {\n showLoading();\n showSuccessNotification(\"Payment updated\");\n await updatePaymentStatus({\n paymentId: selectedPaymentInfo?.id,\n status: EPaymentStatus.Confirmed,\n });\n hideLoading();\n setShowDetailDlg(false);\n onUpdate();\n };\n\n const canBeDeclined = () => {\n return (\n selectedPaymentInfo?.status !== EPaymentStatus.Declined &&\n selectedPaymentInfo?.status !== EPaymentStatus.Paid\n );\n };\n\n const canBePaid = () => {\n return selectedPaymentInfo?.status !== EPaymentStatus.Paid;\n };\n\n const canBeConfirmed = () => {\n return selectedPaymentInfo?.status !== EPaymentStatus.Confirmed;\n };\n\n return (\n \n {payments.length > 0 && (\n \n )}\n \n \n Payment detail\n \n \n
\n \n \n \n \n Payer name:\n {getUserFullName(\n selectedPaymentInfo?.payerInfo ?? ({} as User)\n )}\n \n \n \n \n Players :\n {selectedPaymentInfo?.playersInfo\n .map(getPlayerName)\n .join(\", \")}\n \n \n \n Lessons detail: \n {selectedPaymentInfo?.coursesInfo.map((courseInfo) => {\n const foundTerm = selectedPaymentInfo.termsInfo.find(\n (t) => t.id === courseInfo.termId\n );\n return (\n \n {courseInfo.courseDay} {foundTerm?.level}{\" \"}\n {courseInfo.numOfLessons} lessons\n \n );\n })}\n {/* {selectedPaymentInfo?.coursesInfo\n .map((c) => c.courseDay)\n .join(\", \")} */}\n \n \n \n \n \n Payment amount: ${selectedPaymentInfo?.amount}\n \n \n \n \n \n \n \n Mark as paid\n \n \n \n \n Mark as confirmed\n \n \n \n \n Decline\n \n \n \n
\n
\n \n
\n );\n};\n\nexport default withStyles(styles)(PaymentList);\n","import {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport React, { useContext, useEffect, useState } from \"react\";\nimport { getPayments } from \"../api/payment.service\";\nimport { AuthContext } from \"../context/AuthContext\";\nimport { ERole, GetPaymentsInput, PaymentInfoResp } from \"../generated/graphql\";\nimport FormContainer from \"./FormContainer\";\nimport FormTitle from \"./FormTitle\";\nimport PaymentList from \"./PaymentList\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n paper: {\n maxWidth: 936,\n margin: \"auto\",\n overflow: \"hidden\",\n },\n });\n\nexport interface Props extends WithStyles {}\n\nfunction Payments(props: Props) {\n const [payments, setPayments] = useState([]);\n const { userProfile } = useContext(AuthContext);\n\n const loadPayments = async () => {\n let param: GetPaymentsInput = {};\n if (userProfile?.role === ERole.Parent) {\n param.userId = userProfile.uid;\n }\n setPayments((await getPayments(param)) ?? []);\n };\n\n useEffect(() => {\n loadPayments();\n }, []);\n return (\n \n \n \n \n );\n}\n\nexport default withStyles(styles)(Payments);\n","import { MenuItem, TextField, TextFieldProps } from \"@material-ui/core\";\nimport React from \"react\";\nimport { EGender } from \"../generated/graphql\";\nconst genders = [\n { label: \"Male\", value: EGender.Male },\n { label: \"Female\", value: EGender.Female },\n];\n\nconst GenderSelect = (props: TextFieldProps) => (\n \n {genders.map((option) => (\n \n {option.label}\n \n ))}\n \n);\nexport default GenderSelect;\n","import {\n Button,\n Dialog,\n DialogContent,\n Grid,\n MenuItem,\n TextField,\n Typography,\n} from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport { useFormik } from \"formik\";\nimport React, { useContext } from \"react\";\nimport { useHistory } from \"react-router\";\nimport * as yup from \"yup\";\nimport { addPlayer, savePlayer } from \"../api/player.service\";\nimport { AuthContext } from \"../context/AuthContext\";\nimport { NotificationContext } from \"../context/NotificationContext\";\nimport { EGender, Player, SavePlayerInput } from \"../generated/graphql\";\nimport ERoutePath from \"../routes/ERoutePath\";\nimport { firstNameValidator, lastNameValidator } from \"../utils/validator\";\nimport DialogTitle from \"./DialogTitle\";\nimport FormContainer from \"./FormContainer\";\nimport FormRow from \"./FormRow\";\nimport GenderSelect from \"./GenderSelect\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n closeButton: {\n position: \"absolute\",\n right: theme.spacing(1),\n top: theme.spacing(1),\n },\n paperWidthSm: {\n maxWidth: \"80em\",\n maxHeight: \"30rem\",\n },\n });\ninterface IProfileInput {\n firstName: string;\n lastName: string;\n dob: string;\n gender: EGender;\n school: string;\n hasDisability: string;\n disabilityClass?: string;\n disabilityDescription?: string;\n}\n\nexport interface Props extends WithStyles {\n player?: Player;\n isAddingNewPlayer: boolean;\n onClose: (player: Player | undefined) => void;\n}\n\nconst validationsForm = yup.object().shape({\n firstName: firstNameValidator,\n lastName: lastNameValidator,\n});\n\nfunction PlayerComponent({\n isAddingNewPlayer,\n player,\n onClose,\n classes,\n}: Props) {\n const initialValues: IProfileInput = {\n firstName: player?.firstName ?? \"\",\n lastName: player?.lastName ?? \"\",\n gender: player?.gender ?? EGender.Male,\n dob: player?.dob ?? \"2000-01-01\",\n school: player?.school ?? \"\",\n hasDisability: player?.disability ? \"yes\" : \"no\",\n disabilityClass: player?.disabilityClass ?? \"\",\n disabilityDescription: player?.disabilityDescription ?? \"\",\n };\n const { showSuccessNotification } = useContext(NotificationContext);\n const history = useHistory();\n const { values, handleSubmit, handleChange, errors, touched } = useFormik({\n initialValues,\n validationSchema: validationsForm,\n onSubmit: async (values) => {\n const {\n firstName = \"\",\n lastName = \"\",\n dob = \"\",\n gender = EGender.Female,\n disabilityClass = \"\",\n disabilityDescription = \"\",\n hasDisability = \"no\",\n school,\n } = values;\n const disability = hasDisability === \"yes\";\n let playerResult;\n let msg;\n const playerInfo = {\n firstName,\n lastName,\n dob,\n gender,\n disability,\n disabilityClass,\n disabilityDescription,\n parentId: userProfile?.id,\n school,\n };\n if (isAddingNewPlayer) {\n playerResult = await addPlayer({\n ...playerInfo,\n } as SavePlayerInput);\n msg = \"Added a new player, you can enrol a course now.\";\n } else {\n playerResult = await savePlayer({\n playerId: player?.id,\n ...playerInfo,\n } as SavePlayerInput);\n msg = \"Player updated\";\n }\n showSuccessNotification(msg);\n // call parent to close the dialog\n onClose(playerResult);\n history.push(ERoutePath.enrolments);\n },\n });\n\n const { userProfile, isAdminRole, isParentRole } = useContext(AuthContext);\n\n return (\n \n \n {\n onClose(undefined);\n }}\n >\n \n {isAddingNewPlayer ? \"Add new player\" : \"Update player\"}\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 Yes\n \n \n No\n \n \n \n \n {values.hasDisability === \"yes\" && (\n \n \n \n \n \n \n \n \n )}\n \n \n \n {isAddingNewPlayer ? \"Add a new player\" : \"Update player\"}\n \n \n \n \n
\n
\n \n
\n );\n}\n\nexport default withStyles(styles)(PlayerComponent);\n","import { Paper, withStyles } from \"@material-ui/core\";\nimport { createStyles, Theme, WithStyles } from \"@material-ui/core/styles\";\nimport { DataGrid, RowSelectedParams } from \"@material-ui/data-grid\";\nimport React from \"react\";\nimport { EGender, Player } from \"../generated/graphql\";\nimport formatDate from \"../utils/formatDate\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n container: {\n height: \"65vh\",\n overflowY: \"auto\",\n width: \"95%\",\n },\n });\n\nexport interface IPlayerRow {\n id: string;\n firstName: string;\n lastName: string;\n dob: string;\n gender: EGender;\n school: string;\n disability: boolean;\n parentId: string;\n}\n\ninterface Props extends WithStyles {\n players: Player[];\n onSelectedPlayer?: (selectedPlayer: RowSelectedParams) => void;\n multipleRowsSelection?: boolean;\n}\n\nconst getRowsColumns = (players: Player[]) => {\n const rows = players.map(\n ({\n id,\n firstName,\n lastName,\n dob,\n gender,\n school,\n disability,\n disabilityClass,\n disabilityDescription,\n }: Player) => {\n return {\n id,\n firstName,\n lastName,\n dob: formatDate(dob),\n gender,\n school,\n disability: disability ? \"Yes\" : \"No\",\n disabilityDescription,\n disabilityClass,\n };\n }\n );\n const columns = [\n { field: \"firstName\", headerName: \"First name\", width: 120 },\n { field: \"lastName\", headerName: \"Last name\", width: 100 },\n { field: \"dob\", headerName: \"Date of birth\", width: 120 },\n { field: \"gender\", headerName: \"Gender\", width: 90 },\n { field: \"disability\", headerName: \"Disability\", width: 120 },\n // { field: \"disabilityClass\", headerName: \"Class\", width: 120 },\n // { field: \"disabilityDescription\", headerName: \"Description\", width: 120 },\n ];\n return {\n rows,\n columns,\n };\n};\n\nconst PlayerList = ({\n classes,\n players,\n onSelectedPlayer,\n multipleRowsSelection = false,\n}: Props) => {\n const { rows, columns } = getRowsColumns(players);\n const handleRowSelected = (rowSelectedParams: RowSelectedParams) => {\n if (onSelectedPlayer) {\n onSelectedPlayer(rowSelectedParams);\n }\n };\n return (\n \n {players.length > 0 && (\n \n )}\n \n );\n};\n\nexport default withStyles(styles)(PlayerList);\n","import { Button, Grid } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles\n} from \"@material-ui/core/styles\";\nimport { RowSelectedParams } from \"@material-ui/data-grid\";\nimport { useContext, useEffect, useState } from \"react\";\nimport { useImmer } from \"use-immer\";\nimport { getPlayers } from \"../api/player.service\";\nimport { AuthContext } from \"../context/AuthContext\";\nimport EmptyInfo from \"../EmptyInfo\";\nimport { EGender, Player } from \"../generated/graphql\";\nimport FormContainer from \"./FormContainer\";\nimport FormRow from \"./FormRow\";\nimport FormTitle from \"./FormTitle\";\nimport PlayerComponent from \"./PlayerComponent\";\nimport PlayerList from \"./PlayerList\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n closeButton: {\n position: \"absolute\",\n right: theme.spacing(1),\n top: theme.spacing(1),\n },\n });\n\nexport interface Props extends WithStyles {}\n\ninterface IProfileInput {\n firstName: string;\n lastName: string;\n dob: string;\n gender: EGender;\n school: string;\n hasDisability: string;\n disabilityClass?: string;\n disabilityDescription?: string;\n}\n\nfunction Players(props: Props) {\n const [players, setPlayers] = useImmer([]);\n\n const [loadedData, setLoadedData] = useState(false);\n const loadPlayers = async (parentId: string) => {\n setLoadedData(false);\n const p = (await getPlayers({ parentId })) ?? [];\n setLoadedData(true);\n setPlayers((draft) => {\n draft.push(...p);\n });\n };\n\n const loadAllPlayers = async () => {\n setLoadedData(false);\n const p = (await getPlayers({})) ?? [];\n setLoadedData(true);\n setPlayers((draft) => {\n draft.push(...(p ?? []));\n });\n };\n\n const { userProfile, isAdminRole, isParentRole } = useContext(AuthContext);\n\n useEffect(() => {\n if (isAdminRole()) {\n loadAllPlayers();\n } else {\n loadPlayers(userProfile?.id);\n }\n }, [userProfile?.id, isAdminRole]);\n\n const [toAddNewPlayer, setToAddNewPlayer] = useState(false);\n const [toUpdatePlayer, setToUpdatePlayer] = useState(false);\n const [selectedPlayer, setSelectedPlayer] = useState(null);\n const handleSelectedPlayer = (selectedRow: RowSelectedParams) => {\n const foundPlayer = players.find((p) => p.id === selectedRow.data.id);\n setSelectedPlayer(foundPlayer ?? null);\n setToUpdatePlayer(true);\n };\n const handleAddNewPlayer = () => {\n setToAddNewPlayer(true);\n };\n\n const handleExportPlayers = () => {\n const allPlayersCsv = players.map((player) => (\n `${player.firstName},${player.lastName},${player.gender},${player.dob}`\n )).join('\\n')\n\n console.log('players', players)\n\n var fileName = \"allPlayers.csv\";\n const blob = new Blob([allPlayersCsv], { type: \"text/plain\"})\n \n const a = document.createElement('a')\n a.download = fileName;\n a.href = window.URL.createObjectURL(blob)\n const clickEvt = new MouseEvent('click', {\n view: window,\n bubbles: true,\n cancelable: true,\n })\n a.dispatchEvent(clickEvt)\n a.remove()\n }\n\n return (\n \n \n \n \n \n {players.length > 0 && (\n \n )}\n {loadedData && players.length === 0 && (\n \n )}\n \n {isAdminRole() && (\n \n \n Export players\n \n \n )}\n {isParentRole() && (\n \n \n Add player\n \n \n )}\n \n \n {toUpdatePlayer && selectedPlayer && (\n {\n if (p) {\n setPlayers((draft) => {\n const foundIndex = draft.findIndex((d) => d.id === p.id);\n draft[foundIndex] = p;\n });\n }\n setToUpdatePlayer(false);\n }}\n />\n )}\n {toAddNewPlayer && (\n {\n if (p) {\n setPlayers((draft) => {\n draft.push(p);\n });\n }\n setToAddNewPlayer(false);\n }}\n />\n )}\n \n );\n}\n\nexport default withStyles(styles)(Players);\n","import { createStyles, Paper, Theme, Typography } from \"@material-ui/core\";\nimport { WithStyles, withStyles } from \"@material-ui/core/styles\";\nimport React from \"react\";\n\nconst styles = ({ spacing, palette }: Theme) =>\n createStyles({\n container: {\n minHeight: 48,\n margin: spacing(2),\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: palette.info.light,\n },\n });\n\nexport interface IProps extends WithStyles {\n text: string;\n}\n\nconst InformationBox = ({ classes, text }: IProps) => {\n return (\n \n {text} \n \n );\n};\nexport default withStyles(styles)(InformationBox);\n","import { Button, Grid, TextField } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport { useFormik } from \"formik\";\nimport React, { useContext } from \"react\";\nimport { useHistory } from \"react-router\";\nimport * as yup from \"yup\";\nimport { saveUserProfile, updateUserProfile } from \"../api/user.service\";\nimport { AuthContext } from \"../context/AuthContext\";\nimport { NotificationContext } from \"../context/NotificationContext\";\nimport { ERole } from \"../generated/graphql\";\nimport ERoutePath from \"../routes/ERoutePath\";\nimport {\n firstNameValidator,\n lastNameValidator,\n mobilePhoneValidator,\n} from \"../utils/validator\";\nimport EmailTextInput from \"./EmailTextInput\";\nimport FormContainer from \"./FormContainer\";\nimport FormRow from \"./FormRow\";\nimport FormTitle from \"./FormTitle\";\nimport InformationBox from \"./InformationBox\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n paper: {\n maxWidth: 936,\n margin: \"auto\",\n overflow: \"hidden\",\n },\n });\n\nexport interface Props extends WithStyles {}\n\ninterface IProfileInput {\n firstName: string;\n lastName: string;\n phone: string;\n email: string;\n cityTown: string;\n address: string;\n}\n\nconst validationsForm = yup.object().shape({\n firstName: firstNameValidator,\n lastName: lastNameValidator,\n phone: mobilePhoneValidator,\n});\n\nfunction Profile(props: Props) {\n const { user, userProfile, setUserProfile } = useContext(AuthContext);\n const history = useHistory();\n\n const { showSuccessNotification, showErrorNotification } =\n useContext(NotificationContext);\n\n const initialValues: IProfileInput = {\n firstName: userProfile?.firstName ?? \"\",\n lastName: userProfile?.lastName ?? \"\",\n phone: userProfile?.phone ?? \"\",\n email: user?.email ?? \"\",\n address: userProfile?.address ?? \"\",\n cityTown: userProfile?.cityTown ?? \"\",\n };\n const { values, handleSubmit, handleChange, errors, touched, handleBlur } =\n useFormik({\n enableReinitialize: true,\n initialValues,\n validationSchema: validationsForm,\n onSubmit: async (values) => {\n try {\n let msg =\n \"Saved user file successfully, please add a new player first.\";\n if (userProfile) {\n msg = \"User profile updated\";\n const updatedUserProfile = await updateUserProfile({\n id: userProfile.id,\n userProfile: {\n uid: user?.userName as string,\n firstName: values.firstName,\n lastName: values.lastName,\n role: ERole.Parent, // by default set to parent\n address: values.address,\n cityTown: values.cityTown,\n phone: values.phone,\n email: user?.email as string,\n },\n });\n if (updatedUserProfile) {\n setUserProfile(updatedUserProfile);\n }\n } else {\n const savedUserProfile = await saveUserProfile({\n uid: user?.userName as string,\n firstName: values.firstName,\n lastName: values.lastName,\n role: ERole.Parent, // by default set to parent\n address: values.address,\n cityTown: values.cityTown,\n phone: values.phone,\n email: user?.email as string,\n });\n if (savedUserProfile) {\n setUserProfile(savedUserProfile);\n }\n // go to players page\n history.push(ERoutePath.players);\n }\n showSuccessNotification(msg);\n } catch (e) {\n showErrorNotification(\n \"Failed to save user profile, please try again later\"\n );\n }\n },\n });\n\n return (\n \n \n {!userProfile && }\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 {userProfile ? \"Update profile\" : \"Save profile\"}\n \n \n \n \n
\n
\n );\n}\n\nexport default withStyles(styles)(Profile);\n","import {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n Grid,\n Typography,\n withStyles,\n} from \"@material-ui/core\";\nimport { createStyles, Theme, WithStyles } from \"@material-ui/core/styles\";\nimport { useFormik } from \"formik\";\nimport queryString from \"query-string\";\nimport React, { useContext } from \"react\";\nimport { useHistory, useLocation } from \"react-router\";\nimport * as yup from \"yup\";\nimport { AuthContext } from \"../context/AuthContext\";\nimport { NotificationContext } from \"../context/NotificationContext\";\nimport ERoutePath from \"../routes/ERoutePath\";\nimport { emailValidator } from \"../utils/validator\";\nimport DialogTitle from \"./DialogTitle\";\nimport EmailTextInput from \"./EmailTextInput\";\nimport FormRow from \"./FormRow\";\nimport PasswordTextInput from \"./PasswordTextInput\";\n\nconst validationsForm = yup.object().shape({\n email: emailValidator,\n});\n\nconst styles = (theme: Theme) =>\n createStyles({\n card: {\n maxWidth: 420,\n marginTop: 50,\n },\n container: {\n display: \"Flex\",\n justifyContent: \"center\",\n },\n actions: {\n float: \"right\",\n },\n dlgAction: {\n justifyContent: \"center\",\n },\n root: {\n margin: 0,\n padding: theme.spacing(2),\n },\n closeButton: {\n position: \"absolute\",\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[500],\n },\n });\n\ninterface Props extends WithStyles {}\n\ninterface IForgotPasswordValue {\n email: string;\n}\n\nconst ResetPassword = (props: Props) => {\n const history = useHistory();\n const location = useLocation();\n // const [passwordState, setPasswordState] = useImmer({\n // email: \"\",\n // code: \"\",\n // password: \"\",\n // });\n const data = queryString.parse(location.search);\n // setPasswordState(() => ({\n // email: data?.[\"email\"]?.toString() ?? \"\",\n // code: data?.[\"code\"]?.toString() ?? \"\",\n // password: \"\",\n // }));\n const passwordState = {\n email: data?.[\"email\"]?.toString() ?? \"\",\n code: data?.[\"code\"]?.toString() ?? \"\",\n password: \"\",\n };\n const { showSuccessNotification, showErrorNotification } = useContext(\n NotificationContext\n );\n const { isAuthenticated, forgotPasswordSubmit } = useContext(AuthContext);\n const initialValues = {\n email: passwordState.email,\n code: passwordState.code,\n password: passwordState.password,\n };\n const {\n values,\n handleSubmit,\n handleChange,\n errors,\n touched,\n handleBlur,\n } = useFormik({\n initialValues,\n validationSchema: validationsForm,\n onSubmit: async ({ email, code, password }) => {\n const result = await forgotPasswordSubmit({ code, email, password });\n if (result.success) {\n showSuccessNotification(\"Password has been reset, please sign in\");\n history.push(ERoutePath.signin);\n } else {\n showErrorNotification(\n result.error ?? \"Unable to sign in, please try again later.\"\n );\n }\n },\n });\n const { classes } = props;\n const [open, setOpen] = React.useState(true);\n\n const handleClose = () => {\n setOpen(false);\n };\n const welcomeMessage = `Reset password message will be sent to below email`;\n if (isAuthenticated) {\n return null;\n }\n return (\n \n
\n \n Reset password \n \n \n \n \n {welcomeMessage}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Reset password\n \n \n \n \n
\n \n );\n};\n\nexport default withStyles(styles)(ResetPassword);\n","import {\n Button,\n Checkbox,\n Dialog,\n DialogContent,\n FormControlLabel,\n Grid,\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n Typography,\n} from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n WithStyles,\n withStyles,\n} from \"@material-ui/core/styles\";\nimport { DateTime } from \"luxon\";\nimport React, { useContext, useEffect, useState } from \"react\";\nimport { useImmer } from \"use-immer\";\nimport { getCourses } from \"../api/course.service\";\nimport { getEnrolments } from \"../api/enrolment.service\";\nimport { getHolidayCourses } from \"../api/holidayCourse.service\";\nimport { getPlayers } from \"../api/player.service\";\nimport { AuthContext } from \"../context/AuthContext\";\nimport { LoadingContext } from \"../context/LoadingContext\";\nimport EmptyInfo from \"../EmptyInfo\";\nimport {\n Course,\n CoursesResp,\n ECourseLevel,\n EnrolmentResult,\n ERole,\n Player,\n Term,\n} from \"../generated/graphql\";\nimport getPlayerName from \"../utils/getPlayerName\";\nimport CourseListInWeekView from \"./CourseListInWeekView\";\nimport DialogTitle from \"./DialogTitle\";\nimport EnrolmentDetail, { IEnrolmentData } from \"./EnrolmentDetail\";\nimport EnrolmentList from \"./EnrolmentList\";\nimport FormContainer from \"./FormContainer\";\nimport FormRow from \"./FormRow\";\nimport FormTitle from \"./FormTitle\";\nconst styles = (theme: Theme) =>\n createStyles({\n container: {},\n paperWidthSm: {\n maxWidth: \"80em\",\n },\n button: {\n marginTop: theme.spacing(1),\n marginRight: theme.spacing(1),\n },\n actionsContainer: {\n marginBottom: theme.spacing(2),\n },\n resetContainer: {\n padding: theme.spacing(3),\n },\n });\n\nexport interface Props extends WithStyles {}\n\nconst steps = [\"Please select player\", \"Please select a course\", \"Enrol now\"];\n\nfunction SchoolEnrolment(props: Props) {\n const { classes } = props;\n const [activeStep, setActiveStep] = useState(0);\n const { userProfile } = useContext(AuthContext);\n const [openEnrolmentDlg, setOpenEnrolmentDlg] = useState(false);\n const { showLoading, hideLoading } = useContext(LoadingContext);\n const [loadedData, setLoadedData] = useState(false);\n const [filterLevel, setFilterLevel] = useState<{ [name: string]: boolean }>({\n nsbh: true,\n nsgh: true,\n rosevillecollege: true,\n });\n\n const handleClose = () => {\n setOpenEnrolmentDlg(false);\n };\n const [enrolmentData, setEnrolmentData] = useImmer({\n courses: [],\n filteredCourses: [],\n holidayCourses: [],\n players: [],\n enrolments: [],\n selectedPlayers: [],\n selectedDays: {},\n selectedCourses: [],\n });\n\n const [selectedPlayerList, setSelectedPlayerList] = useImmer<\n {\n id: string;\n selected: boolean;\n }[]\n >([]);\n\n const handleSelectedCourse = (\n course: { course: Course; term: Term },\n bSelectCourse: boolean\n ) => {\n setEnrolmentData((draft) => {\n if (bSelectCourse) {\n draft.selectedCourses?.push(course);\n } else {\n const idx = draft.selectedCourses?.findIndex(\n (c) => course.course.id === c.course.id\n );\n if (idx !== undefined && idx >= 0) {\n draft.selectedCourses?.splice(idx, 1);\n }\n }\n });\n };\n\n const showFilterCheckboxes = () => {\n return (\n <>\n Choose your school: \n\n \n }\n />\n \n }\n />\n \n }\n />\n \n );\n };\n\n const updateFilterLevel = (level: string) => (evt: any) => {\n const newFilterLevels = {\n ...filterLevel,\n [level]: filterLevel[level] ? false : true,\n };\n setFilterLevel(newFilterLevels);\n setEnrolmentData((draft) => {\n draft.filteredCourses = enrolmentData.courses.filter(({ term }) => {\n return newFilterLevels[(term.level as string).toLowerCase()];\n });\n });\n };\n const retrieveData = async () => {\n showLoading();\n setLoadedData(false);\n const param =\n userProfile?.role === ERole.Admin ? {} : { userId: userProfile?.id };\n const parentId = userProfile?.role === ERole.Admin ? \"\" : userProfile?.id;\n const [courses, holidayCourses, players, enrolments] = await Promise.all([\n getCourses(),\n getHolidayCourses(),\n getPlayers({ parentId }),\n getEnrolments(param),\n ]);\n\n setEnrolmentData((draft) => {\n const schoolList = [\n `${ECourseLevel.Nsbh}`,\n `${ECourseLevel.Nsgh}`,\n `${ECourseLevel.RosevilleCollege}`,\n ];\n if (courses) {\n draft.courses = courses.filter((c) => {\n const a = DateTime.now().startOf(\"day\");\n const b = DateTime.fromISO(c.term.endDate).startOf(\"day\");\n return (\n DateTime.now().startOf(\"day\") <=\n DateTime.fromISO(c.term.endDate).startOf(\"day\")\n );\n }) as CoursesResp[];\n\n draft.courses = draft.courses.filter((c) => {\n return schoolList.indexOf(c.term.level) >= 0;\n });\n draft.filteredCourses = draft.courses;\n }\n if (players) {\n draft.players = players;\n }\n if (holidayCourses) {\n draft.holidayCourses = holidayCourses.courses;\n }\n if (enrolments) {\n draft.enrolments = enrolments;\n }\n hideLoading();\n setLoadedData(false);\n });\n };\n\n useEffect(() => {\n retrieveData();\n }, []);\n\n const selectCourseStep = () => (\n <>\n \n \n );\n\n const handleSelectdPlayer = (player: Player) => (evt: any) => {\n setSelectedPlayerList((draft) => {\n const foundPlayer = draft.find((p) => p.id === player.id);\n if (foundPlayer) {\n foundPlayer.selected = !foundPlayer.selected;\n } else {\n draft.push({\n id: player.id,\n selected: true,\n });\n }\n setEnrolmentData((x) => {\n x.selectedPlayers = x.players.filter((xx) => {\n const f = draft.find((yy) => yy.id === xx.id && yy.selected);\n return !!f;\n });\n });\n });\n };\n\n const isPlayerSelected = (player: Player) =>\n // !!selectedPlayerList.find((p) => p.id === player.id && p.selected);\n !!enrolmentData.selectedPlayers.find((p) => p.id === player.id);\n\n const selectPlayerStep = () => (\n \n {enrolmentData.players.map((player: Player) => (\n \n \n \n \n \n \n ))}\n \n );\n\n const enrolmentDetailStep = () => (\n {\n setEnrolmentData((draft) => {\n draft.enrolments.push(newEnrolment);\n });\n }}\n onClose={() => {\n handleClose();\n }}\n />\n );\n\n function getStepContent(step: number) {\n switch (step) {\n case 0:\n return selectPlayerStep();\n case 1:\n return selectCourseStep();\n case 2:\n return enrolmentDetailStep();\n default:\n return \"Unknown step\";\n }\n }\n\n const handleStepClick = (stepIndex: number) => () => {\n setActiveStep(stepIndex);\n };\n\n return (\n \n \n \n \n \n {enrolmentData.enrolments?.length > 0 && (\n \n )}\n {loadedData && enrolmentData.enrolments?.length === 0 && (\n \n )}\n \n {userProfile?.role === ERole.Parent && (\n \n {\n // clear all the enrolmentData\n setEnrolmentData((draft) => {\n draft.selectedCourses = [];\n draft.selectedPlayers = [];\n });\n setOpenEnrolmentDlg(true);\n }}\n >\n Enrol a course\n \n \n )}\n \n \n {\n \n \n Enrol\n \n \n \n \n Please select players\n {selectPlayerStep()}\n \n \n \n Please select lesson you want to enrol\n \n {showFilterCheckboxes()}\n {selectCourseStep()}\n \n {enrolmentDetailStep()}\n \n \n \n }\n \n );\n}\n\nexport default withStyles(styles)(SchoolEnrolment);\n","import {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n Grid,\n Typography,\n withStyles,\n} from \"@material-ui/core\";\nimport { createStyles, Theme, WithStyles } from \"@material-ui/core/styles\";\nimport { useFormik } from \"formik\";\nimport React, { useContext } from \"react\";\nimport { useHistory } from \"react-router\";\nimport { Link } from \"react-router-dom\";\nimport * as yup from \"yup\";\nimport { DEFAULT_EMAIL, DEFAULT_PASSWORD } from \"../const\";\nimport { AuthContext } from \"../context/AuthContext\";\nimport { NotificationContext } from \"../context/NotificationContext\";\nimport ERoutePath from \"../routes/ERoutePath\";\nimport { emailValidator } from \"../utils/validator\";\nimport DialogTitle from \"./DialogTitle\";\nimport EmailTextInput from \"./EmailTextInput\";\nimport FormRow from \"./FormRow\";\nimport PasswordTextInput from \"./PasswordTextInput\";\n\nconst validationsForm = yup.object().shape({\n email: emailValidator,\n password: yup\n .string()\n .min(8, \"Password must contain at least 8 characters\")\n .required(\"Enter your password\"),\n});\n\nconst styles = (theme: Theme) =>\n createStyles({\n card: {\n maxWidth: 420,\n marginTop: 50,\n },\n container: {\n display: \"Flex\",\n justifyContent: \"center\",\n },\n actions: {\n float: \"right\",\n },\n dlgAction: {\n justifyContent: \"center\",\n },\n root: {\n margin: 0,\n padding: theme.spacing(2),\n },\n closeButton: {\n position: \"absolute\",\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[500],\n },\n });\n\ninterface Props extends WithStyles {}\n\ninterface ISignInValue {\n email: string;\n password: string;\n}\n\nconst SignIn = (props: Props) => {\n const history = useHistory();\n const { showErrorNotification, showNotification } =\n useContext(NotificationContext);\n const initialValues: ISignInValue = {\n email: DEFAULT_EMAIL,\n password: DEFAULT_PASSWORD,\n };\n const { isAuthenticated, signin, userProfile } = useContext(AuthContext);\n const { values, handleSubmit, handleChange, errors, touched, handleBlur } =\n useFormik({\n initialValues,\n validationSchema: validationsForm,\n onSubmit: async ({ email, password }) => {\n const result = await signin({\n email,\n password,\n });\n if (result.success) {\n if (result.hasUserProfile) {\n history.push(ERoutePath.enrolments);\n } else {\n history.push(ERoutePath.profile);\n }\n } else {\n showErrorNotification(\n result.error ?? \"Unable to sign in, please try again later.\"\n );\n }\n },\n });\n const [open, setOpen] = React.useState(true);\n\n const handleClose = (evt: object, reason: string) => {\n if (reason === \"backdropClick\") {\n setOpen(true);\n } else {\n setOpen(false);\n }\n };\n const handleDlgClose = () => {\n setOpen(false);\n };\n const signInWelcomeMessage = ``;\n if (isAuthenticated) {\n return null;\n }\n return (\n \n
\n \n Sign In \n \n \n \n \n {signInWelcomeMessage}\n \n \n \n \n \n \n \n \n \n \n New to Vivian Table Tennis Academy\n Create an account\n \n \n Forgot password\n \n \n \n \n \n \n \n Sign In\n \n \n \n \n
\n \n );\n};\n\nexport default withStyles(styles)(SignIn);\n","import { withStyles } from \"@material-ui/core\";\nimport { createStyles, Theme, WithStyles } from \"@material-ui/core/styles\";\nimport { useContext, useEffect } from \"react\";\nimport { useHistory } from \"react-router\";\nimport { AuthContext } from \"../context/AuthContext\";\nimport { NotificationContext } from \"../context/NotificationContext\";\nimport ERoutePath from \"../routes/ERoutePath\";\n\nconst styles = (theme: Theme) => createStyles({});\n\ninterface Props extends WithStyles {}\n\nconst SignOut = (props: Props) => {\n const { showErrorNotification } = useContext(NotificationContext);\n const { signout } = useContext(AuthContext);\n const history = useHistory();\n const doSignOut = async () => {\n const result = await signout();\n if (result.success) {\n history.replace(ERoutePath.home);\n } else {\n showErrorNotification(\n result.error ?? \"unable to signout, please try again later.\"\n );\n }\n };\n useEffect(() => {\n doSignOut();\n });\n return null;\n};\n\nexport default withStyles(styles)(SignOut);\n","import {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n Grid,\n Typography,\n withStyles,\n} from \"@material-ui/core\";\nimport { createStyles, Theme, WithStyles } from \"@material-ui/core/styles\";\nimport { useFormik } from \"formik\";\nimport React, { useContext } from \"react\";\nimport { useHistory } from \"react-router\";\nimport { Link } from \"react-router-dom\";\nimport * as yup from \"yup\";\nimport { DEFAULT_EMAIL, DEFAULT_PASSWORD } from \"../const\";\nimport { AuthContext } from \"../context/AuthContext\";\nimport { NotificationContext } from \"../context/NotificationContext\";\nimport ERoutePath from \"../routes/ERoutePath\";\nimport { emailValidator } from \"../utils/validator\";\nimport DialogTitle from \"./DialogTitle\";\nimport EmailTextInput from \"./EmailTextInput\";\nimport FormRow from \"./FormRow\";\nimport PasswordTextInput from \"./PasswordTextInput\";\nconst validationsForm = yup.object().shape({\n email: emailValidator,\n password: yup\n .string()\n .min(8, \"Password must contain at least 8 characters\")\n .required(\"Enter your password\"),\n repeatPassword: yup\n .string()\n .oneOf([yup.ref(\"password\")], \"Password does not match\")\n .required(\"Confirm your password\"),\n});\n\nconst styles = (theme: Theme) =>\n createStyles({\n card: {\n maxWidth: 420,\n marginTop: 50,\n },\n container: {\n display: \"Flex\",\n justifyContent: \"center\",\n },\n actions: {\n float: \"right\",\n },\n dlgAction: {\n justifyContent: \"center\",\n },\n root: {\n margin: 0,\n padding: theme.spacing(2),\n },\n closeButton: {\n position: \"absolute\",\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[500],\n },\n });\n\ninterface Props extends WithStyles {\n open: boolean;\n}\ninterface ISignUpValue {\n email: string;\n password: string;\n repeatPassword: string;\n}\n\nconst SignUp = (props: Props) => {\n const history = useHistory();\n const { isAuthenticated, signup, signin } = useContext(AuthContext);\n const { showErrorNotification, showWarningNotification } =\n useContext(NotificationContext);\n const initialValues: ISignUpValue = {\n email: DEFAULT_EMAIL,\n password: DEFAULT_PASSWORD,\n repeatPassword: DEFAULT_PASSWORD,\n };\n const { values, handleSubmit, handleChange, errors, touched, handleBlur } =\n useFormik({\n initialValues,\n validationSchema: validationsForm,\n onSubmit: async ({ email, password, repeatPassword }) => {\n const result = await signup({ email, password, repeatPassword });\n if (result.success) {\n await signin({\n email,\n password,\n });\n showWarningNotification(\"Please update your profile\");\n history.push(ERoutePath.profile);\n } else {\n showErrorNotification(\n result.error ?? \"Unable to signup, please try again later.\"\n );\n }\n },\n });\n const { classes } = props;\n const [open, setOpen] = React.useState(true);\n\n const handleClose = () => {\n setOpen(false);\n };\n const signUpWelcomeMessage = ``;\n if (isAuthenticated) {\n return null;\n }\n\n return (\n \n
\n \n Sign Up \n \n \n \n \n {signUpWelcomeMessage}\n \n \n \n \n \n \n \n \n \n \n \n \n \n Already registered\n \n \n \n \n \n \n
\n \n );\n};\n\nexport default withStyles(styles)(SignUp);\n","import {\n AddTournamentDocument,\n AddTournamentEnrolmentDocument,\n AddTournamentEnrolmentInput,\n AddTournamentEnrolmentMutation,\n AddTournamentInput,\n AddTournamentMutation,\n ChangeTournamentInput,\n ChangeTournamentStatusDocument,\n ChangeTournamentStatusMutation,\n DeleteTournamentDocument,\n DeleteTournamentInput,\n DeleteTournamentMutation,\n GetTournamentEnrolmentsDocument,\n GetTournamentEnrolmentsInput,\n GetTournamentEnrolmentsQuery,\n GetTournamentsDocument,\n GetTournamentsQuery,\n UpdateTournamentDocument,\n UpdateTournamentInput,\n UpdateTournamentMutation,\n} from \"../generated/graphql\";\nimport { client } from \"./client\";\n\nexport const addTournament = async ({\n price,\n name,\n startDate,\n}: AddTournamentInput) =>\n (\n await client.mutate({\n mutation: AddTournamentDocument,\n variables: {\n param: {\n startDate,\n name,\n price,\n },\n },\n })\n ).data?.addTournament;\n\nexport const updateTournament = async ({\n id,\n price,\n name,\n startDate,\n}: UpdateTournamentInput) =>\n (\n await client.mutate({\n mutation: UpdateTournamentDocument,\n variables: {\n param: {\n id,\n name,\n startDate,\n price,\n },\n },\n })\n ).data?.updateTournament;\n\nexport const getTournaments = async () =>\n (\n await client.query({\n query: GetTournamentsDocument,\n })\n ).data?.getTournaments;\n\nexport const getTournamentEnrolments = async (\n param: GetTournamentEnrolmentsInput\n) =>\n (\n await client.query({\n query: GetTournamentEnrolmentsDocument,\n variables: {\n param,\n },\n })\n ).data?.getTournamentEnrolments;\n\nexport const addTournamentEnrolment = async ({\n userId,\n playerIds,\n tournamentIds,\n amount,\n totalAmount,\n}: AddTournamentEnrolmentInput) =>\n (\n await client.mutate({\n mutation: AddTournamentEnrolmentDocument,\n variables: {\n param: {\n userId,\n playerIds,\n tournamentIds,\n amount,\n totalAmount,\n },\n },\n })\n ).data?.addTournamentEnrolment;\n\nexport const deleteTournament = async ({ id }: DeleteTournamentInput) =>\n (\n await client.mutate({\n mutation: DeleteTournamentDocument,\n variables: {\n param: {\n id,\n },\n },\n })\n ).data?.deleteTournament;\n\nexport const changeTournamentStatus = async ({\n id,\n status,\n}: ChangeTournamentInput) =>\n (\n await client.mutate({\n mutation: ChangeTournamentStatusDocument,\n variables: {\n param: {\n id,\n status,\n },\n },\n })\n ).data?.changeTournamentStatus;\n","import { Paper } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport { RowParams, RowSelectedParams } from \"@material-ui/data-grid\";\nimport React from \"react\";\nimport {\n HolidayCourse,\n Tournament,\n TournamentEnrolment,\n} from \"../generated/graphql\";\nimport CustomizedDataGrid from \"./CustomizedDataGrid\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n container: {\n height: \"30vh\",\n overflowY: \"auto\",\n width: \"95%\",\n marginTop: \"8px\",\n },\n root: {\n backgroundColor: \"yellow\",\n },\n });\n\nexport interface Props extends WithStyles {\n tournaments: Tournament[];\n onSelectedTournament?: (\n selectedTournament: Tournament,\n selected: boolean\n ) => void;\n}\n\nexport interface ITournamentRow {\n id: string;\n date: string;\n name: string;\n price: string;\n}\n\nfunction TournamentList(props: Props) {\n const { classes, tournaments, onSelectedTournament } = props;\n const columns = [\n { field: \"name\", headerName: \"Name\", width: 170 },\n { field: \"date\", headerName: \"Date\", width: 170 },\n { field: \"price\", headerName: \"Price\", width: 100 },\n ];\n\n const rows: ITournamentRow[] = tournaments.map(\n ({ id, price, name, startDate }: Tournament) => ({\n id,\n price: `$${price}`,\n name,\n date: startDate,\n })\n );\n\n const handleRowSelected = (rowParam: RowSelectedParams) => {\n if (onSelectedTournament) {\n const foundTournament = tournaments.find(\n (t) => t.id === rowParam.data.id\n );\n if (foundTournament) {\n onSelectedTournament(foundTournament, rowParam.isSelected);\n }\n }\n };\n return (\n \n \n \n );\n}\n\nexport default withStyles(styles)(TournamentList);\n","import { Paper } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport { RowModel, RowParams } from \"@material-ui/data-grid\";\nimport React, { useContext } from \"react\";\nimport { AuthContext } from \"../context/AuthContext\";\nimport { GetTournamentEnrolmentsResp, ERole } from \"../generated/graphql\";\nimport CustomizedDataGrid from \"./CustomizedDataGrid\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n container: {\n height: \"70vh\",\n overflowY: \"auto\",\n width: \"95%\",\n },\n root: {\n backgroundColor: \"yellow\",\n },\n });\n\nexport interface Props extends WithStyles {\n tournamentEnrolments: GetTournamentEnrolmentsResp[];\n onSelectedEnrolment?: (selectedEnrolmnt: GetTournamentEnrolmentsResp) => void;\n}\n\nexport interface IHolidayCourseRow {\n id: string;\n date: string;\n time: string;\n}\n\nfunction TournamentEnrolmentList(props: Props) {\n const { userProfile } = useContext(AuthContext);\n const { classes, tournamentEnrolments, onSelectedEnrolment } = props;\n\n const handleRowClick = ({ rowIndex }: RowParams) => {\n if (onSelectedEnrolment) {\n onSelectedEnrolment(tournamentEnrolments[rowIndex]);\n }\n };\n const columns = [\n { field: \"name\", headerName: \"Tournament\", width: 170 },\n { field: \"players\", headerName: \"Players\", width: 100 },\n { field: \"price\", headerName: \"Price\", width: 100 },\n { field: \"date\", headerName: \"Date\", width: 170 },\n { field: \"status\", headerName: \"Status\", width: 170 },\n ];\n if (userProfile?.role === ERole.Admin) {\n columns.push({\n field: \"enrolDate\",\n headerName: \"EnrolDate\",\n width: 170,\n });\n }\n\n const rows: RowModel[] = [];\n tournamentEnrolments\n .filter((enrolment) => enrolment.tournaments.length > 0)\n .forEach((enrolment, enrolmentIdx) => {\n rows.push(\n ...enrolment.tournaments.map((x, idx) => ({\n id: `${enrolmentIdx}-${enrolment?.tournamentIds?.[idx]}`,\n name: x.name,\n date: x.startDate,\n price: x.price,\n players: enrolment.players\n .map((x) => `${x.firstName} ${x.lastName}`)\n .join(\";\"),\n enrolDate: enrolment.enrolDate,\n status: enrolment.status,\n }))\n );\n });\n\n return (\n \n \n \n );\n}\n\nexport default withStyles(styles)(TournamentEnrolmentList);\n","import {\n Button,\n Checkbox,\n Dialog,\n DialogContent,\n FormControlLabel,\n FormGroup,\n Grid,\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n Typography,\n} from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n WithStyles,\n withStyles,\n} from \"@material-ui/core/styles\";\nimport { DateTime } from \"luxon\";\nimport React, { Fragment, useContext, useEffect, useState } from \"react\";\nimport { useImmer } from \"use-immer\";\nimport { getPlayers } from \"../api/player.service\";\nimport { AuthContext } from \"../context/AuthContext\";\nimport { LoadingContext } from \"../context/LoadingContext\";\nimport { NotificationContext } from \"../context/NotificationContext\";\nimport EmptyInfo from \"../EmptyInfo\";\nimport {\n EPaymentStatus,\n ERole,\n GetTournamentEnrolmentsInput,\n GetTournamentEnrolmentsResp,\n Player,\n Tournament,\n} from \"../generated/graphql\";\nimport getPlayerName from \"../utils/getPlayerName\";\nimport DialogTitle from \"./DialogTitle\";\nimport FormContainer from \"./FormContainer\";\nimport FormRow from \"./FormRow\";\nimport FormTitle from \"./FormTitle\";\nimport HolidayEnrolmentList from \"./HolidayEnrolmentList\";\nimport {\n addTournamentEnrolment,\n getTournamentEnrolments,\n getTournaments,\n} from \"../api/tournament.service\";\nimport TournamentList from \"./TournamentList\";\nimport TournamentEnrolmentList from \"./TournamentEnrolmentList\";\nimport PaymentForm from \"./PaymentForm\";\nimport { applyPaymentAmount } from \"../utils/paymentAmount\";\nconst styles = (theme: Theme) =>\n createStyles({\n container: {},\n paperWidthSm: {\n maxWidth: \"80em\",\n },\n button: {\n marginTop: theme.spacing(1),\n marginRight: theme.spacing(1),\n },\n actionsContainer: {\n marginBottom: theme.spacing(2),\n },\n resetContainer: {\n padding: theme.spacing(3),\n },\n });\n\nexport interface Props extends WithStyles {}\n\nconst steps = [\n \"Please select player\",\n \"Please select a tournament\",\n \"Enrol now\",\n];\n\nfunction TournamentEnrolment(props: Props) {\n const { classes } = props;\n const [activeStep, setActiveStep] = useState(0);\n const { userProfile } = useContext(AuthContext);\n const [openEnrolmentDlg, setOpenEnrolmentDlg] = useState(false);\n const { showLoading, hideLoading } = useContext(LoadingContext);\n const { showSuccessNotification, showErrorNotification } =\n useContext(NotificationContext);\n const [loadedData, setLoadedData] = useState(false);\n const [confirmed, setConfirmed] = useState(false);\n const [selectedEnrolment, setSelectedEnrolment] =\n useState(null);\n const handleClose = () => {\n setEnrolmentData((draft) => {\n draft.selectedPlayers = [];\n draft.selectedTournaments = [];\n });\n setOpenEnrolmentDlg(false);\n };\n\n const handleChange = (event: any) => {\n setConfirmed(!confirmed);\n };\n\n const [enrolmentData, setEnrolmentData] = useImmer<{\n tournaments: Tournament[];\n players: any[];\n enrolments: any[];\n selectedPlayers: any[];\n selectedTournaments: Tournament[];\n amount: number;\n }>({\n tournaments: [],\n players: [],\n enrolments: [],\n selectedPlayers: [],\n selectedTournaments: [],\n amount: 0,\n });\n\n const [selectedPlayerList, setSelectedPlayerList] = useImmer<\n {\n id: string;\n selected: boolean;\n }[]\n >([]);\n\n const retrieveData = async () => {\n showLoading();\n setLoadedData(false);\n const param: GetTournamentEnrolmentsInput =\n userProfile?.role === ERole.Admin ? {} : { userId: userProfile?.id };\n const parentId = userProfile?.role === ERole.Admin ? \"\" : userProfile?.id;\n const [tournaments, players, enrolments] = await Promise.all([\n getTournaments(),\n getPlayers({ parentId }),\n getTournamentEnrolments(param),\n ]);\n\n setEnrolmentData((draft) => {\n if (players) {\n draft.players = players;\n }\n if (enrolments) {\n draft.enrolments = enrolments;\n }\n if (tournaments) {\n draft.tournaments = tournaments;\n }\n\n hideLoading();\n setLoadedData(false);\n });\n };\n\n useEffect(() => {\n retrieveData();\n }, []);\n\n const handleSelectedTournament = (\n tournament: Tournament,\n selected: boolean\n ) => {\n setEnrolmentData((draft) => {\n if (selected) {\n draft.selectedTournaments.push(tournament);\n } else {\n const foundTournamentIndex = draft.selectedTournaments.findIndex(\n (t) => t.id === tournament.id\n );\n if (foundTournamentIndex >= 0) {\n draft.selectedTournaments.splice(foundTournamentIndex, 1);\n }\n }\n\n const totalPrice = draft.selectedTournaments.reduce(\n (a: number, c: Tournament): number => {\n return a + c?.price ?? 0;\n },\n 0\n );\n draft.amount = enrolmentData.selectedPlayers.length * totalPrice;\n });\n };\n\n const handleSelectedTournamentEnrolment = (\n enrolment: GetTournamentEnrolmentsResp\n ) => {\n setSelectedEnrolment(enrolment);\n };\n\n const selectTournamentStep = () => (\n <>\n {\n return !enrolmentData.enrolments\n .filter((en) => en.status === \"Paid\")\n .find((en) => en.tournamentIds.includes(tournament.id));\n })}\n onSelectedTournament={handleSelectedTournament}\n />\n \n );\n\n const handleSelectdPlayer = (player: Player) => (evt: any) => {\n setSelectedPlayerList((draft) => {\n const foundPlayer = draft.find((p) => p.id === player.id);\n if (foundPlayer) {\n foundPlayer.selected = !foundPlayer.selected;\n } else {\n draft.push({\n id: player.id,\n selected: true,\n });\n }\n setEnrolmentData((x) => {\n x.selectedPlayers = x.players.filter((xx) => {\n const f = draft.find((yy) => yy.id === xx.id && yy.selected);\n return !!f;\n });\n\n const totalPrice = x.selectedTournaments.reduce(\n (a: number, c: Tournament): number => {\n return a + c?.price ?? 0;\n },\n 0\n );\n x.amount = x.selectedPlayers.length * totalPrice;\n });\n });\n };\n\n const isPlayerSelected = (player: Player) =>\n // !!selectedPlayerList.find((p) => p.id === player.id && p.selected);\n !!enrolmentData.selectedPlayers.find((p) => p.id === player.id);\n\n const selectPlayerStep = () => (\n \n {enrolmentData.players.map((player: Player) => (\n \n \n \n \n \n \n ))}\n \n );\n\n function getStepContent(step: number) {\n switch (step) {\n case 0:\n return selectPlayerStep();\n case 2:\n return ;\n default:\n return \"Unknown step\";\n }\n }\n\n const handleStepClick = (stepIndex: number) => () => {\n setActiveStep(stepIndex);\n };\n const onResult = async ({\n succeed,\n paymentId,\n paymentMethod,\n }: {\n succeed: boolean;\n paymentId?: string;\n paymentMethod?: string;\n }) => {\n if (succeed && paymentId && paymentMethod) {\n showSuccessNotification(\"Payment finished\");\n setOpenEnrolmentDlg(false);\n } else {\n showErrorNotification(\"Payment failure\");\n }\n setOpenEnrolmentDlg(false);\n };\n\n const submitForm = async () => {\n return await addTournamentEnrolment({\n userId: userProfile?.id,\n // paymentCode: enrolmentData.paymentCode,\n playerIds: enrolmentData.selectedPlayers.map((p) => p.id),\n // tournamentId: enrolmentData.selectedTournament?.id,\n tournamentIds: enrolmentData.selectedTournaments.map((t) => t.id),\n amount: enrolmentData.amount,\n totalAmount: applyPaymentAmount(enrolmentData.amount),\n });\n };\n\n const isPlayersSelected = enrolmentData.selectedPlayers.length > 0;\n\n const canBeEnroled =\n enrolmentData.selectedTournaments.length > 0 && isPlayersSelected;\n\n return (\n \n \n \n \n \n {enrolmentData.enrolments?.length > 0 && (\n \n )}\n {enrolmentData?.enrolments?.length === 0 && (\n \n )}\n \n {userProfile?.role !== ERole.Admin && (\n \n {\n setEnrolmentData((draft) => {});\n setOpenEnrolmentDlg(true);\n }}\n >\n Enrol a tournament\n \n \n )}\n {/* {userProfile?.role === ERole.Admin && (\n \n {}}\n >\n Enrolment detail\n \n \n )} */}\n \n \n {\n \n \n Enrol\n \n \n \n \n Please select players\n {selectPlayerStep()}\n \n \n \n Please select tournaments you want to enrol\n \n {selectTournamentStep()}\n \n \n {canBeEnroled && (\n \n )}\n \n \n \n \n }\n \n );\n}\n\nexport default withStyles(styles)(TournamentEnrolment);\n","import { Button, Grid, TextField } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport { useFormik } from \"formik\";\nimport React, { useContext } from \"react\";\nimport * as yup from \"yup\";\nimport {\n addHolidayCourse,\n deleteHolidayCourse,\n setHolidayCourseStatus,\n updateHolidayCourse,\n} from \"../api/holidayCourse.service\";\nimport {\n addTournament,\n changeTournamentStatus,\n deleteTournament,\n updateTournament,\n} from \"../api/tournament.service\";\nimport { LoadingContext } from \"../context/LoadingContext\";\nimport { NotificationContext } from \"../context/NotificationContext\";\nimport {\n AddHolidayCourseInput,\n AddHolidayCourseResp,\n AddTournamentInput,\n ECourseStatus,\n EStatus,\n HolidayCourse,\n Tournament,\n UpdateHolidayCourseInput,\n UpdateHolidayCourseResp,\n UpdateTournamentInput,\n} from \"../generated/graphql\";\nimport FormContainer from \"./FormContainer\";\nimport FormRow from \"./FormRow\";\nimport { DateTime } from \"luxon\";\nconst styles = (theme: Theme) => createStyles({});\n\nexport interface Props extends WithStyles {\n onClose: () => void;\n onNewTournament: (tourament: Tournament) => void;\n onTournamentUpdated: (tourament: Tournament) => void;\n onTournamentDeleted: (id: string) => void;\n tournament: Tournament | null;\n}\n\nfunction TournamentDetail({\n classes,\n onClose,\n onNewTournament,\n onTournamentUpdated,\n onTournamentDeleted,\n tournament,\n}: Props) {\n const isNewTournament = !!!tournament;\n\n const initialValues = {\n startDate: tournament?.startDate ?? DateTime.now().toISODate(),\n name: tournament?.name ?? \"\",\n price: tournament?.price ?? 20,\n };\n const { showLoading, hideLoading } = useContext(LoadingContext);\n const { showErrorNotification, showSuccessNotification } =\n useContext(NotificationContext);\n\n const validationSchema = yup.object().shape({\n name: yup.string().required(\"Enter your touranment name\"),\n price: yup.number().required(\"Enter price\"),\n });\n const { values, handleSubmit, handleChange, setFieldValue } = useFormik({\n initialValues,\n validationSchema,\n onSubmit: async (v) => {\n const { startDate, name, price } = v;\n\n try {\n showLoading();\n if (isNewTournament) {\n const addTournamentParam: AddTournamentInput = {\n name,\n price,\n startDate,\n };\n const createdTournament = await addTournament(addTournamentParam);\n showSuccessNotification(\"Tournament created\");\n if (createdTournament) {\n onNewTournament(createdTournament);\n }\n } else {\n const updateParam: UpdateTournamentInput = {\n id: tournament?.id,\n name,\n price,\n startDate,\n };\n const updatedTournament = await updateTournament(updateParam);\n showSuccessNotification(\"Tournament updated\");\n if (updatedTournament) {\n onTournamentUpdated(updatedTournament);\n }\n }\n onClose();\n } catch (e) {\n showErrorNotification(\"please try again later\");\n } finally {\n hideLoading();\n }\n },\n });\n\n const handleDisableTournament = (status: EStatus) => async () => {\n await changeTournamentStatus({ id: tournament?.id, status });\n // onTournamentDeleted(tournament?.id);\n onClose();\n };\n\n return (\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {isNewTournament\n ? \"Save a new tournament\"\n : \"Update tournament\"}\n \n \n {tournament && (\n \n \n {tournament.status === EStatus.Active\n ? \"Disable this tournament\"\n : \"Enable this tournament\"}\n \n \n )}\n \n \n \n
\n );\n}\n\nexport default withStyles(styles)(TournamentDetail);\n","import {\n Button,\n Checkbox,\n Dialog,\n DialogContent,\n Grid,\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n Typography,\n} from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n WithStyles,\n withStyles,\n} from \"@material-ui/core/styles\";\nimport { DateTime } from \"luxon\";\nimport React, { Fragment, useContext, useEffect, useState } from \"react\";\nimport { useImmer } from \"use-immer\";\nimport { addEnrolment, getEnrolments } from \"../api/enrolment.service\";\nimport { getHolidayCourses } from \"../api/holidayCourse.service\";\nimport { getPlayers } from \"../api/player.service\";\nimport HolidayCourseList from \"./HolidayCourseList\";\nimport { AuthContext } from \"../context/AuthContext\";\nimport { LoadingContext } from \"../context/LoadingContext\";\nimport { NotificationContext } from \"../context/NotificationContext\";\nimport EmptyInfo from \"../EmptyInfo\";\nimport { Tournament } from \"../generated/graphql\";\nimport DialogTitle from \"./DialogTitle\";\nimport FormContainer from \"./FormContainer\";\nimport FormRow from \"./FormRow\";\nimport FormTitle from \"./FormTitle\";\nimport TournamentDetail from \"./TournamentDetail\";\nimport TournamentList from \"./TournamentList\";\nimport { getTournaments } from \"../api/tournament.service\";\nconst styles = (theme: Theme) =>\n createStyles({\n container: {},\n paperWidthSm: {\n maxWidth: \"80em\",\n },\n button: {\n marginTop: theme.spacing(1),\n marginRight: theme.spacing(1),\n },\n actionsContainer: {\n marginBottom: theme.spacing(2),\n },\n resetContainer: {\n padding: theme.spacing(3),\n },\n });\n\nexport interface Props extends WithStyles {}\n\nconst steps = [\"Please select player\", \"Please select a course\", \"Enrol now\"];\n\nfunction Tournaments(props: Props) {\n const { classes } = props;\n const [tournaments, setTournaments] = useImmer([]);\n const { showLoading, hideLoading } = useContext(LoadingContext);\n const [addNewTournament, setAddNewTournament] = useState(false);\n const [selectedTournament, setSelectedTournament] =\n useState(null);\n\n const handleAddNewTournment = () => {\n setAddNewTournament(true);\n };\n\n const handleNewTournmentAdded = (newTournment: Tournament) => {\n setTournaments((draft: Tournament[]) => {\n draft.push(newTournment);\n });\n };\n\n const handleSelectedTournament = (tournament: Tournament) => {\n setSelectedTournament(tournament);\n };\n\n const handleClose = () => {\n setAddNewTournament(false);\n setSelectedTournament(null);\n };\n\n const handleUpdated = (updatedTournament: Tournament) => {\n setTournaments((draft: Tournament[]) => {\n const idx = draft.findIndex(\n (t: Tournament) => t.id === updatedTournament.id\n );\n draft[idx] = updatedTournament;\n });\n };\n\n const handleDeleted = () => {};\n\n const retrieveTournaments = async () => {\n showLoading();\n\n const tournaments = (await getTournaments()) as Tournament[];\n setTournaments((draft: Tournament[]) => {\n if (tournaments) {\n draft.push(...tournaments);\n }\n });\n hideLoading();\n };\n\n useEffect(() => {\n retrieveTournaments();\n }, []);\n\n const getDialogTitle = () => (\n \n {selectedTournament ? \"Update tourament\" : \"Add a new tournament\"}\n \n );\n\n return (\n \n \n \n \n \n {tournaments.length > 0 && (\n \n )}\n {tournaments.length === 0 && (\n \n )}\n \n \n \n Add a new tournment\n \n \n \n \n \n {getDialogTitle()}\n \n \n \n \n \n );\n}\n\nexport default withStyles(styles)(Tournaments);\n","import {\n createStyles,\n Theme,\n WithStyles,\n withStyles\n} from \"@material-ui/core/styles\";\nimport { useContext } from \"react\";\nimport { useHistory } from \"react-router\";\nimport { AuthContext } from \"../context/AuthContext\";\nimport ERoutePath from \"../routes/ERoutePath\";\nconst styles = ({ palette, spacing, mixins, breakpoints }: Theme) =>\n createStyles({\n root: {\n display: \"grid\",\n gridTemplateAreas: `\"header\"\n \"section\"\n `,\n // gridTemplateRows: `${mixins.toolbar.minHeight}px 1fr 8rem auto`,\n gridTemplateColumns: \"1fr\",\n // height: \"100vh\",\n },\n header: { gridArea: \"header\" },\n section: {\n gridArea: \"section\",\n display: \"grid\",\n justifyItems: \"center\",\n padding: \"4.5rem 2rem 0 2rem\",\n },\n contentContainer: {\n maxWidth: \"122rem\",\n width: \"100%\",\n },\n sectionNoPadding: {\n gridArea: \"section\",\n width: \"100vw\"\n },\n footer: {\n gridArea: \"footer\",\n padding: spacing(2),\n background: palette.primary.main,\n color: \"white\",\n textAlign: \"center\",\n height: \"20px\",\n width: \"100%\",\n position: \"fixed\",\n bottom: \"10px\",\n },\n });\n\ninterface Props extends WithStyles {\n children: JSX.Element;\n padding: boolean;\n}\n\nexport const HomePageLayout = ({ classes, children, padding }: Props) => {\n // const bannerTitle1 = \"Vivian Table Tennis Academy\";\n const { isAuthenticated, userProfile } = useContext(AuthContext);\n const history = useHistory();\n if (isAuthenticated) {\n if (!userProfile) {\n history.push(ERoutePath.profile);\n } else {\n history.push(ERoutePath.enrolments);\n }\n }\n return (\n
\n {/*
\n
\n
*/}\n {padding && (\n
\n
{children}
\n
\n )}\n {!padding && (\n
\n {/* */}\n {children}\n {/*
{
}
*/}\n
\n )}\n
\n );\n};\n\nexport const Layout = withStyles(styles)(\n ({ classes, children }: { classes: any; children?: any }) => (\n \n )\n);\n\nexport default withStyles(styles)(HomePageLayout);\n","import { ERole } from \"../generated/graphql\";\nimport { IRoute } from \"../routes\";\n\nconst filterByRole = (role: ERole) => (route: IRoute) =>\n route.access.indexOf(role) !== -1;\n\nconst filterByNavMenu = (route: IRoute) => route.onNavMenu;\n\nexport const onNavMenuRoutes = (allRoutes: IRoute[], role: ERole) =>\n allRoutes.filter(filterByNavMenu).filter(filterByRole(role));\n","import { ListItem, ListItemIcon, ListItemText } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n WithStyles,\n withStyles,\n} from \"@material-ui/core/styles\";\nimport React from \"react\";\nimport { NavLink } from \"react-router-dom\";\nimport { IRoute } from \"../routes\";\n\nconst styles = ({ palette: { primary, common } }: Theme) =>\n createStyles({\n iconRoot: {\n minWidth: 45,\n },\n listItemRoot: ({ isCurrentPath }: any) => ({\n backgroundColor: isCurrentPath ? primary.light : undefined,\n \"&:hover\": {\n backgroundColor: primary.main,\n },\n \"&:focus\": {\n backgroundColor: primary.main,\n color: common.white,\n },\n }),\n });\ninterface Props extends WithStyles {\n route: IRoute;\n}\n\nconst RenderRouteItem = (props: Props) => {\n const {\n classes,\n route: { path, title, icon },\n } = props;\n return (\n (\n \n )) as any\n }\n button\n classes={{\n root: classes.listItemRoot,\n }}\n >\n {icon && (\n \n {icon}\n \n )}\n \n \n );\n};\n\nexport default withStyles(styles)(RenderRouteItem);\n","import { IconButton } from \"@material-ui/core\";\nimport Drawer, { DrawerProps } from \"@material-ui/core/Drawer\";\nimport List from \"@material-ui/core/List\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport CloseIcon from \"@material-ui/icons/Cancel\";\nimport { Omit } from \"@material-ui/types\";\nimport React, { useContext } from \"react\";\nimport { AuthContext } from \"../context/AuthContext\";\nimport { ERole } from \"../generated/graphql\";\nimport { routes } from \"../routes\";\nimport { onNavMenuRoutes } from \"../utils/filterRoutes\";\nimport RenderRouteItem from \"./RenderRouteItem\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n categoryHeader: {\n paddingTop: theme.spacing(2),\n paddingBottom: theme.spacing(2),\n },\n categoryHeaderPrimary: {\n color: theme.palette.common.white,\n },\n item: {\n paddingTop: 1,\n paddingBottom: 1,\n \"&:hover\": {\n backgroundColor: theme.palette.primary.light,\n color: \"rgba(255, 255, 255, 0.7)\",\n },\n \"&:focus\": {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.common.white,\n },\n },\n itemCategory: {\n backgroundColor: \"#232f3e\",\n boxShadow: \"0 -1px 0 #404854 inset\",\n paddingTop: theme.spacing(2),\n paddingBottom: theme.spacing(2),\n },\n itemPrimary: {\n fontSize: \"inherit\",\n },\n itemIcon: {\n minWidth: \"auto\",\n marginRight: theme.spacing(2),\n color: theme.palette.primary.main,\n },\n divider: {\n marginTop: theme.spacing(2),\n },\n });\n\nexport interface NavigatorProps\n extends Omit,\n WithStyles {\n onClose: () => void;\n}\n\nfunction Navigator(props: NavigatorProps) {\n const { classes, onClose, ...other } = props;\n\n const { userProfile } = useContext(AuthContext);\n const myRoutes = onNavMenuRoutes(routes, userProfile?.role ?? ERole.Public);\n return (\n \n \n \n \n \n {myRoutes.map((myRoute, n) => (\n \n ))}\n \n \n );\n}\n\nexport default withStyles(styles)(Navigator);\n","import { Typography } from \"@material-ui/core\";\nimport PersonOutline from \"@material-ui/icons/PersonOutline\";\nimport React, { memo } from \"react\";\nimport { User } from \"../generated/graphql\";\nimport getUserFullName from \"../utils/getUserFullName\";\n\ninterface IProps {\n user: User | null | undefined;\n}\n\nconst getUserNameInitials = (name: string) => {\n const initials = name.match(/\\b\\w/g) || [];\n return ((initials.shift() ?? \"\") + (initials.pop() ?? \"\")).toUpperCase();\n};\n\nconst NameInitial = ({ user }: IProps) => {\n const name = user ? getUserFullName(user) : \"Unknown\";\n const initial = getUserNameInitials(name);\n return initial ? (\n {initial}\n ) : (\n \n );\n};\nexport default memo(NameInitial);\n","import { IconButton, Menu, MenuItem } from \"@material-ui/core\";\nimport React, { Fragment } from \"react\";\nimport { useHistory } from \"react-router\";\nimport { AuthContext } from \"../context/AuthContext\";\nimport { IRoute, routes } from \"../routes\";\nimport NameInitial from \"./NameInitial\";\n\nconst ITEM_HEIGHT = 48;\n\nconst UserMenu = () => {\n const { user, userProfile } = React.useContext(AuthContext);\n const history = useHistory();\n const [anchorEl, setAnchorEl] = React.useState(null);\n const open = Boolean(anchorEl);\n\n const handleClick = (event: React.MouseEvent) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const getMaxHeight = (itemCount: number) => ITEM_HEIGHT * (itemCount + 1);\n\n const menuItems = routes.filter((route: IRoute) => route.onUserMenu);\n\n return (\n \n \n \n \n \n {menuItems.map((route) => (\n {\n handleClose();\n history.push(route.path);\n }}\n >\n {route.title}\n \n ))}\n \n \n );\n};\n\nexport default UserMenu;\n","import { Button, Hidden, IconButton } from \"@material-ui/core\";\nimport AppBar from \"@material-ui/core/AppBar\";\nimport Grid from \"@material-ui/core/Grid\";\nimport {\n createStyles,\n Theme,\n withStyles,\n WithStyles,\n} from \"@material-ui/core/styles\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\nimport MenuIcon from \"@material-ui/icons/Menu\";\nimport React, { Fragment, useContext, useEffect, useState } from \"react\";\nimport { useHistory } from \"react-router\";\nimport { AuthContext } from \"../context/AuthContext\";\nimport { IUser } from \"../model/IUser\";\nimport ERoutePath from \"../routes/ERoutePath\";\nimport Navigator from \"./Navigator\";\nimport UserMenu from \"./UserMenu\";\n\nconst lightColor = \"rgba(255, 255, 255, 0.7)\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n container: {\n background: theme.palette.common.white,\n },\n secondaryBar: {\n zIndex: 0,\n },\n menuButton: {\n marginLeft: -theme.spacing(1),\n },\n iconButtonAvatar: {\n padding: 4,\n },\n link: {\n textDecoration: \"none\",\n color: lightColor,\n \"&:hover\": {\n color: theme.palette.common.white,\n },\n },\n button: {\n borderColor: lightColor,\n },\n });\n\ninterface HeaderProps extends WithStyles {}\n\nfunction Header(props: HeaderProps) {\n const { classes } = props;\n const { isAuthenticated, user } = useContext(AuthContext);\n const [currentUser, setCurrentUser] = useState(null);\n const [drawerOpen, setDrawerOpen] = useState(false);\n const history = useHistory();\n useEffect(() => {\n setCurrentUser(user);\n }, []);\n\n const onClick = (path: string) => () => {\n if (currentUser && path === ERoutePath.home) {\n // if user clicks home button, renavigate to .com.au site\n window.open(\"https://viviantabletennis.com\", \"_self\");\n } else {\n history.push(path);\n }\n };\n const handleSignUp = onClick(ERoutePath.signup);\n const handleSignIn = onClick(ERoutePath.signin);\n const handleGoHome = onClick(ERoutePath.home);\n\n const handleDrawer = (open: boolean) => () => setDrawerOpen(open);\n const handleDrawerOpen = handleDrawer(true);\n const handleDrawerClose = handleDrawer(false);\n\n return (\n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n {!isAuthenticated && (\n \n \n \n Sign in\n \n \n \n \n Sign up\n \n \n \n )}\n {isAuthenticated && (\n \n \n \n )}\n \n \n \n \n );\n}\n\nexport default withStyles(styles)(Header);\n","import { Drawer, Theme } from \"@material-ui/core\";\nimport List from \"@material-ui/core/List\";\nimport { createStyles, makeStyles } from \"@material-ui/styles\";\nimport React, { useContext } from \"react\";\nimport RenderRouteItem from \"../../components/RenderRouteItem\";\nimport { AuthContext } from \"../../context/AuthContext\";\nimport { ERole } from \"../../generated/graphql\";\nimport { routes } from \"../../routes\";\nimport { onNavMenuRoutes } from \"../../utils/filterRoutes\";\n\nconst useStyles = makeStyles(({ palette: { primary, common } }: Theme) =>\n createStyles({\n drawerPaper: {\n width: 250,\n zIndex: 1000,\n paddingTop: 60,\n },\n menuContainer: {\n padding: \"0 19px\",\n },\n })\n);\n\nexport default () => {\n const classes = useStyles({});\n const { userProfile } = useContext(AuthContext);\n const myRoutes = onNavMenuRoutes(routes, userProfile?.role ?? ERole.Public);\n return (\n \n
\n \n {myRoutes.map((route) => (\n \n {}\n \n ))}\n \n
\n \n );\n};\n","import { Hidden } from \"@material-ui/core\";\nimport { Theme, withStyles, WithStyles } from \"@material-ui/core/styles\";\nimport { createStyles } from \"@material-ui/styles\";\nimport React, { useContext } from \"react\";\nimport { useHistory } from \"react-router\";\nimport Header from \"../../components/Header\";\nimport { AuthContext } from \"../../context/AuthContext\";\nimport NavMenu from \"./NavMenu\";\n\nconst styles = ({ spacing, breakpoints }: Theme) =>\n createStyles({\n root: {\n display: \"grid\",\n gridTemplateAreas: `\n \"header header\"\n \"nav section\"`,\n gridTemplateColumns: \"240px 1fr\",\n gridTemplateRows: \"64px 1fr\",\n minHeight: \"100vh\",\n [breakpoints.down(\"sm\")]: {\n gridTemplateAreas: `\n \"header\"\n \"section\"`,\n gridTemplateColumns: \"1fr\",\n gridTemplateRows: \"64px 1fr\",\n },\n },\n header: { gridArea: \"header\" },\n nav: {\n gridArea: \"nav\",\n },\n section: {\n overflowY: \"scroll\",\n height: \"90vh\",\n gridArea: \"section\",\n [breakpoints.down(\"sm\")]: {\n padding: `${spacing(1)}px ${spacing(1)}px`,\n },\n padding: `${spacing(1)}px ${spacing(3)}px`,\n },\n });\n\ninterface Props extends WithStyles {\n children: JSX.Element;\n}\n\nconst LayoutComponent = ({ classes, children }: Props) => {\n const { isAuthenticated } = useContext(AuthContext);\n const history = useHistory();\n\n return (\n \n
\n
\n
\n
\n \n \n \n
{children}
\n
\n
\n );\n};\n\nexport default withStyles(styles)(LayoutComponent);\n","export enum ERouteTitle {\n home = \"Vivian table tennis academy\",\n signup = \"Sign Up\",\n signin = \"Sign In\",\n enrolments = \"Willoughby Enrolments\",\n payments = \"Payments\",\n changePassword = \"Change password\",\n forgotPassword = \"Forgot password\",\n resetPassword = \"Reset password\",\n signout = \"Sign out\",\n profile = \"Profile\",\n players = \"Players\",\n courses = \"Courses\",\n activeKidsVoucheres = \"Active kids vouchers\",\n holidayCourses = \"Holiday Courses\",\n holidayCoursesEnrolment = \"Holiday Enrolments\",\n schoolEnrolment = \"School Enrolments\",\n tournaments = \"Tournaments\",\n tournamentEnrolment = \"Tournament enrolment\",\n makeupRules = \"Makeup Rules\",\n timeTable = \"Classes time table\",\n holidayCampsTimeTable = \"Holiday Camps time table\",\n contactUs = \"Contact us\",\n holidayCamp = \"Sydney Holiday Camps | Vivian Table Tennis Academy\",\n blog = \"Blog | Vivian Table Tennis Academy Sydney\",\n blogTechniques = \"Backhand Techniques in Table Tennis | Vivian Table Tennis Academy\",\n blogForBeginners = \"5 Tips to Improve your Bat Skills in Table Tennis\",\n blogWhy = \"Reasons to Send Your Child to Holiday Programs Sydney\",\n blogActivities = \"Extracurricular Activities in Schools | Activities for Fun| Vivian TT\",\n blogThings = \"Things to do on the Holidays | Activities for the Holidays | Vivian TT\",\n}\nexport default ERouteTitle;\n","import {\n Dashboard as DashboardIcon,\n Info as MakeupRulesIcon,\n Payment as PaymentIcon,\n People as PeopleIcon,\n Person as PersonIcon,\n Settings as SettingsIcon,\n SportsTennis,\n} from \"@material-ui/icons\";\nimport React, { ComponentType, Fragment } from \"react\";\nimport ActiveKIdsVouchers from \"../components/ActiveKIdsVouchers\";\nimport BlogActivitiesPage from \"../components/BlogActivitiesPage\";\nimport BlogBeginnersPage from \"../components/BlogBeginnersPage\";\nimport BlogPage from \"../components/BlogPage\";\nimport BlogTechniquesPage from \"../components/BlogTechniquesPage\";\nimport BlogThingsPage from \"../components/BlogThingsPage\";\nimport BlogWhyPage from \"../components/BlogWhyPage\";\nimport ChangePassword from \"../components/ChangePassword\";\nimport ClassesTimeTable from \"../components/ClassesTimeTable\";\nimport ContactUs from \"../components/ContactUs\";\nimport Course from \"../components/Course\";\nimport Enrolment from \"../components/Enrolment\";\nimport ForgotPassword from \"../components/ForgotPassword\";\nimport HolidayCampPage from \"../components/HolidayCampPage\";\nimport HolidayCampsTimeTable from \"../components/HolidayCampsTimeTable\";\nimport HolidayCourseEnrolment from \"../components/HolidayCourseEnrolment\";\nimport HolidayCourses from \"../components/HolidayCourses\";\nimport HomePage from \"../components/HomePage\";\nimport MakeupRules from \"../components/MakeupRules\";\nimport Payments from \"../components/Payments\";\nimport Players from \"../components/Players\";\nimport Profile from \"../components/Profile\";\nimport ResetPassword from \"../components/ResetPassword\";\nimport SchoolEnrolment from \"../components/SchoolEnrolment\";\nimport SignIn from \"../components/SignIn\";\nimport SignOut from \"../components/SignOut\";\nimport SignUp from \"../components/SignUp\";\nimport TournamentEnrolment from \"../components/TournamentEnrolment\";\nimport Tournaments from \"../components/Tournaments\";\nimport { ERole } from \"../generated/graphql\";\nimport HomePageLayout from \"../layouts/HomePageLayout\";\nimport LayoutComponent from \"../layouts/SideMenuLayout\";\nimport ERoutePath from \"./ERoutePath\";\nimport ERouteTitle from \"./ERouteTitle\";\nimport PaymentForm from \"../components/PaymentForm\";\n\nexport interface IRoute {\n path: string;\n title: string;\n component: ComponentType;\n needRemount?: boolean;\n layout: React.ComponentType;\n icon?: any;\n onNavMenu?: boolean;\n onUserMenu?: boolean;\n access: ERole[];\n}\n\nexport const routes: IRoute[] = [\n {\n path: ERoutePath.home,\n title: ERouteTitle.home,\n component: HomePage,\n layout: HomePageLayout,\n access: [ERole.Public],\n },\n {\n path: ERoutePath.timeTable,\n title: ERouteTitle.timeTable,\n component: ClassesTimeTable,\n layout: HomePageLayout,\n access: [ERole.Public],\n },\n {\n path: ERoutePath.holidayCampsTimeTable,\n title: ERouteTitle.holidayCampsTimeTable,\n component: HolidayCampsTimeTable,\n layout: HomePageLayout,\n access: [ERole.Public],\n },\n {\n path: ERoutePath.contactUs,\n title: ERouteTitle.contactUs,\n component: ContactUs,\n layout: HomePageLayout,\n access: [ERole.Public],\n },\n {\n path: ERoutePath.holidayCamp,\n title: ERouteTitle.holidayCamp,\n component: HolidayCampPage,\n layout: HomePageLayout,\n access: [ERole.Public],\n },\n {\n path: ERoutePath.blog,\n title: ERouteTitle.blog,\n component: BlogPage,\n layout: HomePageLayout,\n access: [ERole.Public],\n },\n {\n path: ERoutePath.blogActivities,\n title: ERouteTitle.blogActivities,\n component: BlogActivitiesPage,\n layout: HomePageLayout,\n access: [ERole.Public],\n },\n {\n path: ERoutePath.blogForBeginners,\n title: ERouteTitle.blogForBeginners,\n component: BlogBeginnersPage,\n layout: HomePageLayout,\n access: [ERole.Public],\n },\n {\n path: ERoutePath.blogTechniques,\n title: ERouteTitle.blogTechniques,\n component: BlogTechniquesPage,\n layout: HomePageLayout,\n access: [ERole.Public],\n },\n {\n path: ERoutePath.blogThings,\n title: ERouteTitle.blogThings,\n component: BlogThingsPage,\n layout: HomePageLayout,\n access: [ERole.Public],\n },\n {\n path: ERoutePath.blogWhy,\n title: ERouteTitle.blogWhy,\n component: BlogWhyPage,\n layout: HomePageLayout,\n access: [ERole.Public],\n },\n {\n path: ERoutePath.home2,\n title: ERouteTitle.home,\n component: Fragment,\n layout: HomePageLayout,\n access: [ERole.Public],\n },\n {\n path: ERoutePath.signup,\n title: ERouteTitle.signup,\n component: SignUp,\n needRemount: true,\n layout: HomePageLayout,\n access: [ERole.Public],\n },\n {\n path: ERoutePath.signin,\n title: ERouteTitle.signin,\n component: SignIn,\n needRemount: true,\n layout: HomePageLayout,\n access: [ERole.Public],\n },\n {\n path: ERoutePath.forgotPassword,\n title: ERouteTitle.forgotPassword,\n component: ForgotPassword,\n needRemount: true,\n layout: HomePageLayout,\n access: [ERole.Public],\n },\n {\n path: ERoutePath.profile,\n title: ERouteTitle.profile,\n component: Profile,\n icon: ,\n layout: LayoutComponent,\n onNavMenu: true,\n access: [ERole.Admin, ERole.Coach, ERole.Parent],\n },\n {\n path: ERoutePath.players,\n title: ERouteTitle.players,\n component: Players,\n icon: ,\n layout: LayoutComponent,\n onNavMenu: true,\n access: [ERole.Admin, ERole.Parent],\n },\n {\n path: ERoutePath.courses,\n title: ERouteTitle.courses,\n component: Course,\n icon: ,\n layout: LayoutComponent,\n onNavMenu: true,\n access: [ERole.Admin],\n },\n {\n path: ERoutePath.activeKidsVoucheres,\n title: ERouteTitle.activeKidsVoucheres,\n component: ActiveKIdsVouchers,\n icon: ,\n layout: LayoutComponent,\n onNavMenu: true,\n access: [ERole.Parent, ERole.Admin],\n },\n {\n path: ERoutePath.holidayCourses,\n title: ERouteTitle.holidayCourses,\n component: HolidayCourses,\n icon: ,\n layout: LayoutComponent,\n onNavMenu: true,\n access: [ERole.Admin],\n },\n {\n path: ERoutePath.holidayCoursesEnrolment,\n title: ERouteTitle.holidayCoursesEnrolment,\n component: HolidayCourseEnrolment,\n icon: ,\n layout: LayoutComponent,\n onNavMenu: true,\n access: [ERole.Parent],\n },\n {\n path: ERoutePath.tournaments,\n title: ERouteTitle.tournaments,\n component: Tournaments,\n icon: ,\n layout: LayoutComponent,\n onNavMenu: true,\n access: [ERole.Admin],\n },\n {\n path: ERoutePath.tournamentEnrolment,\n title: ERouteTitle.tournamentEnrolment,\n component: TournamentEnrolment,\n icon: ,\n layout: LayoutComponent,\n onNavMenu: true,\n access: [ERole.Parent, ERole.Admin],\n },\n {\n path: ERoutePath.schoolEnrolment,\n title: ERouteTitle.schoolEnrolment,\n component: SchoolEnrolment,\n icon: ,\n layout: LayoutComponent,\n onNavMenu: true,\n access: [ERole.Parent],\n },\n {\n path: ERoutePath.enrolments,\n title: ERouteTitle.enrolments,\n component: Enrolment,\n icon: ,\n layout: LayoutComponent,\n onNavMenu: true,\n access: [ERole.Parent, ERole.Admin],\n },\n {\n path: ERoutePath.makeupRules,\n title: ERouteTitle.makeupRules,\n component: MakeupRules,\n icon: ,\n layout: LayoutComponent,\n onNavMenu: true,\n access: [ERole.Parent],\n },\n\n {\n path: ERoutePath.payments,\n title: ERouteTitle.payments,\n component: Payments,\n icon: ,\n layout: LayoutComponent,\n onNavMenu: true,\n access: [ERole.Admin],\n },\n {\n path: ERoutePath.changePassword,\n title: ERouteTitle.changePassword,\n component: ChangePassword,\n icon: ,\n needRemount: true,\n layout: LayoutComponent,\n onUserMenu: true,\n access: [ERole.Admin, ERole.Parent, ERole.Coach],\n },\n {\n path: ERoutePath.resetPassword,\n title: ERouteTitle.resetPassword,\n component: ResetPassword,\n needRemount: true,\n layout: HomePageLayout,\n access: [ERole.Public],\n },\n {\n path: ERoutePath.signout,\n title: ERouteTitle.signout,\n component: SignOut,\n icon: ,\n layout: LayoutComponent,\n onUserMenu: true,\n access: [ERole.Admin, ERole.Parent, ERole.Coach],\n },\n];\n","import React, { useContext } from \"react\";\nimport { Redirect, Route, Switch } from \"react-router-dom\";\nimport { AuthContext } from \"../context/AuthContext\";\nimport { ERole } from \"../generated/graphql\";\nimport { IRoute, routes } from \"../routes\";\nimport ERoutePath from \"../routes/ERoutePath\";\nimport LargeLoading from \"./LargeLoading\";\n\nconst Routes = () => {\n const { isAuthenticated, isLoading, userProfile } = useContext(AuthContext);\n return (\n \n {routes.map((route: IRoute) => {\n const isProtectedRoute = route.access.indexOf(ERole.Public) === -1;\n let isAllowed = true;\n if (isProtectedRoute) {\n if (!!!userProfile && route.path === ERoutePath.profile) {\n isAllowed = true;\n } else {\n isAllowed = route.access.indexOf(userProfile?.role as ERole) >= 0;\n }\n }\n return (\n {\n if (isProtectedRoute) {\n return isLoading ? (\n \n ) : !isAuthenticated || !isAllowed ? (\n \n ) : (\n \n {route.needRemount ? (\n \n ) : (\n \n )}\n \n );\n }\n return (\n \n {route.needRemount ? (\n \n ) : (\n \n )}\n \n );\n }}\n />\n );\n })}\n \n );\n};\nexport default Routes;\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import Auth from \"@aws-amplify/auth\";\n\nconst oauth = {\n // Authorized scopes\n scope: [\n \"phone\",\n \"email\",\n \"profile\",\n \"openid\",\n \"aws.cognito.signin.user.admin\",\n ],\n\n // 'code' for Authorization code grant,\n // 'token' for Implicit grant\n responseType: \"token\",\n\n // optional, for Cognito hosted ui specified options\n options: {\n // Indicates if the data collection is enabled to support Cognito advanced security features. By default, this flag is set to true.\n AdvancedSecurityDataCollectionFlag: false,\n },\n};\n\nexport const AuthConfig = Auth.configure({\n Auth: {\n region: \"ap-southeast-2\",\n userPoolId: \"ap-southeast-2_S9cPCCLZu\",\n userPoolWebClientId: \"5k55ttonmi7hfnrt5airlv1mmu\",\n // OPTIONAL - Enforce user authentication prior to accessing AWS resources or not\n mandatorySignIn: false,\n\n oauth,\n },\n});\n","import { createMuiTheme } from \"@material-ui/core/styles\";\n\nlet theme = createMuiTheme({\n palette: {\n primary: {\n light: \"#fbc02d\",\n main: \"#8a84e0\",\n dark: \"#005db3\",\n },\n secondary: {\n light: \"#fbc02d\",\n main: \"#f38220\",\n dark: \"#005db3\",\n },\n },\n typography: {\n h4: {\n fontWeight: 499,\n fontSize: 25,\n letterSpacing: -1.5,\n },\n },\n shape: {\n borderRadius: 7,\n },\n props: {\n MuiTab: {\n disableRipple: true,\n },\n },\n mixins: {\n toolbar: {\n minHeight: 47,\n },\n },\n});\n\ntheme = {\n ...theme,\n overrides: {\n MuiFormControlLabel: {\n label: {\n fontSize: \"2rem\",\n },\n },\n MuiDrawer: {\n paper: {\n backgroundColor: \"white\",\n },\n },\n MuiButton: {\n label: {\n textTransform: \"none\",\n },\n contained: {\n boxShadow: \"none\",\n fontSize: \"16px\",\n height: \"50px\",\n \"&:active\": {\n boxShadow: \"none\",\n },\n },\n },\n MuiTabs: {\n root: {\n marginLeft: theme.spacing(0),\n },\n indicator: {\n height: 2,\n borderTopLeftRadius: 2,\n borderTopRightRadius: 2,\n backgroundColor: theme.palette.common.white,\n },\n },\n MuiTab: {\n root: {\n textTransform: \"none\",\n margin: \"-1 16px\",\n minWidth: -1,\n padding: -1,\n [theme.breakpoints.up(\"md\")]: {\n padding: -1,\n minWidth: -1,\n },\n },\n },\n MuiIconButton: {\n root: {\n padding: theme.spacing(0),\n },\n },\n MuiTooltip: {\n tooltip: {\n borderRadius: 3,\n },\n },\n MuiDivider: {\n root: {\n backgroundColor: \"#404853\",\n },\n },\n MuiListItem: {\n root: {\n selected: {\n backgroundColor: \"#ea4335\",\n },\n },\n },\n MuiListItemText: {\n primary: {\n fontWeight: theme.typography.h4.fontWeight,\n fontSize: 18,\n },\n },\n MuiListItemIcon: {\n root: {\n color: \"inherit\",\n marginRight: -1,\n \"& svg\": {\n fontSize: 19,\n },\n },\n },\n MuiAvatar: {\n root: {\n width: 31,\n height: 32,\n },\n },\n },\n};\n\nexport default theme;\n","import Auth from \"@aws-amplify/auth\";\nimport { ThemeProvider } from \"@material-ui/core\";\nimport { SnackbarProvider } from \"notistack\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { BrowserRouter } from \"react-router-dom\";\nimport ContextProvider from \"./components/ContextProvider\";\nimport Routes from \"./components/Routes\";\nimport \"./index.css\";\nimport reportWebVitals from \"./reportWebVitals\";\nimport { AuthConfig } from \"./services/AuthConfig\";\nimport theme from \"./Theme\";\n\nAuth.configure(AuthConfig);\n\nReactDOM.render(\n \n \n \n \n \n \n \n \n \n \n ,\n document.getElementById(\"root\")\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}