{"version":3,"sources":["components/SignInForm.tsx","components/MyAppBar.tsx","Theme.ts","components/AuthenticatedArea.tsx","Config.ts","components/EventShareLink.tsx","components/EventSummary.tsx","models/TimeBlockV2.ts","models/EventDay.ts","lib/DateUtils.ts","components/TimeBlocksPreview.tsx","views/my/components/AddDayDialogStepSummary.tsx","views/my/components/AddDayDialog.tsx","components/Loading.tsx","views/my/components/DayRegistrations.tsx","components/SimpleDialog.tsx","views/my/components/MyEventDays.tsx","views/my/components/MyEventDaysForNewEvent.tsx","views/my/MyEventManagement.tsx","components/wizards/WizardDialog.tsx","lib/PasswordValidator.ts","lib/Errors.ts","views/public/components/SignInDialog.tsx","views/public/components/StartDialog.tsx","views/my/MyEvents.tsx","components/loaders/EventLoader.tsx","views/my/MyIndex.tsx","views/public/Contact.tsx","views/public/CookiePolicy.tsx","views/public/components/EventRegistrationDayTimeBlock.tsx","models/PublicTimeBlockV2.ts","views/public/components/EventRegistrationDays.tsx","views/public/EventRegistration.tsx","components/InfoStep.tsx","views/public/Home.tsx","views/public/PrivacyStatement.tsx","views/public/ResetPassword.tsx","views/public/SignIn.tsx","views/public/TermsOfUse.tsx","views/public/components/CookieConsent.tsx","lib/hooks/useWindowSize.ts","views/public/components/CookiePreferencesDialog.tsx","views/public/components/Footer.tsx","lib/LocalStorage.ts","models/CookiePreferences.ts","App.tsx","GlobalCss.ts","serviceWorker.js","lib/Axios.ts","models/User.ts","stores/AuthStore.ts","models/TimeBlock.ts","models/EventCapacity.ts","stores/EventCapacityStore.ts","stores/EventDayStore.ts","models/Event.ts","stores/EventStore.ts","models/Participation.ts","stores/ParticipationStore.ts","models/PublicEventDay.ts","models/PublicEvent.ts","stores/PublicStore.ts","stores/TransportLayer.ts","models/Registration.ts","stores/RegistrationStore.ts","index.tsx","stores/RouterStore.ts","stores/RootStore.ts","lib/SyncHistoryWithStore.js"],"names":["SignInForm","inject","observer","onCloseAfterPasswordReset","a","props","onPasswordReset","this","username","length","emailValidator","validate","password","Box","activeForm","renderSignInForm","renderForgetPasswordForm","renderEmailSent","signInFailed","Alert","severity","Grid","container","spacing","item","xs","TextField","id","label","value","onChange","e","target","error","attempt","usernameValid","fullWidth","required","type","passwordValid","Link","onClick","showPasswordReset","className","Typography","variant","Button","color","signIn","noWrap","sendEmail","React","Component","observable","computed","action","rootStore","authStore","onSignIn","transportLayer","requestPasswordReset","withStyles","theme","createStyles","MyAppBar","routerStore","push","reaction","isAuthenticated","count","closeUserMenu","Boolean","userMenuAnchorEl","MenuItem","handleMyEvents","handleSignOut","classes","AppBar","position","appBar","elevation","Container","maxWidth","Toolbar","src","process","alt","height","title","aria-controls","aria-haspopup","handleUserMenu","showSignInForm","user","name","Popover","anchorEl","anchorOrigin","vertical","horizontal","transformOrigin","open","isUserMenuOpen","onClose","disableGutters","renderUserMenu","renderSignInMenu","event","currentTarget","signOut","root","backgroundColor","palette","text","primary","flexGrow","menuButton","marginLeft","marginRight","responsiveFontSizes","createMuiTheme","typography","fontFamily","main","cyan","info","AuthenticatedArea","children","LuxonSettings","defaultLocale","settings","apiBaseUrl","webBaseUrl","EventShareLink","shareLink","eventId","InputProps","endAdornment","IconButton","copyShareLink","isCopied","copyToClipboard","EventSummary","description","location","TimeBlockV2","start","end","maxNumberOfRegistrations","registrations","Error","TimeBlockRegistration","data","DateTime","fromISO","slice","forEach","r","rg","participationId","EventDayConfiguration","invalid","EventDay","store","date","undefined","save","saveEventDay","isNew","sortDays","uuidv4","set","hour","minute","second","millisecond","_","timeBlocks","tb","slotsAvailable","slotCount","registrationCount","createTimeBlocks","config","isValid","timeBlockCountMode","timeBlockDurationMode","timeBlockCount","timeBlockDuration","timeBlockMeantimeDuration","simultaneGroupCount","i","plus","minutes","timeBlock","state","activateEventDay","configuration","_id","zone","timeZone","totalGroupCount","d","updateFromServer","DateUtils","DateFnsUtils","locale","nlLocale","dateOnly","dateTime","toDateString","emptyFormat","toLocaleString","DATE_HUGE","toTimeString","time","TIME_24_SIMPLE","useStyles","makeStyles","marginTop","maringBottom","borderBottomStyle","borderBottomWidth","borderColor","divider","secondaryHeading","fontSize","pxToRem","secondary","TimeBlocksPreview","withTheme","useState","setTimeBlocks","useEffect","eventDayConfiguration","map","key","display","flexDirection","p","flexBasis","minWidth","padding","header","marginBottom","dark","fontWeight","valueSmall","iconSuffix","errorMessage","bgcolor","justifyContent","clsx","dateError","values","startError","endError","textAlign","blockCountError","blockDurationError","Math","max","pauseError","simultaneGroupCountError","totalGroupCountError","messages","m","caption","stepBody","infoBox","margin","textField","width","optionalControlPanel","useTheme","fullScreen","useMediaQuery","breakpoints","down","activeStep","setActiveStep","nextEnabled","setNextEnabled","now","setValues","calculation","calculatedEndError","calculatedTimeBlockDurationError","calculatedPauseError","steps","validations","setValidations","calculatedValues","setCalculatedValues","clear","v","initValues","updateValidationState","totalDayDuration","diff","days","totalPauseBlocks","totalMinimalTimeBlockDuration","maxPauseTime","floor","calculated","ceil","handleClose","handleNumberChange","prop","handleTimeChange","fromJSDate","year","month","day","handleTimeBlockDurationMode","handleTimeBlockCountMode","Dialog","aria-labelledby","scroll","disableBackdropClick","DialogTitle","alignItems","aria-label","DialogActions","style","DialogContent","dividers","overflow","toJSDate","isFinish","disablePast","shouldDisableDate","muiDate","disabledDatesInMillis","includes","toMillis","FormControl","OutlinedInput","defaultValue","aria-describedby","inputProps","min","FormHelperText","InputAdornment","ampm","KeyboardButtonProps","invalidDateMessage","cancelLabel","okLabel","format","FormControlLabel","control","Radio","checked","labelPlacement","disabled","submitButtonText","MobileStepper","nextButton","maxSteps","size","prevActiveStep","direction","onSubmit","backButton","Loading","loading","CircularProgress","row","paddingTop","paddingBottom","totalRow","borderTopStyle","borderTopWidth","registrationChip","totalAdults","setTotalAdults","totalChildren","setTotalChildren","registrationStore","registrationsByEventDay","console","log","sumBy","numberOfAdults","numberOfChildren","TimeBlockRow","pl","setRegistrations","registrationsByTimeBlock","flexWrap","pb","RegistrationChip","registration","pr","Chip","icon","SimpleDialog","handleCancel","onCancel","showCloseIcon","cancelButtonText","onOk","okButtonText","styles","borderStyle","borderWidth","borderRadius","grey","heading","flexShrink","isReloading","setIsReloading","expanded","setExpanded","activationConfirmationDialogOpen","setActivationConfirmationDialogOpen","activationDay","setActivationDay","handleRefresh","pMinDelay","reload","eventDays","handleAccordionClick","panel","isExpanded","handleActivateButtonClick","gutterBottom","onAddEventDayClick","hasInactiveDays","mb","Accordion","AccordionSummary","expandIcon","cancellationCount","AccordionDetails","cancellations","c","DayRegistrations","Divider","AccordionActions","eventDay","onEditEventDayClick","activate","paragraph","stopPropagation","onEditEventDay","eventDayStore","eventStore","get","isAddDayDialogOpen","setIsAddDayDialogOpen","isConfirmPlanningDialogOpen","setIsConfirmPlanningDialogOpen","editEventDay","setEditEventDay","showGetStartedFlow","setShowGetStartedFlow","hasActiveDays","handleAddEventDay","handleEditEventDay","alignSelf","component","RouterLink","to","Stepper","orientation","Step","StepLabel","StepContent","MyEventDaysForNewEvent","DialogContentText","MyEventDays","AddDayDialog","configure","createEventDay","filter","stepCount","Children","toArray","onValidateStep","finishButtonDisabled","finishButtonText","passwordValidator","PasswordValidator","is","has","uppercase","lowercase","digits","not","spaces","oneOf","TimeBlockOccupiedError","message","constructor","captureStackTrace","UserWithSameEmailAlreadyExistsError","setState","email","setEmail","setPassword","setSignInFailed","emailValid","setEmailValid","setPasswordValid","registrationFailed","setRegistrationFailed","registrationFailedMessage","setRegistrationFailedMessage","password1","password2","registerValues","setRegisterValues","registerValidations","setRegisterValidations","close","onChangeRegisterValues","handleSignIn","handleRegister","register","backToSignIn","handleResetPassword","textTransform","autoComplete","helperText","marginTopBottom","eventName","eventLocation","organizerEmail","login","signInDialogOpen","setSignInDialogOpen","handleSubmit","createEvent","setLocation","setTitle","handleTextChange","WizardDialog","index","SignInDialog","MyEvents","componentDidMount","eventsLoading","loadOrganizedEventsForUser","handleAddEvent","TableContainer","Table","TableHead","TableRow","TableCell","TableBody","organizedEvents","hover","minDayDate","maxDayDate","StartDialog","isGetStartedDialogOpen","handleGetStartedDialogClose","backdrop","zIndex","drawer","EventLoader","isLoading","setIsLoading","loadEvent","then","loadDays","Promise","all","loadForEvent","Backdrop","MyIndex","exact","path","render","match","params","loadRegistrations","MyEventManagement","Contact","signinSection","field","yes","success","no","CookiePolicy","href","pointer","cursor","secondaryHeadingColor","selected","occupied","Paper","isOccupied","PublicTimeBlockV2","numberOfRegistrations","publicStore","handleSelectTimeBlock","selectTimeBlock","selectedTimeBlock","EventRegistrationDayTimeBlock","EventParticipation","participation","participationStore","create","registrationFinished","renderRegister","renderFinished","renderOccupiedModal","isOccupiedDialogOpen","DATE_FULL","occupiedDialogClose","autoFocus","setName","showInputErrors","nameValid","onKeyDown","setNumberOfAdults","setNumberOfChildren","renderWho","EventRegistrationDays","footer","reserve","setTimeBlock","setEventDay","catch","err","delayed","bottom","background","default","boxShadow","card","Card","CardContent","lineHeight","paddingLeft","homeSection","imageSection","backgroundImage","backgroundPosition","backgroundSize","startNowButton","paddingRight","Home","image","sm","getStartedDialogOpen","PrivacyStatement","ResetPassword","initialize","viewState","password1Valid","password2Valid","changePassword","passwordReset","getPasswordReset","expired","resetPassword","res","SignIn","TermsOfUse","closeIcon","link","textDecoration","buttonConfirm","buttonCustomize","CookieConsent","setHeight","drawerRef","useRef","callback","windowSize","setWindowSize","handleResize","window","innerWidth","innerHeight","addEventListener","removeEventListener","useWindowSize","current","h","offsetHeight","Drawer","anchor","ref","onCustomize","onConfirm","CookiePreferencesDialog","advertisement","setAdvertisement","optimization","setOptimization","cookiePreferences","functional","Checkbox","cp","analytical","footerSection","footerLink","footerItem","Footer","onCookieSettingsClick","LocalStorage","getItem","localStorage","record","JSON","parse","expireAt","Date","getTime","removeItem","setItem","expireAfterMs","stringify","CookiePreferences","load","val","acceptAllAndSave","App","cookieConsentOpen","setCookieConsentOpen","cookiePreferencesDialogOpen","setCookiePreferencesDialogOpen","showCookiePreferences","fonts","font","weights","ThemeProvider","EventRegistration","GlobalCss","html","body","blue","hostname","axiosInstance","axios","baseURL","User","AuthStore","tokenExpirationAt","tokenIssuedAt","refreshTimeout","updateLocalStorage","token","scheduleTokenRefresh","interval","setTimeout","renewToken","updateFromToken","addAxiosAuthenticationMiddleware","interceptors","request","use","headers","loadFromLocalStorage","signUp","eventCapacityStore","decodedToken","jwt","complete","payload","exp","iat","TimeBlock","EventCapacity","maxnumberOfRegistrations","EventCapacityStore","initialData","eventCapacity","fetchEventCapacity","serverData","EventDayStore","addDay","sortBy","fetchEventDays","require","v4","Event","saveEvent","options","resolve","reject","some","organizerName","ownerUserId","EventCancellationRegistration","EventStore","events","find","setOrganizerEmail","setOrganizerName","fetchEvent","sort","userId","fetchOrganizedEventsForUser","b","localeCompare","Participation","saveRegistration","eventDayId","timeBlockId","ParticipationStore","participations","PublicEventDay","PublicEvent","PublicStore","fetchPublicEvent","fe","TransportLayer","method","url","qs","response","errorCode","patch","status","getSignInMethod","post","put","fetchRegistrations","Registration","RegistrationStore","groupBy","regs","reg","history","setHistory","replaceVariables","replace","go","n","goBack","goForward","search","q","scrollTo","handleLocationChange","updateLocation","unsubscribeFromHistory","listen","subscribe","listener","unsubscribeFromStore","observe","rawLocation","unsubscribe","syncHistoryWithStore","createBrowserHistory","stores","ReactDOM","StrictMode","utils","document","getElementById","navigator","serviceWorker","ready","unregister"],"mappings":"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","file":"static/js/main.b479e703.chunk.js","sourcesContent":["import { Box, Button, createStyles, Grid, Link, TextField, Theme, Typography, WithStyles, withStyles } from '@material-ui/core';\r\nimport Alert from '@material-ui/lab/Alert';\r\nimport emailValidator from 'email-validator';\r\nimport { action, computed, observable } from 'mobx';\r\nimport { inject, observer } from 'mobx-react';\r\nimport React from 'react';\r\nimport RootStore from '../stores/RootStore';\r\n\r\n\r\nconst styles = (theme: Theme): any => createStyles({\r\n});\r\n\r\n\r\ninterface IProps extends WithStyles {\r\n\trootStore?: RootStore,\r\n\tonSignIn?: () => void,\r\n\tonPasswordReset?: () => void\r\n}\r\n\r\n\r\n@inject('rootStore')\r\n@observer\r\nclass SignInForm extends React.Component {\r\n\r\n\t@observable private username: string = '';\r\n\t@observable private password: string = '';\r\n\t@observable private attempt: number = 0;\r\n\t@observable private signInFailed: boolean = false;\r\n\t@observable private activeForm: 'signIn' | 'passwordReset' | 'emailSent' = 'signIn';\r\n\r\n\t@computed private get usernameValid(): boolean {\r\n\t\treturn this.username.length > 0 && emailValidator.validate(this.username);\r\n\t}\r\n\t@computed private get passwordValid(): boolean {\r\n\t\treturn this.password.length > 0;\r\n\t}\r\n\r\n\t@action private signIn = async () => {\r\n\t\tthis.attempt++;\r\n\t\tthis.signInFailed = false;\r\n\t\tif (await this.props.rootStore!.authStore.signIn(this.username, this.password)) {\r\n\t\t\tif (this.props.onSignIn) this.props.onSignIn();\r\n\t\t} else {\r\n\t\t\tthis.signInFailed = true;\r\n\t\t}\r\n\t}\r\n\r\n\t@action private showPasswordReset = () => {\r\n\t\tthis.activeForm = 'passwordReset';\r\n\r\n\t}\r\n\r\n\t@action private sendEmail = async () => {\r\n\t\tawait this.props.rootStore!.authStore.transportLayer.requestPasswordReset(this.username);\r\n\t\tthis.activeForm = 'emailSent';\r\n\t}\r\n\r\n\tprivate onCloseAfterPasswordReset = async () => {\r\n\t\tif (this.props.onPasswordReset) this.props.onPasswordReset();\r\n\t}\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{this.activeForm === 'signIn' && this.renderSignInForm()}\r\n\t\t\t\t{this.activeForm === 'passwordReset' && this.renderForgetPasswordForm()}\r\n\t\t\t\t{this.activeForm === 'emailSent' && this.renderEmailSent()}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tprivate renderSignInForm() {\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t{this.signInFailed &&\r\n\t\t\t\t\tInloggen mislukt. Onjuiste gebruikersnaam en/of wachtwoord.\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t this.username = e.target.value}\r\n\t\t\t\t\t\t\terror={this.attempt > 0 && (!this.usernameValid || this.signInFailed)}\r\n\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\trequired />\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t this.password = e.target.value}\r\n\t\t\t\t\t\t\terror={this.attempt > 0 && (!this.passwordValid || this.signInFailed)}\r\n\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\trequired />\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tWachtwoord vergeten?\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tprivate renderForgetPasswordForm() {\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tStel je wachtwoord opnieuw in.\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tVul je email adres in. We sturen je een email om je wachtwoord opnieuw in te stellen.\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t this.username = e.target.value}\r\n\t\t\t\t\t\t\terror={this.attempt > 0 && !this.usernameValid}\r\n\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\trequired />\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tprivate renderEmailSent() {\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tWe hebben je een email verzonden om je wachtwoord opnieuw in te stellen.\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default withStyles(styles)(SignInForm);\r\n","import { AppBar, Box, Button, Container, createStyles, MenuItem, Popover, Theme, Toolbar, Typography, withStyles, WithStyles } from '@material-ui/core';\r\nimport { action, computed, observable, reaction } from 'mobx';\r\nimport { inject, observer } from 'mobx-react';\r\nimport React from 'react';\r\nimport SignInForm from '../components/SignInForm';\r\nimport RootStore from '../stores/RootStore';\r\n\r\n\r\nconst styles = (theme: Theme) => createStyles({\r\n\troot: {\r\n\t},\r\n\tappBar: {\r\n\t\tbackgroundColor: 'white',\r\n\t\tcolor: theme.palette.text.primary\r\n\t},\r\n\ttitle: {\r\n\t\tflexGrow: 1,\r\n\t},\r\n\tmenuButton: {\r\n\t\tmarginLeft: -18,\r\n\t\tmarginRight: 10,\r\n\t}\r\n});\r\n\r\n\r\ninterface IProps extends WithStyles {\r\n\trootStore?: RootStore\r\n}\r\n\r\n@inject('rootStore')\r\n@observer\r\nclass MyAppBar extends React.Component {\r\n\r\n\t@observable private userMenuAnchorEl: any;\r\n\r\n\t@computed get isUserMenuOpen() {\r\n\t\treturn Boolean(this.userMenuAnchorEl);\r\n\t}\r\n\r\n\t@computed get showSignInForm() {\r\n\t\treturn !this.props.rootStore!.authStore.isAuthenticated;\r\n\t}\r\n\r\n\tconstructor(props: IProps) {\r\n\t\tsuper(props);\r\n\t\treaction(\r\n\t\t\t() => props.rootStore!.authStore.isAuthenticated,\r\n\t\t\t(count, reaction) => {\r\n\t\t\t\tthis.closeUserMenu();\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\t@action private handleUserMenu = (event: React.MouseEvent) => {\r\n\t\tthis.userMenuAnchorEl = event.currentTarget;\r\n\t};\r\n\r\n\t@action private closeUserMenu = () => {\r\n\t\tthis.userMenuAnchorEl = null;\r\n\t};\r\n\r\n\t@action private handleSignOut = async () => {\r\n\t\tthis.closeUserMenu();\r\n\t\tthis.props.rootStore!.authStore.signOut();\r\n\t\tthis.props.rootStore!.routerStore.push('/');\r\n\t}\r\n\t@action private handleMyEvents = async () => {\r\n\t\tthis.closeUserMenu();\r\n\t\tthis.props.rootStore!.routerStore.push('/my/events');\r\n\t}\r\n\r\n\tprivate renderUserMenu() {\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\tBijeenkomsten\r\n\t\t\t\tLogout\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tprivate onSignIn = () => {\r\n\t\tthis.props.rootStore!.routerStore.push('/my/events');\r\n\t}\r\n\r\n\t@action private onPasswordReset = () => {\r\n\t\tthis.closeUserMenu();\r\n\t}\r\n\r\n\tprivate renderSignInMenu() {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst { classes } = this.props;\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{/* \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t */}\r\n\t\t\t\t\t\t\"tijdprikker this.props.rootStore!.routerStore.push('/')} />\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{!this.showSignInForm && this.props.rootStore!.authStore.user!.name}\r\n\t\t\t\t\t\t\t\t{this.showSignInForm && `Inloggen`}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{!this.showSignInForm && this.renderUserMenu()}\r\n\t\t\t\t\t\t\t\t\t{this.showSignInForm && this.renderSignInMenu()}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{/*}*/}\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\n\r\nexport default withStyles(styles)(MyAppBar);","import cyan from '@material-ui/core/colors/cyan';\r\nimport { createMuiTheme, responsiveFontSizes } from '@material-ui/core/styles';\r\n\r\n// Create a theme instance.\r\nconst theme = responsiveFontSizes(createMuiTheme({\r\n\ttypography: {\r\n\t\tfontFamily: 'Raleway, Arial'\r\n\t},\r\n\tpalette: {\r\n\t\tprimary: {\r\n\t\t\tmain: cyan[700],\r\n\t\t},\r\n\t\t// secondary: {\r\n\t\t// \tmain: '#19857b',\r\n\t\t// },\r\n\t\t// error: {\r\n\t\t// \tmain: red.A400,\r\n\t\t// },\r\n\t\t// background: {\r\n\t\t// \tdefault: '#fff',\r\n\t\t// },\r\n\t\tinfo: {\r\n\t\t\tmain: cyan[700]\r\n\t\t}\r\n\t},\r\n}));\r\n\r\nexport default theme;","import { Box, Container, createStyles, Theme, Typography, WithStyles, withStyles } from '@material-ui/core';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport React from 'react';\r\nimport RootStore from '../stores/RootStore';\r\nimport SignInForm from './SignInForm';\r\n\r\n\r\nconst styles = (theme: Theme): any => createStyles({\r\n\r\n});\r\n\r\n\r\ninterface IProps extends WithStyles {\r\n\trootStore?: RootStore\r\n}\r\n\r\n\r\n@inject('rootStore')\r\n@observer\r\nclass AuthenticatedArea extends React.Component {\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t{this.props.rootStore!.authStore.isAuthenticated && this.props.children}\r\n\t\t\t\t{!this.props.rootStore!.authStore.isAuthenticated &&\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tInloggen vereist\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tif (!this.props.rootStore!.authStore.isAuthenticated) {\r\n\t\t\t//this.props.rootStore!.routerStore.push(`/signin?return=${window.location.href}`);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport default withStyles(styles)(AuthenticatedArea);","\r\nimport { Settings as LuxonSettings } from 'luxon';\r\n\r\nclass Settings {\r\n\tapiBaseUrl: string = '';\r\n\twebBaseUrl: string = '';\r\n}\r\n\r\n/* Local */\r\n// const settings: Settings = {\r\n// \tapiBaseUrl: 'http://localhost:3001',\r\n// \twebBaseUrl: 'http://localhost:3000',\r\n// }\r\n\r\n/* Local IP cable */\r\n// const settings: Settings = {\r\n// \tapiBaseUrl: 'http://192.168.0.52:3001',\r\n// \twebBaseUrl: 'http://192.168.0.52:3000',\r\n// }\r\n\r\n/* Development */\r\n// const settings: Settings = {\r\n// \tapiBaseUrl: 'https://api.dev.tijdprikker.nl',\r\n// webBaseUrl: 'https://dev.tijdprikker.nl',\r\n// }\r\n\r\n/* Production */\r\nconst settings: Settings = {\r\n\tapiBaseUrl: 'https://api.tijdprikker.nl',\r\n\twebBaseUrl: 'https://tijdprikker.nl'\r\n}\r\n\r\n// Luxon configuration\r\nLuxonSettings.defaultLocale = \"nl\";\r\n\r\nexport default settings;","import { createStyles, TextField, Theme, WithStyles, withStyles } from '@material-ui/core';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport CheckIcon from '@material-ui/icons/Check';\r\nimport CopyIcon from '@material-ui/icons/FileCopy';\r\nimport copyToClipboard from 'copy-to-clipboard';\r\nimport { action, observable } from 'mobx';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport React from 'react';\r\nimport settings from '../Config';\r\nimport RootStore from '../stores/RootStore';\r\n\r\n\r\nconst styles = (theme: Theme): any => createStyles({\r\n});\r\n\r\n\r\ninterface IProps extends WithStyles {\r\n\trootStore?: RootStore,\r\n\teventId: string\r\n}\r\n\r\n\r\n@inject('rootStore')\r\n@observer\r\nclass EventShareLink extends React.Component {\r\n\r\n\tprivate shareLink: string;\r\n\t@observable private isCopied: boolean = false;\r\n\r\n\tconstructor(props: IProps) {\r\n\t\tsuper(props);\r\n\t\tthis.shareLink = `${settings.webBaseUrl}/events/${this.props.eventId}/register`;\r\n\t}\r\n\r\n\t@action private copyShareLink = async () => {\r\n\t\tawait copyToClipboard(this.shareLink);\r\n\t\tthis.isCopied = true;\r\n\t}\r\n\r\n\trender() {\r\n\t\t//const { classes } = this.props;\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t\r\n\t\t\t\t\t\t\t\t{!this.isCopied && }\r\n\t\t\t\t\t\t\t\t{this.isCopied && }\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tfullWidth\r\n\t\t\t\t/>\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default withStyles(styles)(EventShareLink);","import { createStyles, Theme, Typography, WithStyles, withStyles } from '@material-ui/core';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport React from 'react';\r\nimport Event from '../models/Event';\r\nimport RootStore from '../stores/RootStore';\r\n\r\nconst styles = (theme: Theme): any => createStyles({\r\n});\r\n\r\n\r\ninterface IProps extends WithStyles {\r\n\trootStore?: RootStore,\r\n\tevent?: Event\r\n}\r\n\r\n\r\n@inject('rootStore')\r\n@observer\r\nclass EventSummary extends React.Component {\r\n\r\n\trender() {\r\n\t\tif (!this.props.event) return;\r\n\t\t//const { classes } = this.props;\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t\r\n\t\t\t\t\t{this.props.event!.title}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{this.props.event!.description}\r\n\t\t\t\t\r\n\t\t\t\t{/* \r\n\t\t\t\t\tDatum: {dateUtils.format(this.props.event!.date!, 'PPPP')}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\tTijdstip: {dateUtils.format(this.props.event!.start!, 'HH:mm')} tot {dateUtils.format(this.props.event!.end!, 'HH:mm')}\r\n\t\t\t\t */}\r\n\t\t\t\t\r\n\t\t\t\t\tLocatie: {this.props.event!.location}\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default withStyles(styles)(EventSummary);","import { DateTime } from 'luxon';\r\nimport { action, computed, observable } from 'mobx';\r\n\r\n\r\nexport default class TimeBlockV2 {\r\n\t@observable id: string;\r\n\t@observable start: DateTime;\r\n\t@observable end: DateTime;\r\n\t@observable maxNumberOfRegistrations: number = 0;\r\n\t@observable registrations: TimeBlockRegistration[] = [];\r\n\r\n\t@computed get isOccupied() {\r\n\t\treturn this.registrations.length >= this.maxNumberOfRegistrations;\r\n\t}\r\n\r\n\t@computed get slotsAvailable() {\r\n\t\treturn this.maxNumberOfRegistrations - this.registrations.length;\r\n\t}\r\n\r\n\t@computed get registrationCount() {\r\n\t\treturn this.registrations ? this.registrations.length : 0;\r\n\t}\r\n\r\n\tconstructor(id: string, start: DateTime, end: DateTime, maxNumberOfRegistrations: number) {\r\n\t\tthis.id = id;\r\n\t\tthis.start = start;\r\n\t\tthis.end = end;\r\n\t\tthis.maxNumberOfRegistrations = maxNumberOfRegistrations;\r\n\t}\r\n\r\n\t@action register = (id: string, name: string) => {\r\n\t\tif (this.registrations.length < this.maxNumberOfRegistrations - 1) {\r\n\t\t\tthis.registrations.push(new TimeBlockRegistration(id, name));\r\n\t\t} else {\r\n\t\t\tthrow Error(\"Time block is full\");\r\n\t\t}\r\n\t}\r\n\r\n\t@action updateFromServer = (data: any) => {\r\n\t\tthis.start = DateTime.fromISO(data.start);\r\n\t\tthis.end = DateTime.fromISO(data.end);\r\n\t\tthis.maxNumberOfRegistrations = data.maxNumberOfRegistrations;\r\n\t\tthis.registrations.slice(0, this.registrations.length);\r\n\t\tdata.registrations.forEach((r: any) => {\r\n\t\t\tlet rg = new TimeBlockRegistration(r.participationId, r.name);\r\n\t\t\tthis.registrations.push(rg);\r\n\t\t});\r\n\t}\r\n}\r\n\r\nclass TimeBlockRegistration {\r\n\t@observable id: string | undefined;\r\n\t@observable name: string | undefined;\r\n\r\n\tconstructor(participationId: string, name: string) {\r\n\t\tthis.id = participationId;\r\n\t\tthis.name = name;\r\n\t}\r\n}","import { action, computed, observable } from 'mobx';\r\nimport EventDayStore from '../stores/EventDayStore';\r\nimport TimeBlockV2 from './TimeBlockV2';\r\nimport * as _ from 'lodash';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { DateTime } from 'luxon';\r\n\r\nexport interface IEventDayConfiguration {\r\n\tdate:DateTime;\r\n\tstart:DateTime | undefined;\r\n\tend:DateTime | undefined;\r\n\ttimeBlockDuration:number | undefined;\r\n\ttimeBlockMeantimeDuration:number | undefined;\r\n\ttimeBlockCount:number | undefined;\r\n\tsimultaneGroupCount:number | undefined;\r\n\ttotalGroupCount:number | undefined;\r\n\ttimeBlockDurationMode: 'calculated' | 'fixed' | undefined;\r\n\ttimeBlockCountMode: 'total-groups' | 'fixed' | undefined;\r\n}\r\n\r\nclass EventDayConfiguration implements IEventDayConfiguration{\r\n\t@observable date:DateTime = DateTime.invalid(' ');\r\n\t@observable start:DateTime | undefined = undefined;\r\n\t@observable end:DateTime | undefined = undefined;\r\n\t@observable timeBlockDuration:number | undefined = undefined;\r\n\t@observable timeBlockMeantimeDuration:number | undefined = undefined;\r\n\t@observable timeBlockCount:number | undefined = undefined;\r\n\t@observable simultaneGroupCount:number | undefined = undefined;\r\n\t@observable totalGroupCount:number | undefined = undefined;\r\n\t@observable timeBlockDurationMode: 'calculated' | 'fixed' | undefined = undefined;\r\n\t@observable timeBlockCountMode: 'total-groups' | 'fixed' | undefined = undefined;\r\n}\r\n\r\n\r\nexport default class EventDay {\r\n\t@observable id: string;\r\n\t@observable isNew: boolean;\r\n\t@observable store: EventDayStore;\r\n\t@observable eventId: string;\r\n\t@observable configuration: EventDayConfiguration = new EventDayConfiguration();\r\n\t@observable date: DateTime;\r\n\t@observable timeZone: string = 'Europe/Amsterdam';\r\n\t@observable timeBlocks: TimeBlockV2[] = [];\r\n\t@observable state: 'active'|'inactive' = 'inactive';\r\n\r\n\t@computed get isOccupied(): boolean {\r\n\t\treturn _.sumBy(this.timeBlocks, tb => tb.slotsAvailable) === 0;\r\n\t}\r\n\r\n\t@computed get slotCount(): number {\r\n\t\treturn _.sumBy(this.timeBlocks, tb => tb.maxNumberOfRegistrations);\r\n\t}\r\n\r\n\t@computed get registrationCount() : number {\r\n\t\treturn _.sumBy(this.timeBlocks, tb => tb.registrations.length)\r\n\t}\r\n\r\n\t@computed get slotsAvailable() : number {\r\n\t\treturn this.slotCount - this.registrationCount;\r\n\t}\r\n\r\n\tconstructor(store: EventDayStore, eventId: string, date: DateTime, id: string | undefined = undefined) {\r\n\t\tthis.store = store\r\n\t\tthis.isNew = id === undefined;\r\n\t\tthis.id = id ? id : uuidv4();\t\t\r\n\t\tthis.eventId = eventId;\r\n\t\tthis.date = date.set({\r\n\t\t\thour: 0,\r\n\t\t\tminute: 0,\r\n\t\t\tsecond: 0,\r\n\t\t\tmillisecond: 0\r\n\t\t});\r\n\t}\r\n\r\n\t@action activate = async () => {\r\n\t\tif (this.state !== 'active') this.state = 'active';\r\n\t\tawait this.store.transportLayer.activateEventDay(this.eventId, this.id);\r\n\t}\r\n\r\n\t@action configure = (config: IEventDayConfiguration) => {\r\n\t\tif (this.state === 'active') throw Error('Configuration of an active day cannot be updated');\r\n\t\tthis.date = config.date;\r\n\t\tthis.configuration = config;\r\n\t\tthis.timeBlocks = EventDay.createTimeBlocks(config);\r\n\t}\r\n\r\n\t@action updateFromServer = (data: any) => {\r\n\t\tthis.id = data._id;\r\n\t\tthis.isNew = data._id === undefined;\r\n\t\tthis.date = DateTime.fromISO(data.date, { zone: data.timeZone });\r\n\t\tthis.timeZone = data.timeZone;\r\n\t\tthis.eventId = data.eventId;\r\n\t\tthis.state = data.state;\r\n\t\tthis.configuration.date = DateTime.fromISO(data.configuration.date, { zone: data.timeZone });\r\n\t\tthis.configuration.start = DateTime.fromISO(data.configuration.start, { zone: data.timeZone });\r\n\t\tthis.configuration.end = DateTime.fromISO(data.configuration.end, { zone: data.timeZone });\r\n\t\tthis.configuration.simultaneGroupCount = data.configuration.simultaneGroupCount;\r\n\t\tthis.configuration.totalGroupCount = data.configuration.totalGroupCount;\r\n\t\tthis.configuration.timeBlockCount = data.configuration.timeBlockCount;\r\n\t\tthis.configuration.timeBlockDurationMode = data.configuration.timeBlockDurationMode;\r\n\t\tthis.configuration.timeBlockCountMode = data.configuration.timeBlockCountMode;\r\n\t\tthis.configuration.timeBlockDuration = data.configuration.timeBlockDuration;\r\n\t\tthis.configuration.timeBlockMeantimeDuration = data.configuration.timeBlockMeantimeDuration;\r\n\t\tdata.timeBlocks.forEach((d:any) => {\r\n\t\t\tlet tb = new TimeBlockV2(d.id, DateTime.fromISO(d.start), DateTime.fromISO(d.end), d.maxNumberOfRegistrations);\r\n\t\t\ttb.updateFromServer(d);\r\n\t\t\tthis.timeBlocks.push(tb); \r\n\t\t});\r\n\t}\r\n\r\n\tsave = async () => {\r\n\t\tawait this.store.transportLayer.saveEventDay(this);\r\n\t\tthis.isNew = false;\r\n\t\tthis.store.sortDays();\r\n\t}\r\n\r\n\tstatic createTimeBlocks = (config: IEventDayConfiguration) : TimeBlockV2[] => {\r\n\t\tif (config.start === undefined || !config.start.isValid \r\n\t\t\t|| config.end === undefined|| !config.end.isValid \r\n\t\t\t|| config.timeBlockCountMode == undefined\r\n\t\t\t|| config.timeBlockDurationMode === undefined\r\n\t\t\t|| config.timeBlockCount === undefined || config.timeBlockCount <= 0\r\n\t\t\t|| config.timeBlockDuration === undefined || config.timeBlockDuration <= 0\r\n\t\t\t|| config.timeBlockMeantimeDuration === undefined || config.timeBlockMeantimeDuration < 0\r\n\t\t\t|| config.simultaneGroupCount === undefined || config.simultaneGroupCount <= 0) \r\n\t\t\treturn [];\r\n\r\n\t\t// create timeblocks according to configuration.\t\r\n\t\tlet start = config.date.set({\r\n\t\t\thour: config.start!.hour,\r\n\t\t\tminute: config.start!.minute,\r\n\t\t\tsecond: config.start!.second\r\n\t\t});\r\n\r\n\t\tlet end: DateTime | undefined = undefined;\r\n\t\tlet timeBlocks: TimeBlockV2[] = [];\r\n\t\tfor (let i = 0; i < config.timeBlockCount!; i++) {\r\n\t\t\tstart = end ? end.plus({ minutes: config.timeBlockMeantimeDuration }) : start;\r\n\t\t\tend = start.plus({ minutes: config.timeBlockDuration });\r\n\t\t\t\r\n\t\t\tlet timeBlock = new TimeBlockV2(uuidv4(), start, end, config.simultaneGroupCount!);\r\n\t\t\ttimeBlocks.push(timeBlock);\t\t\t\r\n\t\t}\r\n\r\n\t\treturn timeBlocks;\r\n\t}\r\n}","import DateFnsUtils from '@date-io/date-fns';\r\nimport nlLocale from \"date-fns/locale/nl\";\r\nimport { DateTime } from 'luxon';\r\n\r\nconst dateUtils: DateFnsUtils = new DateFnsUtils({ locale: nlLocale });\r\nexport default dateUtils;\r\n\r\nlet toDateString = (date: Date | undefined) => {\r\n\tif (!date) return '';\r\n\treturn dateUtils.format(date!, 'PPPP');\r\n}\r\n\r\nlet toTimeString = (time: Date | undefined, emptyFormat:string = '__:__') => {\r\n\tif (!time || isNaN(time.getTime())) return emptyFormat;\r\n\t\r\n\treturn dateUtils.format(time!, 'HH:mm');\r\n}\r\n\r\n\r\nexport class DateUtils {\r\n\tstatic dateOnly = (dateTime: DateTime) : DateTime => {\r\n\t\treturn dateTime.set({\r\n\t\t\thour: 0,\r\n\t\t\tminute: 0,\r\n\t\t\tsecond: 0,\r\n\t\t\tmillisecond: 0\r\n\t\t});\r\n\t}\r\n\r\n\tstatic toDateString = (date: DateTime | undefined, emptyFormat:string = '...') => {\r\n\t\tif (date && date.isValid) return date.toLocaleString(DateTime.DATE_HUGE);\t\t\r\n\t\treturn emptyFormat;\r\n\t}\r\n\r\n\tstatic toTimeString = (time: DateTime | undefined, emptyFormat:string = '__:__') => {\r\n\t\tif (time && time.isValid) return time.toLocaleString(DateTime.TIME_24_SIMPLE);\r\n\t\treturn emptyFormat;\r\n\t}\r\n}\r\n\r\nexport { toDateString, toTimeString };\r\n\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Box, makeStyles, Typography, withTheme, Paper } from '@material-ui/core';\r\nimport EventDay, { IEventDayConfiguration } from '../models/EventDay';\r\nimport { DateUtils } from '../lib/DateUtils';\r\nimport TimeBlockV2 from '../models/TimeBlockV2';\r\nimport { DateTime } from 'luxon';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n timeBlock: {\r\n marginTop: theme.spacing(1),\r\n maringBottom: theme.spacing(1),\r\n '&:not(:last-child)': {\r\n borderBottomStyle: 'solid',\r\n borderBottomWidth: 1,\r\n borderColor: theme.palette.divider\r\n }\r\n },\r\n secondaryHeading: {\r\n fontSize: theme.typography.pxToRem(15),\r\n color: theme.palette.text.secondary,\r\n }\r\n}))\r\n\r\ninterface IProps {\r\n eventDayConfiguration: IEventDayConfiguration\r\n}\r\n\r\nconst TimeBlocksPreview = withTheme((props: IProps) => {\r\n const classes = useStyles();\r\n const [timeBlocks, setTimeBlocks] = useState([]);\r\n \r\n useEffect(() => {\r\n if (props.eventDayConfiguration) {\r\n setTimeBlocks(EventDay.createTimeBlocks(props.eventDayConfiguration)); \r\n } else {\r\n setTimeBlocks([]);\r\n } \r\n }, [props.eventDayConfiguration])\r\n\r\n return (\r\n \r\n {timeBlocks.map(tb => \r\n \r\n \r\n \r\n {DateUtils.toTimeString(tb.start)} - {DateUtils.toTimeString(tb.end)}\r\n \r\n \r\n \r\n {tb.slotsAvailable} plek{tb.slotsAvailable > 1 ? 'ken': ''} beschikbaar \r\n \r\n \r\n )}\r\n \r\n );\r\n});\r\n\r\nexport { TimeBlocksPreview };\r\n\r\n\r\n\r\n\r\n\r\n","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { IEventDayConfiguration } from '../../../models/EventDay';\r\nimport { Box, Typography, withTheme } from '@material-ui/core';\r\nimport { DateUtils } from '../../../lib/DateUtils';\r\nimport GroupIcon from '@material-ui/icons/Group';\r\nimport clsx from 'clsx';\r\n\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n padding: theme.spacing(1)\r\n },\r\n header: {\r\n marginBottom: theme.spacing(1)\r\n },\r\n error: {\r\n color: theme.palette.error.dark,\r\n fontWeight: 'bold'\r\n },\r\n value: {\r\n fontSize: '1.5rem'\r\n },\r\n valueSmall: {\r\n fontSize: '.8rem'\r\n },\r\n iconSuffix: {\r\n marginLeft:'4px', \r\n marginBottom:'-4px'\r\n },\r\n errorMessage:{\r\n '&:not(:last-child)': {\r\n marginBottom: theme.spacing(1)\r\n }\r\n }\r\n}));\r\n\r\ninterface IProps {\r\n values: IEventDayConfiguration\r\n messages: string [],\r\n startError?: boolean,\r\n endError?: boolean,\r\n dateError?: boolean,\r\n blockCountError?: boolean,\r\n blockDurationError?: boolean,\r\n pauseError?: boolean,\r\n simultaneGroupCountError?: boolean,\r\n totalGroupCountError?: boolean\r\n}\r\n\r\nexport default withTheme((props: IProps) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {DateUtils.toDateString(props.values.date)}\r\n \r\n \r\n {DateUtils.toTimeString(props.values!.start)} - {DateUtils.toTimeString(props.values!.end)}\r\n \r\n \r\n \r\n \r\n {props.values!.timeBlockCount !== undefined ? props.values!.timeBlockCount : '__'}\r\n blok{props.values!.timeBlockCount !== undefined && props.values!.timeBlockCount > 1 ? 'ken' : ''}\r\n \r\n \r\n \r\n {props.values?.timeBlockDuration !== undefined ? Math.max(0, props.values!.timeBlockDuration) : '__'}\r\n min\r\n \r\n per blok\r\n \r\n \r\n \r\n {props.values?.timeBlockMeantimeDuration !== undefined ? Math.max(0, props.values!.timeBlockMeantimeDuration) : '__'}\r\n min\r\n \r\n pauze\r\n \r\n \r\n \r\n {props.values.simultaneGroupCount !== undefined ? props.values.simultaneGroupCount : '__'}\r\n \r\n \r\n per blok\r\n \r\n \r\n \r\n {props.values.totalGroupCount !== undefined ? props.values.totalGroupCount : '__'}\r\n \r\n \r\n totaal\r\n \r\n \r\n \r\n {props.messages.length > 0 && \r\n \r\n {props.messages.map(m => \r\n {m}\r\n )}\r\n \r\n }\r\n \r\n ); \r\n});","import React, { useEffect } from 'react';\r\nimport { Box, Button, Dialog, DialogActions, DialogContent, DialogTitle, FormControl, FormControlLabel, FormHelperText, IconButton, InputAdornment, OutlinedInput, Radio, TextField, Typography, useMediaQuery } from '@material-ui/core';\r\nimport { makeStyles, useTheme, withTheme } from '@material-ui/core/styles';\r\nimport { observer } from 'mobx-react';\r\nimport { Calendar, KeyboardTimePicker } from '@material-ui/pickers';\r\nimport { MaterialUiPickersDate } from '@material-ui/pickers/typings/date';\r\nimport MobileStepper from '@material-ui/core/MobileStepper';\r\nimport KeyboardArrowLeft from '@material-ui/icons/KeyboardArrowLeft';\r\nimport KeyboardArrowRight from '@material-ui/icons/KeyboardArrowRight';\r\nimport { IEventDayConfiguration } from '../../../models/EventDay';\r\nimport { TimeBlocksPreview } from '../../../components/TimeBlocksPreview';\r\nimport { useState } from 'react';\r\nimport { DateUtils } from '../../../lib/DateUtils';\r\nimport clsx from 'clsx';\r\nimport { DateTime } from 'luxon';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport StepSummary from './AddDayDialogStepSummary';\r\nimport _ from 'lodash';\r\nimport { AirlineSeatIndividualSuiteSharp } from '@material-ui/icons';\r\nimport { validateLocaleAndSetLanguage } from 'typescript';\r\n \r\ninterface ValidationState {\r\n date: boolean | undefined;\r\n start: boolean | undefined;\r\n end: boolean | undefined;\r\n timeBlockDuration: boolean | undefined;\r\n timeBlockMeantimeDuration: boolean | undefined;\r\n timeBlockCount: boolean | undefined;\r\n simultaneGroupCount: boolean | undefined;\r\n totalGroupCount: boolean | undefined;\r\n timeBlockDurationMode: boolean | undefined;\r\n timeBlockCountMode: boolean | undefined;\r\n calculation: boolean | undefined;\r\n messages: string[];\r\n calculatedEndError: boolean,\r\n calculatedTimeBlockDurationError: boolean,\r\n calculatedPauseError: boolean,\r\n steps: boolean[];\r\n}\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n caption: {\r\n fontWeight: 'bold',\r\n marginTop: theme.spacing(2)\r\n },\r\n stepBody: {\r\n //padding: theme.spacing(2)\r\n },\r\n infoBox: {\r\n padding: theme.spacing(2)\r\n },\r\n margin: {\r\n marginTop: theme.spacing(2),\r\n marginBottom: theme.spacing(2) \r\n },\r\n marginTop: {\r\n marginTop: theme.spacing(2),\r\n },\r\n marginBottom: {\r\n marginBottom: theme.spacing(2) \r\n },\r\n textField: {\r\n width: '100%'\r\n },\r\n optionalControlPanel: {\r\n padding: theme.spacing(2),\r\n marginTop: theme.spacing(2),\r\n marginBottom: theme.spacing(2)\r\n }\r\n}));\r\n\r\ninterface IProps {\r\n title?: string;\r\n submitButtonText?: string;\r\n onClose?: () => void;\r\n onSubmit?: (config: IEventDayConfiguration) => void;\r\n open: boolean;\r\n initValues?: IEventDayConfiguration | undefined;\r\n disabledDatesInMillis?: number[];\r\n}\r\n\r\nexport default withTheme(observer((props: IProps) => {\r\n const classes = useStyles();\r\n const theme = useTheme();\r\n const fullScreen = useMediaQuery(theme.breakpoints.down('xs'));\r\n const maxSteps = 7;\r\n const [activeStep, setActiveStep] = useState(0);\r\n const [nextEnabled, setNextEnabled] = useState(false);\r\n const [values, setValues] = useState({\r\n date: DateTime.now(),\r\n start: undefined,\r\n end: undefined,\r\n timeBlockDuration: undefined,\r\n timeBlockMeantimeDuration: undefined,\r\n timeBlockCount: undefined,\r\n simultaneGroupCount: undefined,\r\n totalGroupCount: undefined,\r\n timeBlockDurationMode: 'calculated',\r\n timeBlockCountMode: 'total-groups'\r\n });\r\n const [validations, setValidations] = useState({\r\n date: undefined,\r\n start: undefined,\r\n end: undefined,\r\n timeBlockDuration: undefined,\r\n timeBlockMeantimeDuration: undefined,\r\n timeBlockCount: undefined,\r\n simultaneGroupCount: undefined,\r\n totalGroupCount: undefined,\r\n timeBlockDurationMode: true,\r\n timeBlockCountMode: true,\r\n calculation: undefined,\r\n messages: [],\r\n calculatedEndError: false,\r\n calculatedTimeBlockDurationError: false,\r\n calculatedPauseError: false,\r\n steps: [false, false, false, false, false, false]\r\n });\r\n const [calculatedValues, setCalculatedValues] = useState(values);\r\n\r\n // update state with props values\r\n useEffect(() => {\r\n clear();\r\n let v: IEventDayConfiguration = props.initValues \r\n ? props.initValues!\r\n : {\r\n date: DateUtils.dateOnly(DateTime.now()),\r\n start: undefined,\r\n end: undefined,\r\n timeBlockDuration: undefined,\r\n timeBlockMeantimeDuration: undefined,\r\n timeBlockCount: undefined,\r\n simultaneGroupCount: undefined,\r\n totalGroupCount: undefined,\r\n timeBlockDurationMode: 'calculated',\r\n timeBlockCountMode: 'total-groups'\r\n };\r\n setValues(v);\r\n setCalculatedValues(v);\r\n }, [props.initValues]);\r\n\r\n // Step validation\r\n useEffect(() => {\r\n setNextEnabled(validate(false));\r\n }, [activeStep]);\r\n\r\n // form validation\r\n useEffect(() => {\r\n setNextEnabled(validate());\r\n }, [values])\r\n\r\n const validate = (updateValidationState: boolean = true) => {\r\n switch (activeStep) {\r\n // Date\r\n case 0:\r\n const date = values.date ? true : false;\r\n if (updateValidationState) setValidations({...validations, date });\r\n return date;\r\n \r\n // Simultane group count\r\n case 1:\r\n const simultaneGroupCount = values.simultaneGroupCount !== undefined && values.simultaneGroupCount! >= 1; \r\n if (updateValidationState) setValidations({...validations, simultaneGroupCount });\r\n return simultaneGroupCount;\r\n \r\n // Pause\r\n case 2:\r\n const timeBlockMeantimeDuration = values.timeBlockMeantimeDuration !== undefined && values.timeBlockMeantimeDuration >= 0;\r\n if (updateValidationState) setValidations({...validations, timeBlockMeantimeDuration });\r\n return timeBlockMeantimeDuration;\r\n\r\n // Start\r\n case 3:\r\n const start = !values.start || !values.start.isValid ? false : true;\r\n if (updateValidationState) setValidations({...validations, start});\r\n return start;\r\n\r\n // Time Block Count\r\n case 4:\r\n const timeBlockCountMode = values.timeBlockCountMode !== undefined;\r\n const totalGroupCount = values.timeBlockCountMode === 'total-groups' && values.totalGroupCount !== undefined && values.totalGroupCount >= 1;\r\n const timeBlockCount = values.timeBlockCountMode === 'fixed' && values.timeBlockCount !== undefined && values.timeBlockCount >= 1;\r\n \r\n if (updateValidationState) setValidations({...validations, totalGroupCount, timeBlockCount });\r\n\r\n return timeBlockCountMode &&\r\n ((values.timeBlockCountMode === 'total-groups' && totalGroupCount) \r\n || (values.timeBlockCountMode === 'fixed' && timeBlockCount));\r\n\r\n // Time Block Duration\r\n case 5:\r\n let timeBlockDurationMode = values.timeBlockDurationMode !== undefined;\r\n const end = values.timeBlockDurationMode == 'calculated' && values.end !== undefined && values.end > values.start!;\r\n const timeBlockDuration = values.timeBlockDurationMode == 'fixed' && values.timeBlockDuration !== undefined && values.timeBlockDuration >= 1;\r\n\r\n if (updateValidationState) setValidations({...validations, end, timeBlockDuration });\r\n\r\n return timeBlockDurationMode &&\r\n ((values.timeBlockDurationMode === 'calculated' && values.end !== undefined && end) \r\n || (values.timeBlockDurationMode === 'fixed' && values.timeBlockDuration !== undefined && timeBlockDuration))\r\n\r\n // Complete\r\n case 6:\r\n return validations.messages.length === 0;\r\n\r\n default:\r\n return true;\r\n }\r\n }\r\n\r\n // Validate calculation\r\n useEffect(() => {\r\n const minTimeBlockDuration = 1;\r\n let messages: string[] = [];\r\n let calculatedEndError = false;\r\n let calculatedTimeBlockDurationError = false;\r\n let calculatedPauseError = false;\r\n\r\n let totalDayDuration = calculatedValues.start && calculatedValues.start.isValid && calculatedValues.end && calculatedValues.end.isValid \r\n ? calculatedValues.end!.diff(calculatedValues.start!, 'minutes').minutes\r\n : undefined;\r\n\r\n if (calculatedValues.start !== undefined && calculatedValues.start.isValid && calculatedValues.end !== undefined && calculatedValues.end.isValid && calculatedValues.end.diff(calculatedValues.start.set({hour:0, minute:0, second:0, millisecond: 0}), 'days').days > 1) {\r\n messages.push('De eindtijd is na 00:00 middernacht (verklein het aantal blokken of de duur van een blok).');\r\n calculatedEndError = true;\r\n }\r\n\r\n if (calculatedValues.timeBlockDuration !== undefined && calculatedValues.timeBlockDuration! < minTimeBlockDuration) {\r\n messages.push(`De duur van een tijdsblok moet minimaal ${minTimeBlockDuration} minuten zijn.`);\r\n calculatedTimeBlockDurationError = true;\r\n }\r\n\r\n if (calculatedValues.timeBlockCount !== undefined && calculatedValues.start && totalDayDuration && calculatedValues.timeBlockMeantimeDuration && calculatedValues.timeBlockMeantimeDuration! > 0\r\n && (calculatedValues.timeBlockMeantimeDuration * (calculatedValues.timeBlockCount! - 1) + calculatedValues.timeBlockCount! * minTimeBlockDuration) > calculatedValues.end!.diff(calculatedValues.start!, 'minutes').minutes) {\r\n \r\n let totalPauseBlocks = calculatedValues.timeBlockCount! - 1;\r\n let totalMinimalTimeBlockDuration = calculatedValues.timeBlockCount! * minTimeBlockDuration\r\n let maxPauseTime = Math.max(0, Math.floor((totalDayDuration - totalMinimalTimeBlockDuration) / totalPauseBlocks));\r\n messages.push(`Aantal tijdsblokken passen niet tussen begin- en eindtijd (maak de pauze maximaal ${maxPauseTime} minuten, start eerder, eindig later of maak de tijdsblokken korter).`);\r\n calculatedPauseError = true;\r\n }\r\n\r\n setValidations({...validations, messages, calculatedEndError, calculatedTimeBlockDurationError, calculatedPauseError });\r\n }, [calculatedValues])\r\n\r\n // calculation\r\n useEffect(() => {\r\n let calculated: IEventDayConfiguration = {\r\n date: values.date,\r\n start: values.start,\r\n timeBlockMeantimeDuration: values.timeBlockMeantimeDuration,\r\n timeBlockDurationMode: values.timeBlockDurationMode,\r\n timeBlockCountMode: values.timeBlockCountMode,\r\n simultaneGroupCount: values.simultaneGroupCount,\r\n\r\n // values depending no chosen option\r\n end: undefined,\r\n timeBlockDuration: undefined,\r\n timeBlockCount: undefined,\r\n totalGroupCount: undefined,\r\n };\r\n\r\n //console.log('###', calculated.start);\r\n\r\n // Calculate values which depend on both options.\r\n if (calculated.timeBlockDurationMode === 'fixed' && calculated.timeBlockCountMode === 'fixed') {\r\n calculated.timeBlockDuration = values.timeBlockDuration;\r\n calculated.timeBlockCount = values.timeBlockCount;\r\n calculated.totalGroupCount = values.timeBlockCount !== undefined && values.simultaneGroupCount !== undefined \r\n ? values.timeBlockCount * values.simultaneGroupCount \r\n : undefined;\r\n\r\n calculated.end = calculated.start && calculated.start.isValid && calculated.timeBlockCount !== undefined && calculated.timeBlockDuration !== undefined && calculated.timeBlockMeantimeDuration !== undefined\r\n ? calculated.start.plus({ minutes: calculated.timeBlockCount * calculated.timeBlockDuration + (calculated.timeBlockCount - 1) * calculated.timeBlockMeantimeDuration})\r\n : undefined;\r\n\r\n } else if (values.timeBlockDurationMode === 'fixed' && values.timeBlockCountMode === 'total-groups') {\r\n calculated.timeBlockDuration = values.timeBlockDuration;\r\n calculated.totalGroupCount = values.totalGroupCount;\r\n calculated.timeBlockCount = values.totalGroupCount && calculated.simultaneGroupCount && calculated.simultaneGroupCount > 0\r\n ? Math.ceil(values.totalGroupCount / calculated.simultaneGroupCount)\r\n : undefined;\r\n\r\n calculated.end = calculated.start && calculated.start.isValid && calculated.timeBlockCount !== undefined && calculated.timeBlockDuration !== undefined && calculated.timeBlockMeantimeDuration !== undefined\r\n ? calculated.start.plus({ minutes: calculated.timeBlockCount * calculated.timeBlockDuration + (calculated.timeBlockCount - 1) * calculated.timeBlockMeantimeDuration})\r\n : undefined;\r\n\r\n // recalculate total group count: total group count can be higher that the provided value.\r\n calculated.totalGroupCount = calculated.timeBlockCount !== undefined && calculated.simultaneGroupCount !== undefined\r\n ? calculated.timeBlockCount * calculated.simultaneGroupCount\r\n : undefined;\r\n\r\n } else if (calculated.timeBlockDurationMode === 'calculated' && calculated.timeBlockCountMode === 'fixed') {\r\n calculated.end = values.end;\r\n calculated.timeBlockCount = values.timeBlockCount;\r\n calculated.totalGroupCount = calculated.timeBlockCount && calculated.simultaneGroupCount\r\n ? calculated.timeBlockCount * calculated.simultaneGroupCount \r\n : undefined;\r\n\r\n calculated.timeBlockDuration = calculated.start && calculated.start.isValid && calculated.end && calculated.end.isValid && calculated.timeBlockCount !== undefined && calculated.timeBlockCount > 0 && calculated.timeBlockMeantimeDuration !== undefined\r\n ? Math.floor( (calculated.end.diff(calculated.start, 'minutes').minutes - ((calculated.timeBlockCount - 1) * calculated.timeBlockMeantimeDuration) ) / calculated.timeBlockCount)\r\n : undefined;\r\n\r\n // recalculate end: timeblock durations are floored. Event can end earlier than the provided time.\r\n calculated.end = calculated.start && calculated.start.isValid && calculated.timeBlockCount !== undefined && calculated.timeBlockDuration !== undefined && calculated.timeBlockMeantimeDuration !== undefined\r\n ? calculated.start.plus({ minutes: calculated.timeBlockCount * calculated.timeBlockDuration + (calculated.timeBlockCount - 1) * calculated.timeBlockMeantimeDuration})\r\n : undefined;\r\n\r\n } else if (calculated.timeBlockDurationMode === 'calculated' && calculated.timeBlockCountMode === 'total-groups') {\r\n calculated.end = values.end;\r\n calculated.timeBlockCount = values.totalGroupCount !== undefined && calculated.simultaneGroupCount !== undefined && calculated.simultaneGroupCount > 0\r\n ? Math.ceil(values.totalGroupCount / calculated.simultaneGroupCount)\r\n : undefined;\r\n calculated.totalGroupCount = calculated.timeBlockCount !== undefined && calculated.simultaneGroupCount !== undefined\r\n ? calculated.timeBlockCount * calculated.simultaneGroupCount \r\n : undefined;\r\n\r\n calculated.timeBlockDuration = calculated.start && calculated.start.isValid && calculated.end && calculated.end.isValid && calculated.timeBlockCount !== undefined && calculated.timeBlockCount > 0 && calculated.timeBlockMeantimeDuration !== undefined\r\n ? Math.floor((calculated.end.diff(calculated.start, 'minutes').minutes - (Math.max(0, calculated.timeBlockCount - 1) * calculated.timeBlockMeantimeDuration)) / calculated.timeBlockCount)\r\n : undefined;\r\n\r\n // recalculate end: timeblock durations are floored. Event can end earlier than the provided time.\r\n calculated.end = calculated.start !== undefined && calculated.start.isValid && calculated.timeBlockCount !== undefined && calculated.timeBlockDuration !== undefined && calculated.timeBlockMeantimeDuration !== undefined\r\n ? calculated.start.plus({ minutes: calculated.timeBlockCount * calculated.timeBlockDuration + (Math.max(0, calculated.timeBlockCount - 1)) * calculated.timeBlockMeantimeDuration})\r\n : undefined;\r\n }\r\n \r\n setCalculatedValues(calculated);\r\n }, [values])\r\n\r\n const clear = () => {\r\n setActiveStep(0);\r\n setValues({\r\n date: DateUtils.dateOnly(DateTime.now()),\r\n start: undefined,\r\n end: undefined,\r\n timeBlockDuration: undefined,\r\n timeBlockMeantimeDuration: undefined,\r\n timeBlockCount: undefined,\r\n simultaneGroupCount: undefined,\r\n totalGroupCount: undefined,\r\n timeBlockCountMode: 'total-groups',\r\n timeBlockDurationMode: 'calculated'\r\n });\r\n } \r\n \r\n const handleClose = () => {\r\n if (props.onClose) props.onClose();\r\n clear();\r\n };\r\n\r\n const handleSubmit = () => {\r\n if (props.onSubmit) props.onSubmit(calculatedValues!);\r\n clear();\r\n }\r\n\r\n const handleNext = () => {\r\n setActiveStep((prevActiveStep) => prevActiveStep + 1);\r\n };\r\n \r\n const handleBack = () => {\r\n setActiveStep((prevActiveStep) => prevActiveStep - 1);\r\n };\r\n\r\n const handleDateChange = (date: MaterialUiPickersDate, isFinish?: boolean) => {\r\n let d = date \r\n ? DateUtils.dateOnly(DateTime.fromJSDate(date))\r\n : DateTime.invalid(' ');\r\n\r\n // Update start and end date part with info from date.\r\n let start = d.isValid && values.start && values.start?.isValid ? values.start.set({year: d.year, month: d.month, day: d.day}) : values.start;\r\n let end = d.isValid && values.end && values.end.isValid ? values.end.set({year: d.year, month: d.month, day: d.day}) : values.end;\r\n\r\n setValues({...values, date: d, start, end});\r\n }\r\n\r\n const handleNumberChange = (prop: keyof IEventDayConfiguration) => (event: React.ChangeEvent) => {\r\n setValues({...values, [prop]: +event.target.value});\r\n }\r\n\r\n const handleTimeChange = (prop: keyof IEventDayConfiguration) => (date: MaterialUiPickersDate, value: string | null | undefined) => {\r\n let d = date ? DateTime.fromJSDate(date) : DateTime.invalid(' ');\r\n\r\n // Update date part with infor from values.date\r\n if (d.isValid && values.date?.isValid) {\r\n d = d.set({year: values.date?.year, month: values.date?.month, day: values.date?.day});\r\n }\r\n setValues({...values, [prop]: d});\r\n }\r\n\r\n const handleTimeBlockDurationMode = (event: React.ChangeEvent) => {\r\n setValues({...values, timeBlockDurationMode: event.currentTarget.value as 'fixed' | 'calculated'});\r\n };\r\n\r\n const handleTimeBlockCountMode = (event: React.ChangeEvent) => {\r\n setValues({...values, timeBlockCountMode: event.currentTarget.value as 'fixed' | 'total-groups'});\r\n };\r\n\r\n const shouldDisableDate = (muiDate: MaterialUiPickersDate) : boolean => {\r\n if (props.disabledDatesInMillis && muiDate) {\r\n const d = DateTime.fromJSDate(muiDate);\r\n return _.includes(props.disabledDatesInMillis, d.toMillis());\r\n }\r\n return false;\r\n }\r\n \r\n return (\r\n \r\n \r\n \r\n \r\n {props.title ? props.title : 'Dag Toevoegen'}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {activeStep === 0 && (\r\n <>\r\n \r\n Wanneer is je bijeenkomst?\r\n Als je bijeenkomst uit meerdere dagen bestaat dien je alle dagen afzonderlijk toe te voegen.\r\n \r\n \r\n \r\n )}\r\n {activeStep === 1 && (\r\n <>\r\n Hoeveel huishoudens kun je per tijdsblok ontvangen?\r\n \r\n \r\n {validations.simultaneGroupCount !== undefined && !validations.simultaneGroupCount && U moet ten minste 1 huishouden tegelijkertijd kunnen ontvangen.}\r\n \r\n \r\n )}\r\n {activeStep == 2 && (\r\n <>\r\n Hoeveel pauze wil je tussen de tijdsblokken?\r\n \r\n minuten}\r\n aria-describedby=\"outlined-timeblockmeantimeduration-helper-text\"\r\n required\r\n inputProps={{\r\n 'aria-label': 'time block meantime duration',\r\n min: 0\r\n }}\r\n />\r\n \r\n \r\n )}\r\n {activeStep === 3 && (\r\n \r\n Hoe laat begint de bijeenkomst?\r\n \r\n \r\n )}\r\n {activeStep === 4 && (\r\n <>\r\n {/* Timeblock count */}\r\n Aantal tijdsblokken berekenen op basis van:\r\n \r\n }\r\n label=\"Totaal aantal genodigden\"\r\n labelPlacement=\"end\"\r\n />\r\n \r\n huishoudens}\r\n aria-describedby=\"outlined-totalgroupcount-helper-text\"\r\n required\r\n disabled={values.timeBlockCountMode !== 'total-groups'}\r\n inputProps={{\r\n 'aria-label': 'total group count duration',\r\n min: 0\r\n }}\r\n />\r\n \r\n \r\n }\r\n label=\"Een vast aantal tijdsblokken\"\r\n labelPlacement=\"end\"\r\n />\r\n \r\n tijdsblokken}\r\n aria-describedby=\"outlined-timeBlockCount-helper-text\"\r\n required\r\n disabled={values.timeBlockCountMode !== 'fixed'}\r\n inputProps={{\r\n 'aria-label': 'time block count duration',\r\n min: 0\r\n }}\r\n />\r\n \r\n \r\n )}\r\n {activeStep === 5 && (\r\n <>\r\n {/* Timeblock length */}\r\n Duur tijdsblok berekenen op basis van:\r\n \r\n }\r\n label=\"Eindtijd bijeenkomst\"\r\n labelPlacement=\"end\"\r\n />\r\n \r\n \r\n }\r\n label=\"Vaste duur tijdsblok\"\r\n labelPlacement=\"end\"\r\n />\r\n minuten\r\n }}\r\n inputProps={{\r\n 'aria-label': 'time block duration',\r\n min: \"1\"\r\n }}\r\n disabled={values.timeBlockDurationMode !== 'fixed'}\r\n />\r\n \r\n )}\r\n {activeStep === 6 && (\r\n // Summary\r\n <>\r\n \r\n Resultaat\r\n Klik op {props.submitButtonText} om onderstaande tijdsblokken bevestigen.\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {/* {activeStep === 1 && \r\n <>\r\n {validations.messages.length >= 1 && \r\n \r\n {validations.messages.map(m => {m})} \r\n \r\n } \r\n \r\n } */}\r\n \r\n {activeStep < maxSteps - 1 && ( \r\n \r\n )}\r\n {activeStep === maxSteps - 1 && (\r\n \r\n )}\r\n \r\n )}\r\n backButton={\r\n \r\n }\r\n />\r\n \r\n \r\n \r\n );\r\n}));","import { Box, CircularProgress, createStyles, Theme, Typography, WithStyles, withStyles } from '@material-ui/core';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport React from 'react';\r\nimport RootStore from '../stores/RootStore';\r\n\r\n\r\nconst styles = (theme: Theme): any => createStyles({\r\n\troot: {\r\n\t\tmarginTop: theme.spacing(2),\r\n\t\tmarginBottom: theme.spacing(2)\r\n\t}\r\n});\r\n\r\n\r\ninterface IProps extends WithStyles {\r\n\trootStore?: RootStore,\r\n\tloading: boolean,\r\n\ttext?: string\r\n}\r\n\r\n\r\n@inject('rootStore')\r\n@observer\r\nclass Loading extends React.Component {\r\n\r\n\trender() {\r\n\t\tconst { classes } = this.props;\r\n\t\tif (this.props.loading) {\r\n\t\t\treturn (\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t{this.props.text && \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{this.props.text}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t)\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t{this.props.children!}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default withStyles(styles)(Loading);","import { Box, Chip, Typography } from '@material-ui/core';\r\nimport { makeStyles, withTheme } from '@material-ui/core/styles';\r\nimport { inject, observer } from 'mobx-react';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { DateUtils } from '../../../lib/DateUtils';\r\nimport EventDay from '../../../models/EventDay';\r\nimport FaceIcon from '@material-ui/icons/Face';\r\nimport { Registration } from '../../../models/Registration';\r\nimport RootStore from '../../../stores/RootStore';\r\nimport clsx from 'clsx';\r\nimport _ from 'lodash';\r\nimport TimeBlockV2 from '../../../models/TimeBlockV2';\r\nimport TimeBlock from '../../../models/TimeBlock';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n row: {\r\n paddingTop: theme.spacing(1),\r\n paddingBottom: theme.spacing(1),\r\n borderColor: theme.palette.divider,\r\n '&:not(:last-child)': {\r\n borderBottomStyle: 'solid',\r\n borderBottomWidth: 1,\r\n }\r\n },\r\n totalRow: {\r\n marginTop: '2px',\r\n borderTopStyle: 'solid',\r\n borderTopWidth: 1,\r\n borderColor: theme.palette.divider\r\n },\r\n secondaryHeading: {\r\n fontSize: theme.typography.pxToRem(15),\r\n color: theme.palette.text.secondary,\r\n },\r\n registrationChip: {\r\n marginLeft: theme.spacing(1)\r\n }\r\n}));\r\n\r\ninterface IProps {\r\n rootStore?: RootStore,\r\n day: EventDay\r\n}\r\n\r\nexport default withTheme(inject('rootStore')(observer((props: IProps) => {\r\n const classes = useStyles();\r\n const [totalAdults, setTotalAdults] = useState();\r\n const [totalChildren, setTotalChildren] = useState();\r\n\r\n useEffect(() => {\r\n let registrations = props.rootStore!.registrationStore.registrationsByEventDay[props.day.id];\r\n console.log('### regs', props.day.id, registrations, props.rootStore!.registrationStore.registrationsByEventDay);\r\n setTotalAdults(_.sumBy(registrations, r => r.numberOfAdults ?? 0));\r\n setTotalChildren(_.sumBy(registrations, r => r.numberOfChildren ?? 0));\r\n }, [props.day])\r\n\r\n return (\r\n \r\n {props.day.timeBlocks.map(tb => )}\r\n \r\n \r\n Totaal\r\n \r\n \r\n {totalAdults} volwassene{totalAdults !== undefined && totalAdults !== 1 ? 'n' : ''}\r\n \r\n \r\n {totalChildren} kind{totalChildren !== undefined && totalChildren !== 1 ? 'eren' : ''}\r\n \r\n \r\n \r\n );\r\n})));\r\n\r\n\r\nconst TimeBlockRow = withTheme(inject('rootStore')((props: {\r\n rootStore?: RootStore,\r\n timeBlock: TimeBlockV2\r\n}) => {\r\n const classes = useStyles();\r\n const [registrations, setRegistrations] = useState([]);\r\n\r\n useEffect(() => {\r\n setRegistrations(props.rootStore!.registrationStore.registrationsByTimeBlock[props.timeBlock.id] ?? []);\r\n }, [props.timeBlock]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {DateUtils.toTimeString(props.timeBlock.start)} - {DateUtils.toTimeString(props.timeBlock.end)}\r\n \r\n \r\n \r\n {props.timeBlock.slotsAvailable > 0 && {props.timeBlock.slotsAvailable} plek{props.timeBlock.slotsAvailable > 1 ? 'ken': ''} beschikbaar}\r\n {props.timeBlock.slotsAvailable === 0 && vol}\r\n \r\n \r\n {registrations.map((r, i) => \r\n \r\n \r\n \r\n \r\n \r\n {r.numberOfAdults} volwassene{r.numberOfAdults !== undefined && r.numberOfAdults !== 1 ? 'n' : ''}\r\n \r\n \r\n {r.numberOfChildren} kind{r.numberOfChildren !== undefined && r.numberOfChildren !== 1 ? 'eren' : ''}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n )\r\n}));\r\n\r\n\r\nconst RegistrationChip = withTheme((props: {\r\n registration: Registration;\r\n}) => {\r\n const classes = useStyles();\r\n return (\r\n } \r\n size=\"small\" \r\n className={classes.registrationChip} />\r\n );\r\n})\r\n\r\n","import React, { useState } from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport { useTheme, withTheme } from '@material-ui/core/styles';\r\nimport { Box, Button, Dialog, DialogActions, DialogContent, DialogTitle, IconButton } from '@material-ui/core';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\n\r\ninterface IProps {\r\n title: string,\r\n okButtonText?: string,\r\n cancelButtonText?: string,\r\n fullScreen?: boolean,\r\n fullWidth?: boolean,\r\n maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | false,\r\n open: boolean,\r\n onCancel?: () => void;\r\n onOk?: () => void;\r\n scroll?: 'body' | 'paper';\r\n disableBackdropClick?: boolean;\r\n showCloseIcon?: boolean;\r\n}\r\n\r\nconst SimpleDialog = withTheme(observer((props: React.PropsWithChildren) => {\r\n \r\n const handleCancel = () => {\r\n if (props.onCancel) props.onCancel();\r\n }\r\n\r\n const handleOk = () => {\r\n if (props.onOk) props.onOk();\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n {props.title}\r\n \r\n {props.showCloseIcon &&\r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n {props.children}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}));\r\n\r\nexport { SimpleDialog }\r\n","import { Accordion, AccordionActions, AccordionDetails, AccordionSummary, Box, Button, Chip, Typography, Slide } from '@material-ui/core';\r\nimport { makeStyles, withTheme } from '@material-ui/core/styles';\r\nimport { inject, observer } from 'mobx-react';\r\nimport React, { useState, useEffect } from 'react';\r\nimport RootStore from '../../../stores/RootStore';\r\nimport RefreshIcon from '@material-ui/icons/Refresh';\r\nimport grey from '@material-ui/core/colors/grey';\r\nimport Loading from '../../../components/Loading';\r\nimport pMinDelay from 'p-min-delay';\r\nimport EventDay, { IEventDayConfiguration } from '../../../models/EventDay';\r\nimport Event from '../../../models/Event';\r\nimport { DateTime } from 'luxon';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport { Divider } from '@material-ui/core';\r\nimport DayRegistrations from './DayRegistrations';\r\nimport FaceIcon from '@material-ui/icons/Face';\r\nimport _ from 'lodash';\r\nimport { DateUtils } from '../../../lib/DateUtils';\r\nimport { SimpleDialog } from '../../../components/SimpleDialog';\r\n\r\nconst styles = makeStyles((theme) => ({\r\n day: {\r\n padding: theme.spacing(1),\r\n borderStyle: 'solid',\r\n\t\tborderWidth: 1,\r\n borderRadius: 4,\r\n\t\tborderColor: grey[400]\r\n },\r\n marginLeft: {\r\n marginLeft: theme.spacing(2)\r\n },\r\n heading: {\r\n fontSize: theme.typography.pxToRem(15),\r\n flexShrink: 0,\r\n },\r\n secondaryHeading: {\r\n fontSize: theme.typography.pxToRem(15),\r\n color: theme.palette.text.secondary,\r\n },\r\n registrationChip: {\r\n marginLeft: theme.spacing(1)\r\n }\r\n}));\r\n\r\ninterface IProps {\r\n rootStore?: RootStore;\r\n event: Event;\r\n onAddEventDayClick: () => void;\r\n onEditEventDayClick: (eventDay: EventDay) => void;\r\n}\r\n\r\nexport default withTheme(inject('rootStore')(observer((props: IProps) => {\r\n \r\n const classes = styles();\r\n const [isReloading, setIsReloading] = useState(false);\r\n const [expanded, setExpanded] = useState(false);\r\n const [activationConfirmationDialogOpen, setActivationConfirmationDialogOpen] = useState(false);\r\n const [activationDay, setActivationDay] = useState();\r\n \r\n const handleAdd = () => props.onAddEventDayClick();\r\n const handleEdit = (eventDay: EventDay) => () => props.onEditEventDayClick(eventDay);\r\n\r\n const handleRefresh = async () => {\r\n setIsReloading(true);\r\n await pMinDelay(props.event.reload({eventDays: true, registrations: true}), 1000);\r\n setIsReloading(false);\r\n }\r\n\r\n const handleAccordionClick = (panel: string) => (event: React.ChangeEvent<{}>, isExpanded: boolean) => {\r\n setExpanded(isExpanded ? panel : false); \r\n };\r\n\r\n const handleActivateButtonClick = (day: EventDay) => (event: React.MouseEvent) => {\r\n setActivationDay(day);\r\n setActivationConfirmationDialogOpen(true);\r\n }\r\n\r\n const handleActivationRejected = () => {\r\n setActivationDay(undefined);\r\n setActivationConfirmationDialogOpen(false);\r\n }\r\n\r\n const handleActivationConfirmed = () => {\r\n activationDay?.activate();\r\n setActivationDay(undefined);\r\n setActivationConfirmationDialogOpen(false);\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n Planning en aanmeldingen\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {props.event.hasInactiveDays && \r\n \r\n \r\n Één of meerdere dagen zijn nog niet geactiveerd. Genodigden kunnen zich alleen aanmelden bij actieve dagen. Om een dag te activeren klik je op de knop Activeren van de dag.\r\n \r\n \r\n }\r\n\r\n \r\n }>\r\n \r\n \r\n Afmeldingen\r\n \r\n \r\n {props.event.cancellationCount} afmeldingen\r\n \r\n \r\n \r\n \r\n \r\n {props.event.cancellations.map((c:any) => {\r\n return (\r\n \r\n } size=\"small\" className={classes.registrationChip}/>\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n {props.event.days.map(day => (\r\n \r\n }>\r\n \r\n \r\n {day.date.toLocaleString(DateTime.DATE_HUGE)}\r\n \r\n \r\n {day.slotsAvailable} van de {day.slotCount} plekken beschikbaar\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {day.state === 'inactive' && \r\n \r\n \r\n \r\n }\r\n \r\n ))}\r\n \r\n \r\n \r\n <> \r\n Na activatie kan de indeling van de tijdsblokken van deze dag niet meer gewijzigd worden. De activatie van een dag kan niet meer ongedaan gemaakt worden.\r\n Weet je het zeker dat je {DateUtils.toDateString(activationDay?.date)} wilt activeren zodat genodigden de tijdsblokken op deze dag kunnen reserveren?\r\n \r\n \r\n \r\n );\r\n})));\r\n\r\n\r\n\r\n","import { Accordion, AccordionDetails, AccordionSummary, Box, Button, Chip, Typography } from '@material-ui/core';\r\nimport { makeStyles, withTheme } from '@material-ui/core/styles';\r\nimport { observer } from 'mobx-react';\r\nimport React, { useState } from 'react';\r\nimport grey from '@material-ui/core/colors/grey';\r\nimport EventDay from '../../../models/EventDay';\r\nimport Event from '../../../models/Event';\r\nimport { DateTime } from 'luxon';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport DayRegistrations from './DayRegistrations';\r\nimport _ from 'lodash';\r\n\r\nconst styles = makeStyles((theme) => ({\r\n day: {\r\n padding: theme.spacing(1),\r\n borderStyle: 'solid',\r\n\t\tborderWidth: 1,\r\n borderRadius: 4,\r\n\t\tborderColor: grey[400]\r\n },\r\n marginLeft: {\r\n marginLeft: theme.spacing(2)\r\n },\r\n heading: {\r\n fontSize: theme.typography.pxToRem(15),\r\n flexShrink: 0,\r\n },\r\n secondaryHeading: {\r\n fontSize: theme.typography.pxToRem(15),\r\n color: theme.palette.text.secondary,\r\n },\r\n registrationChip: {\r\n marginLeft: theme.spacing(1)\r\n }\r\n}));\r\n\r\ninterface IProps {\r\n event: Event;\r\n onEditEventDay?: (day:EventDay) => void;\r\n}\r\n\r\nexport default withTheme(observer((props: IProps) => {\r\n \r\n const classes = styles();\r\n const [expanded, setExpanded] = useState(false);\r\n \r\n const handleAccordionClick = (panel: string) => (event: React.ChangeEvent<{}>, isExpanded: boolean) => {\r\n setExpanded(isExpanded ? panel : false);\r\n };\r\n\r\n const handleEdit = (eventDay: EventDay) => (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n if (props.onEditEventDay) props.onEditEventDay(eventDay);\r\n }\r\n\r\n return (\r\n <>\r\n \r\n {props.event.days.map(day => (\r\n \r\n }>\r\n \r\n \r\n {day.date.toLocaleString(DateTime.DATE_HUGE)}\r\n \r\n \r\n {day.slotsAvailable} van de {day.slotCount} plekken beschikbaar\r\n \r\n \r\n \r\n {day.state === 'active' &&\r\n }\r\n {day.state !== 'active' &&\r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n );\r\n}));\r\n\r\n\r\n\r\n","import { Box, Button, Container, createStyles, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, Link, makeStyles, Step, StepContent, StepLabel, Stepper, Theme, Typography, WithStyles, withStyles, withTheme } from '@material-ui/core';\r\nimport grey from '@material-ui/core/colors/grey';\r\nimport clsx from 'clsx';\r\nimport _ from 'lodash';\r\nimport { action, computed, observable } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport pMinDelay from 'p-min-delay';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport EventShareLink from '../../components/EventShareLink';\r\nimport EventSummary from '../../components/EventSummary';\r\nimport Event from '../../models/Event';\r\nimport EventDay, { IEventDayConfiguration } from '../../models/EventDay';\r\nimport RootStore from '../../stores/RootStore';\r\nimport AddDayDialog from './components/AddDayDialog';\r\nimport MyEventDays from './components/MyEventDays';\r\nimport MyEventDaysForNewEvent from './components/MyEventDaysForNewEvent';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n\ttimeBlock: {\r\n\t\tpadding: theme.spacing(1),\r\n\t\tbackgroundColor: 'white',\r\n\t\tborderStyle: 'solid',\r\n\t\tborderWidth: 1,\r\n\t\tborderRadius: 4,\r\n\t\tborderColor: grey[400]\r\n\t},\r\n\tmarginRight: {\r\n\t\tmarginRight: theme.spacing(2)\r\n\t},\r\n\tmarginTop: {\r\n\t\tmarginTop: theme.spacing(2)\r\n\t}\r\n}));\r\n\r\ninterface IProps {\r\n\trootStore?: RootStore,\r\n\teventId: string\r\n}\r\n\r\nexport default withTheme(inject('rootStore')(observer((props: IProps) => {\r\n\tconst classes = useStyles();\r\n\tconst eventDayStore = props.rootStore!.eventDayStore;\r\n\tconst registrationStore = props.rootStore!.registrationStore;\r\n\tconst event: Event = props.rootStore!.eventStore.get(props.eventId)!;\r\n const [isAddDayDialogOpen, setIsAddDayDialogOpen] = useState(false);\r\n\tconst [activeStep, setActiveStep] = useState(0);\r\n\tconst [isConfirmPlanningDialogOpen, setIsConfirmPlanningDialogOpen] = useState(false);\r\n\tconst [editEventDay, setEditEventDay] = useState(undefined);\r\n\tconst [showGetStartedFlow, setShowGetStartedFlow] = useState(false);\r\n\r\n\t// init\r\n\tuseEffect(() => {\r\n\t\tif (!event.hasActiveDays) {\r\n\t\t\tsetShowGetStartedFlow(true);\r\n\t\t}\r\n\t}, [event]);\r\n\r\n\tconst handleAddDayDialogClose = () => {\r\n setIsAddDayDialogOpen(false);\r\n setEditEventDay(undefined);\r\n }\r\n\r\n const handleSubmitEventDay = (config: IEventDayConfiguration) => {\r\n if (editEventDay) {\r\n // update event day\r\n editEventDay.configure(config);\r\n editEventDay.save();\r\n } else {\r\n // create event day\r\n let day = eventDayStore.createEventDay(config.date);\r\n day.configure(config);\r\n day.save();\r\n }\r\n setIsAddDayDialogOpen(false);\r\n setEditEventDay(undefined);\r\n }\r\n\r\n\tconst handleAddEventDay = () => {\r\n\t\tsetEditEventDay(undefined);\r\n\t\tsetIsAddDayDialogOpen(true);\r\n\t}\r\n\r\n\tconst handleEditEventDay = (eventDay: EventDay) => {\r\n\t\tsetEditEventDay(eventDay);\r\n\t\tsetIsAddDayDialogOpen(true);\r\n\t}\r\n\r\n\tconst handleStartPlanningConfirmation = () => {\r\n\t\tsetIsConfirmPlanningDialogOpen(true);\r\n\t}\r\n\r\n\tconst handlePlanningConfirmed = () => {\r\n\t\tevent.days.forEach(d => {\r\n\t\t\tif (d.state !== 'active') d.activate();\r\n\t\t});\r\n\t\tsetIsConfirmPlanningDialogOpen(false);\r\n\t\tsetActiveStep(1);\t\r\n\t}\r\n\r\n\tconst handlePlanningDenied = () => {\r\n\t\tsetIsConfirmPlanningDialogOpen(false);\r\n\t}\r\n\r\n\tconst handelShowRegistrations = () => {\r\n\t\tsetShowGetStartedFlow(false);\r\n\t}\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tBijeenkomst beheren\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tMijn bijeenskomsten\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t{ /* DETAILS */ }\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t{ /* STEPPER TO COMPLETE NEW EVENTS */ }\r\n\t\t\t{showGetStartedFlow && \r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tPlan je bijeenkomst\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{event.days.length === 0 && \r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t{event.days.length > 0 && \r\n\t\t\t\t\t\t\t\t\t\t<>\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tBevestiging planning\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tNa akkoord kunnen de tijdsblokken niet meer gewijzigd worden. Dagen toevoegen blijft mogelijk. Is de planning akkoord?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tVerstuur de uitnodigingen\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{event.hasActiveDays &&\r\n\t\t\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\tGeef onderstaande link aan de genodigden, zodat ze zelf een tijdsblok kunnen reserveren.\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t\t{!showGetStartedFlow &&\r\n\t\t\t\t<>\r\n\t\t\t\t\t{ /* SEND INVITATION */ }\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tUitnodigingen versturen\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{!event.hasActiveDays &&\r\n\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t{event.hasActiveDays &&\r\n\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tGeef onderstaande link aan de genodigden, zodat ze zelf een tijdsblok kunnen reserveren.\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t{/* PLANNING */ }\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t}\r\n\r\n\t\t\t d.id !== editEventDay.id), d => d.date.toMillis()) // exclude day of edit event day\r\n\t\t\t\t\t\t: _.map(eventDayStore.days, d => d.date.toMillis())} \r\n\t\t\t\t\t/>\r\n\t\t\r\n\t);\r\n})));\r\n\r\n\r\n","import React, { useState } from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport { useTheme, withTheme } from '@material-ui/core/styles';\r\nimport { Box, Button, Dialog, DialogActions, DialogContent, DialogTitle, IconButton, MobileStepper } from '@material-ui/core';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport KeyboardArrowLeft from '@material-ui/icons/KeyboardArrowLeft';\r\nimport KeyboardArrowRight from '@material-ui/icons/KeyboardArrowRight';\r\n\r\n// const useStyles = makeStyles((theme) => ({\r\n// }))\r\n\r\ninterface IProps {\r\n disableBackdropClick?: boolean,\r\n title: string,\r\n finishButtonText: string,\r\n finishButtonDisabled?: boolean,\r\n fullScreen?: boolean,\r\n fullWidth?: boolean,\r\n maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | false,\r\n open: boolean,\r\n onClose?: () => void;\r\n onSubmit?: () => void;\r\n onValidateStep?: (index: number) => boolean;\r\n scroll?: 'body' | 'paper';\r\n}\r\n\r\nexport default withTheme(observer((props: React.PropsWithChildren) => {\r\n const theme = useTheme();\r\n const [activeStep, setActiveStep] = useState(0);\r\n const handleBack = () => setActiveStep((prevActiveStep) => prevActiveStep - 1);\r\n const handleNext = () => {\r\n if (!props.onValidateStep || props.onValidateStep(activeStep))\r\n setActiveStep((prevActiveStep) => prevActiveStep + 1)\r\n };\r\n\r\n const handleClose = () => {\r\n if (props.onClose) props.onClose();\r\n }\r\n\r\n const handleSubmit = () => {\r\n if (props.onSubmit) props.onSubmit(); \r\n }\r\n\r\n const stepCount = React.Children.count(props.children);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n {props.title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {React.Children.toArray(props.children)[activeStep]}\r\n \r\n \r\n \r\n \r\n {activeStep < stepCount - 1 && ( \r\n \r\n )}\r\n {activeStep === stepCount - 1 && (\r\n \r\n )}\r\n \r\n )}\r\n backButton={\r\n \r\n }\r\n />\r\n \r\n \r\n \r\n \r\n );\r\n}));","import PasswordValidator from 'password-validator';\r\n\r\nlet passwordValidator = new PasswordValidator();\r\npasswordValidator\r\n\t.is().min(8)\r\n//\t.is().max(30)\r\n\t.has().uppercase()\r\n\t.has().lowercase()\r\n\t.has().digits()\r\n\t.has().not().spaces()\r\n\t.is().not().oneOf(['Passw0rd', 'P@ssw0rd', 'Password1', 'Password2', 'Password123']);\r\n\r\nexport default passwordValidator;\r\n","\r\nexport class TimeBlockOccupiedError extends Error {\r\n\tconstructor(message: string = 'Time block is occupied') {\r\n\t\tsuper(message);\r\n\t\t// Ensure the name of this error is the same as the class name\r\n\t\tthis.name = this.constructor.name;\r\n\t\t// This clips the constructor invocation from the stack trace.\r\n\t\t// It's not absolutely essential, but it does make the stack trace a little nicer.\r\n\t\t// @see Node.js reference (bottom)\r\n\t\tError.captureStackTrace(this, this.constructor);\r\n\t}\r\n}\r\n\r\nexport class UserWithSameEmailAlreadyExistsError extends Error {\r\n\tconstructor(message: string = 'An user with the same email address already exists.') {\r\n\t\tsuper(message);\r\n\t\t// Ensure the name of this error is the same as the class name\r\n\t\tthis.name = this.constructor.name;\r\n\t\t// This clips the constructor invocation from the stack trace.\r\n\t\t// It's not absolutely essential, but it does make the stack trace a little nicer.\r\n\t\t// @see Node.js reference (bottom)\r\n\t\tError.captureStackTrace(this, this.constructor);\r\n\t}\r\n}\r\n","import React, { useEffect, useState } from 'react';\r\nimport { inject, observer } from 'mobx-react';\r\nimport { makeStyles, useTheme, withTheme } from '@material-ui/core/styles';\r\nimport { Box, Button, Dialog, DialogActions, DialogContent, DialogTitle, IconButton, TextField, Typography, useMediaQuery } from '@material-ui/core';\r\nimport RootStore from '../../../stores/RootStore';\r\nimport emailValidator from 'email-validator';\r\nimport passwordValidator from '../../../lib/PasswordValidator';\r\nimport { UserWithSameEmailAlreadyExistsError } from '../../../lib/Errors';\r\n\r\ntype StateType = 'signin' | 'register' | 'register-success' | 'resetpassword' | 'resetpassword-emailsent';\r\n\r\ninterface IRegisterValues {\r\n email: string | undefined,\r\n name: string | undefined,\r\n password1: string | undefined,\r\n password2: string | undefined\r\n}\r\n\r\ninterface IRegisterValidations {\r\n email: boolean | undefined,\r\n name: boolean | undefined,\r\n password1: boolean | undefined,\r\n password2: boolean | undefined\r\n}\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n caption: {\r\n fontWeight: 'bold',\r\n marginTop: theme.spacing(2)\r\n },\r\n textField: {\r\n width: '100%',\r\n marginTop: theme.spacing(2),\r\n marginBottom: theme.spacing(2) \r\n },\r\n}))\r\n\r\ninterface IProps {\r\n rootStore?: RootStore;\r\n open: boolean,\r\n onClose: () => void;\r\n}\r\n\r\nexport default withTheme(inject('rootStore')(observer((props: IProps) => {\r\n const classes = useStyles();\r\n const theme = useTheme();\r\n const fullScreen = useMediaQuery(theme.breakpoints.down('xs'));\r\n const [state, setState] = useState('signin');\r\n const [email, setEmail] = useState();\r\n const [password, setPassword] = useState();\r\n const [signInFailed, setSignInFailed] = useState();\r\n const [emailValid, setEmailValid] = useState();\r\n const [passwordValid, setPasswordValid] = useState();\r\n const [registrationFailed, setRegistrationFailed] = useState();\r\n const [registrationFailedMessage, setRegistrationFailedMessage] = useState();\r\n const [registerValues, setRegisterValues] = useState({\r\n email: undefined,\r\n name: undefined,\r\n password1: undefined,\r\n password2: undefined\r\n });\r\n const [registerValidations, setRegisterValidations] = useState({\r\n email: undefined,\r\n name: undefined,\r\n password1: undefined,\r\n password2: undefined\r\n });\r\n\r\n\r\n useEffect(() => {\r\n if (email) {\r\n setEmailValid(emailValidator.validate(email!));\r\n } else {\r\n setEmailValid(undefined);\r\n } \r\n }, [email])\r\n\r\n useEffect(() => {\r\n if (password) {\r\n setPasswordValid(passwordValidator.validate(password) as boolean);\r\n } else {\r\n setPasswordValid(undefined);\r\n }\r\n }, [password])\r\n\r\n const close = () => {\r\n clear();\r\n props.onClose();\r\n }\r\n\r\n const clear = () => {\r\n setEmail(undefined);\r\n setPassword(undefined);\r\n setSignInFailed(undefined);\r\n setRegisterValues({\r\n email: undefined,\r\n name: undefined,\r\n password1: undefined,\r\n password2: undefined\r\n });\r\n setRegisterValidations({\r\n email: undefined,\r\n name: undefined,\r\n password1: undefined,\r\n password2: undefined\r\n });\r\n setRegistrationFailed(undefined);\r\n setRegistrationFailedMessage(undefined);\r\n }\r\n\r\n const onChangeRegisterValues = (prop: keyof IRegisterValues) => (event: React.ChangeEvent) => {\r\n setRegisterValues({...registerValues, [prop]: event.target.value});\r\n }\r\n\r\n const handleSignIn = async () => {\r\n if (email && password) {\r\n var success = await props.rootStore!.authStore.signIn(email!, password!);\r\n if (success) {\r\n close();\r\n } else {\r\n setSignInFailed(true);\r\n }\r\n }\r\n }\r\n\r\n const handleRegister = async () => {\r\n var email = registerValues.email !== undefined && emailValidator.validate(registerValues.email);\r\n var name = registerValues.name != undefined && registerValues.name.length > 0;\r\n var password1 = registerValues.password1 !== undefined && (passwordValidator.validate(registerValues.password1) as boolean);\r\n var password2 = registerValues.password2 !== undefined && registerValues.password1 == registerValues.password2;\r\n\r\n setRegisterValidations({...registerValidations, email, name, password1, password2});\r\n\r\n if (email && name && password1 && password2) {\r\n try {\r\n await props.rootStore!.authStore.register(registerValues.name!, registerValues.email!, registerValues.password1!);\r\n await props.rootStore!.authStore.signIn(registerValues.email!, registerValues.password1!);\r\n setState('register-success');\r\n } catch (err) {\r\n if (err instanceof UserWithSameEmailAlreadyExistsError) {\r\n setRegistrationFailed(true);\r\n setRegistrationFailedMessage(`Email adres is al in gebruik. Gebruik de optie 'wachtwoord vergeten' als je je wachtwoord niet meer weet.`);\r\n } else {\r\n setRegistrationFailedMessage(`Er is iets fout gegaan. Probeer het later nogmaals.`);\r\n } \r\n } \r\n }\r\n }\r\n\r\n\r\n const handleCancelSignIn = () => {\r\n close();\r\n }\r\n\r\n const backToSignIn = () => {\r\n setState('signin');\r\n }\r\n\r\n const handleResetPassword = async () => {\r\n if (email) {\r\n await props.rootStore!.authStore.transportLayer.requestPasswordReset(email!);\r\n\t\t setState('resetpassword-emailsent');\r\n }\r\n }\r\n\r\n const showRegistrationForm = () => {\r\n setState('register');\r\n }\r\n\r\n return (\r\n \r\n \r\n {state === 'signin' && 'Inloggen'}\r\n {(state === 'register' || state === 'register-success') && 'Registreren'}\r\n {(state === 'resetpassword' || state === 'resetpassword-emailsent') && 'Wachtwoord opnieuw instellen'}\r\n \r\n \r\n {state === 'signin' &&\r\n <>\r\n {signInFailed && \r\n \r\n Inloggen mislukt. Controleer email en wachtwoord en probeer het opnieuw.\r\n \r\n }\r\n \r\n setEmail(e.target.value)}\r\n error={emailValid !== undefined && !emailValid}\r\n />\r\n setPassword(e.target.value)}\r\n error={passwordValid !== undefined && !passwordValid}\r\n fullWidth />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n {state === 'resetpassword' && \r\n <>\r\n \r\n \r\n Vul je email adres in. We sturen je een email om je wachtwoord opnieuw in te stellen.\r\n \r\n setEmail(e.target.value)}\r\n\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\trequired />\r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n {state === 'resetpassword-emailsent' && \r\n <>\r\n \r\n \r\n We hebben je een email verzonden om je wachtwoord opnieuw in te stellen. Volg de instructies in de email en log daarna in.\r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n {state === 'register' &&\r\n <>\r\n {registrationFailed &&\r\n \r\n {registrationFailedMessage}\r\n \r\n }\r\n \r\n \r\n Voer onderstaande gegevens in om te registreren.\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n {state === 'register-success' && \r\n <>\r\n \r\n \r\n Je bent successvol geregistreerd en direct ingelogd. Klik op OK om door te gaan.\r\n \r\n \r\n \r\n \r\n \r\n \r\n } \r\n \r\n );\r\n})));","import React, { useEffect, useState } from 'react';\r\nimport { inject, observer } from 'mobx-react';\r\nimport { makeStyles, useTheme, withTheme } from '@material-ui/core/styles';\r\nimport { Box, Button, TextField, Typography, useMediaQuery } from '@material-ui/core';\r\nimport WizardDialog from '../../../components/wizards/WizardDialog';\r\nimport RootStore from '../../../stores/RootStore';\r\nimport emailValidator from 'email-validator';\r\nimport Event from '../../../models/Event';\r\nimport SignInDialog from './SignInDialog';\r\n\r\ninterface IValues {\r\n eventName: string | undefined,\r\n eventLocation: string | undefined,\r\n organizerEmail: string | undefined,\r\n}\r\n\r\ninterface IValidation {\r\n eventName: boolean | undefined,\r\n eventLocation: boolean | undefined,\r\n organizerEmail: boolean | undefined,\r\n login: boolean | undefined\r\n}\r\n\r\ntype SignInState = 'signin' | 'register' | 'forgetpassword' | 'authenticated';\r\n\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n caption: {\r\n fontWeight: 'bold',\r\n marginTop: theme.spacing(2)\r\n },\r\n textField: {\r\n width: '100%',\r\n marginTop: theme.spacing(2),\r\n marginBottom: theme.spacing(2) \r\n },\r\n marginTopBottom: {\r\n marginTop: theme.spacing(2),\r\n marginBottom: theme.spacing(2)\r\n }\r\n}))\r\n\r\ninterface IProps {\r\n rootStore?: RootStore;\r\n open: boolean,\r\n onClose?: () => void;\r\n onSubmit?: (event: Event) => void;\r\n}\r\n\r\nexport default withTheme(inject('rootStore')(observer((props: IProps) => {\r\n const classes = useStyles();\r\n const theme = useTheme();\r\n const fullScreen = useMediaQuery(theme.breakpoints.down('xs'));\r\n const [values, setValues] = useState({\r\n eventName: undefined,\r\n eventLocation: undefined,\r\n organizerEmail: undefined\r\n });\r\n const [validations, setValidations] = useState({\r\n eventName: undefined,\r\n eventLocation: undefined,\r\n organizerEmail: undefined,\r\n login: undefined\r\n })\r\n const [signInDialogOpen, setSignInDialogOpen] = useState(false);\r\n\r\n const clear = () => {\r\n setValues({...values, \r\n eventName: undefined,\r\n eventLocation: undefined,\r\n organizerEmail: undefined,\r\n });\r\n setValidations({...validations, \r\n eventName: undefined,\r\n eventLocation: undefined,\r\n organizerEmail: undefined,\r\n login: undefined\r\n });\r\n } \r\n\r\n const handleClose = () => {\r\n if (props.onClose) props.onClose();\r\n clear();\r\n }\r\n\r\n const handleSubmit = async () => {\r\n let event = props.rootStore!.eventStore.createEvent();\r\n event.setLocation(values.eventLocation!);\r\n event.setTitle(values.eventName!);\r\n await event.save();\r\n\r\n if (props.onSubmit) props.onSubmit(event);\r\n clear();\r\n }\r\n\r\n const handleTextChange = (prop: keyof IValues) => (event: React.ChangeEvent) => {\r\n setValues({...values, [prop]: event.target.value});\r\n } \r\n \r\n const handleStepValidation = (index: number) => {\r\n switch (index) {\r\n case 0:\r\n const eventName = values.eventName !== undefined;\r\n setValidations({...validations, eventName});\r\n return eventName;\r\n case 1:\r\n const eventLocation = values.eventLocation !== undefined;\r\n setValidations({...validations, eventLocation});\r\n return eventLocation;\r\n case 2:\r\n const organizerEmail = values.organizerEmail !== undefined;\r\n setValidations({...validations, organizerEmail});\r\n return props.rootStore!.authStore.isAuthenticated;\r\n }\r\n return true;\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n Welke naam wil je aan je bijeenkomst geven?\r\n \r\n \r\n \r\n Waar is je bijeenkomst?\r\n Het moet voor je genodigden duidelijk zijn waar ze moeten zijn.\r\n \r\n \r\n \r\n {!props.rootStore!.authStore.isAuthenticated &&\r\n <>\r\n \r\n Om je bijeenkomst af te ronden moet je inloggen of registreren.\r\n \r\n \r\n \r\n \r\n \r\n }\r\n {props.rootStore!.authStore.isAuthenticated &&\r\n \r\n Klik op de knop Afronden om je bijeenkomst te creëren. Je wordt automatisch doorgestuurd naar de beheerpagina, waar je de bijeenkomst verder kunt indelen.\r\n \r\n }\r\n setSignInDialogOpen(false)}/>\r\n \r\n \r\n \r\n );\r\n})));","import { Box, Button, Container, createStyles, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Theme, Typography, WithStyles, withStyles } from '@material-ui/core';\r\nimport grey from '@material-ui/core/colors/grey';\r\nimport { action, observable } from 'mobx';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport React from 'react';\r\nimport { DateUtils } from '../../lib/DateUtils';\r\nimport RootStore from '../../stores/RootStore';\r\nimport StartDialog from '../public/components/StartDialog';\r\n\r\nconst styles = (theme: Theme): any => createStyles({\r\n\ttimeBlock: {\r\n\t\tpadding: theme.spacing(1),\r\n\t\tbackgroundColor: 'white',\r\n\t\tborderStyle: 'solid',\r\n\t\tborderWidth: 1,\r\n\t\tborderRadius: 4,\r\n\t\tborderColor: grey[400]\r\n\t},\r\n});\r\n\r\ninterface IProps extends WithStyles {\r\n\trootStore?: RootStore,\r\n\teventId: string\r\n}\r\n\r\n\r\n@inject('rootStore')\r\n@observer\r\nclass MyEvents extends React.Component {\r\n\r\n\t@observable private eventsLoading = false;\r\n\t@observable private isGetStartedDialogOpen = false;\r\n\r\n\t@action handleAddEvent = () => {\r\n\t\tthis.isGetStartedDialogOpen = true;\r\n\t}\r\n\t@action handleGetStartedDialogClose = () => {\r\n\t\tthis.isGetStartedDialogOpen = false;\r\n\t}\r\n\r\n\trender() {\r\n\t\t//const { classes } = this.props;\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tMijn bijeenkomsten\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tMijn georganiseerde bijeenkomsten\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tNaam\r\n\t\t\t\t\t\t\t\t\t\tPeriode\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{this.props.rootStore!.eventStore.organizedEvents.map((e, i) => {\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t this.props.rootStore!.routerStore.push(`/my/events/${e.id}`)}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t{e.title}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{e.minDayDate && e.maxDayDate && e.minDayDate.toMillis() === e.maxDayDate.toMillis() &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<>{DateUtils.toDateString(e.minDayDate!)}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{e.minDayDate && e.maxDayDate && e.minDayDate.toMillis() !== e.maxDayDate.toMillis() &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<>{DateUtils.toDateString(e.minDayDate!)} - {DateUtils.toDateString(e.maxDayDate!)}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{(!e.minDayDate || !e.maxDayDate) &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<>Planning ontbreekt}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t this.props.rootStore!.routerStore.push(`/my/events/${event.id}`)}\r\n\t\t\t\t/>\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount = async () => {\r\n\t\tif (!this.eventsLoading) {\r\n\t\t\tthis.eventsLoading = true;\r\n\t\t\tawait this.props.rootStore!.eventStore.loadOrganizedEventsForUser(this.props.rootStore!.authStore.user!.id!);\r\n\t\t\tthis.eventsLoading = false;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport default withStyles(styles)(MyEvents);","import React, { useEffect, useState } from 'react';\r\nimport { Backdrop, CircularProgress, makeStyles, withTheme } from '@material-ui/core';\r\nimport RootStore from '../../stores/RootStore';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n backdrop: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n color: '#fff'\r\n }\r\n}))\r\n\r\ninterface IProps {\r\n\trootStore?: RootStore,\r\n\teventId: string,\r\n loadDays?: boolean,\r\n loadRegistrations?: boolean\r\n}\r\n\r\nconst EventLoader = withTheme(inject('rootStore')(observer((props: React.PropsWithChildren) => {\r\n const classes = useStyles();\r\n const eventStore = props.rootStore!.eventStore;\r\n const eventDayStore = props.rootStore!.eventDayStore;\r\n const registrationStore = props.rootStore!.registrationStore;\r\n const [isLoading, setIsLoading] = useState(true);\r\n\r\n useEffect(() => {\r\n eventStore.loadEvent(props.eventId).then(() => {\r\n // 1. Load event\r\n if (props.loadDays !== undefined && props.loadDays) {\r\n // 2. load event dags & registrations\r\n const event = eventStore.get(props.eventId)!;\r\n Promise.all([\r\n eventDayStore.loadDays(event),\r\n registrationStore.loadForEvent(event)\r\n ]).then(() => setIsLoading(false));\r\n } else \r\n {\r\n setIsLoading(false);\r\n }\r\n });\r\n }, [props.eventId, props.loadDays, eventStore, eventDayStore]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {!isLoading && \r\n <>\r\n {props.children}\r\n \r\n }\r\n \r\n );\r\n})));\r\nexport { EventLoader };\r\n\r\n","import { createStyles, Theme, WithStyles, withStyles } from '@material-ui/core';\r\nimport { computed } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport React from 'react';\r\nimport { Route, Switch } from 'react-router-dom';\r\nimport AuthenticatedArea from '../../components/AuthenticatedArea';\r\nimport RootStore from '../../stores/RootStore';\r\nimport MyEventManagement from './MyEventManagement';\r\nimport MyEvents from './MyEvents';\r\nimport { EventLoader } from '../../components/loaders/EventLoader'\r\n\r\nconst styles = (theme: Theme): any => createStyles({\r\n});\r\n\r\n\r\ninterface IProps extends WithStyles {\r\n\trootStore?: RootStore,\r\n\teventId: string\r\n}\r\n\r\n\r\n@inject('rootStore')\r\n@observer\r\nclass MyIndex extends React.Component {\r\n\r\n\t@computed private get areEventsLoaded() {\r\n\t\treturn false;\r\n\t}\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t}/>\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default withStyles(styles)(MyIndex);","import { Box, Container, createStyles, Theme, Typography, WithStyles, withStyles } from '@material-ui/core';\r\nimport { inject, observer } from 'mobx-react';\r\nimport React from 'react';\r\nimport RootStore from '../../stores/RootStore';\r\n\r\n\r\nconst styles = (theme: Theme): any => createStyles({\r\n\tsigninSection: {\r\n\t\tpaddingTop: theme.spacing(10),\r\n\t\tpaddingBottom: theme.spacing(10)\r\n\t},\r\n\tfield: {\r\n\t\tmarginBottom: theme.spacing(1)\r\n\t},\r\n});\r\n\r\n\r\ninterface IProps extends WithStyles {\r\n\trootStore?: RootStore,\r\n}\r\n\r\n\r\n@inject('rootStore')\r\n@observer\r\nclass Contact extends React.Component {\r\n\r\n\r\n\trender() {\r\n\t\t//const { classes } = this.props;\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tContact\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tinfo@tijdprikker.nl\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default withStyles(styles)(Contact);\r\n","import { Box, Container, createStyles, Link, makeStyles, Table, TableBody, TableCell, TableHead, TableRow, Theme, Typography, WithStyles, withStyles, withTheme } from '@material-ui/core';\r\nimport { inject, observer } from 'mobx-react';\r\nimport React from 'react';\r\nimport RootStore from '../../stores/RootStore';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n\tyes: {\r\n\t\tcolor: theme.palette.success.main\r\n\t},\r\n\tno: {\r\n\t\tcolor: theme.palette.error.main\r\n\t}\r\n}));\r\n\r\nconst CookiePolicy = withTheme(() => {\r\n\tconst classes = useStyles();\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tCookiebeleid\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tVoor onze website gebruiken wij verschillende soorten cookies. Wij vinden het belangrijk dat je zelf controle \r\n\t\t\t\t\t\thebt over jouw online privacy. Daarom zijn we duidelijk over welke cookies we gebruiken en waarvoor we ze gebruiken.\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\tWat zijn cookies?\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tCookies zijn kleine tekstbestanden die een website op je computer, tablet of mobiele telefoon plaatst op het moment \r\n\t\t\t\t\t\tdat je de website bezoekt. In deze cookies wordt informatie over jouw websitebezoek opgeslagen. Met cookies kan een \r\n\t\t\t\t\t\twebsite je bijvoorbeeld herkennen bij een volgend bezoek. Dat is handig als je niet telkens opnieuw wilt inloggen.\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\tWelke cookies gebruiken wij?\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tStandaard en bij niet akkoord\r\n\t\t\t\t\t\t\t\t\tBij akkoord\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tFunctionele cookies\r\n\t\t\t\t\t\t\t\t\tja\r\n\t\t\t\t\t\t\t\t\tja\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tAnalytische cookies\r\n\t\t\t\t\t\t\t\t\tja\r\n\t\t\t\t\t\t\t\t\tja\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tOptimalisatie cookies\r\n\t\t\t\t\t\t\t\t\tnee\r\n\t\t\t\t\t\t\t\t\tja\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tAdvertentie cookies\r\n\t\t\t\t\t\t\t\t\tnee\r\n\t\t\t\t\t\t\t\t\tja\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\tFunctionele cookies\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tFunctionele cookies plaatsen we altijd en zijn nodig om de website goed te laten werken. Deze cookies hebben weinig \r\n\t\t\t\t\t\timpact op je privacy en worden anoniem ingezet. Zo kunnen wij onze online dienstverlening uitvoeren. Ze zorgen er \r\n\t\t\t\t\t\tbijvoorbeeld voor dat je ingelogd kunt blijven op de website wanneer je dat wilt.\r\n\t\t\t\t\t\t{/* Met de cookies van Live Chat en \r\n\t\t\t\t\t\tZendesk zorgen wij ervoor dat je ons via de chatfunctie een vraag kunt stellen. */}\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\tNiet-functionele cookies\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tNaast functionele cookies plaatsen we ook standaard analytische cookies. Dat zijn niet-functionele cookies, omdat ze \r\n\t\t\t\t\t\tniet nodig zijn om de website goed te laten werken.\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tPas wanneer je akkoord gaat met het plaatsen van cookies, plaatsen we ook een aantal andere niet-functionele cookies.\r\n\t\t\t\t\t\tDeze hebben allemaal verschillende doeleinden en zorgen ervoor dat wij onze dienstverlening kunnen verbeteren. Zo \r\n\t\t\t\t\t\tgebruiken we cookies om op onze website online survey's te tonen, verbeteringen op onze website te testen, social\r\n\t\t\t\t\t\tmedia buttons te tonen of om relevante advertenties voor onze diensten te kunnen tonen op andere websites.\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\tAnalytische cookies\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tMet analytische cookies kunnen we het websitebezoek meten: bijvoorbeeld hoe vaak onze site wordt bezocht en naar welke \r\n\t\t\t\t\t\tinformatie bezoekers zoeken. Zo weten we welke delen van de site populair zijn en hoe we onze website kunnen verbeteren. \r\n\t\t\t\t\t\tDe statistieken die we verzamelen kunnen we niet herleiden naar personen. Deze gegevens worden na verzameling anoniem gemaakt.\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tWe willen weten of wijzigingen die we doen aan de website ook verbeteringen zijn. Daarom voeren we verbeteringen vaak eerst \r\n\t\t\t\t\t\tuit in een A/B-test: bezoekers zien dan op hetzelfde moment een aangepaste versie van de website. Cookies zorgen ervoor dat \r\n\t\t\t\t\t\tje de juiste versie van een pagina ziet en meten de resultaten. Zo optimaliseren we steeds de website.\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tMet Google Analytics kunnen we de data beter begrijpen. De analytische cookies plaatsen we altijd bij een bezoek aan onze website.\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tMet analytische cookies verzamelen we onder andere de volgende gegevens:\r\n\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t
  • Het aantal bezoekers op onze webpagina's
  • \r\n\t\t\t\t\t\t
  • Hoelang een bezoeker op onze site is.
  • \r\n\t\t\t\t\t\t
  • Gegevens over je browser en apparaat waarmee je onze website bezoekt, zoals besturingssysteem en schermgrootte.
  • \r\n\t\t\t\t\t\t
  • Hoe je op onze website terecht bent gekomen (bijvoorbeeld omdat je op een advertentie van ons hebt geklikt, of op een link in een e-mail).
  • \r\n\t\t\t\t\t\t
  • De snelheid van onze website om je browser te kunnen meten. Met deze informatie kunnen we mogelijke problemen met de prestaties van onze website op tijd ontdekken en oplossen.
  • \r\n\t\t\t\t\t
\r\n\t\t\t\t\tPrivacy\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tMeer informatie over wat Adobe en Google met de verzamelde gegevens doen, lees je in de privacyverklaring van Google. Deze verklaringen kunnen regelmatig wijzigen.\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tWij geven met analytische cookies nooit jouw persoonsgegevens (zoals naam, adres, BSN en telefoonnummer) door aan Adobe of Google. In onze privacyverklaring lees je hoe wij omgaan met persoonsgegevens.\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\tOptimalisatie cookies\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tEr worden momenteel nog geen optimalisatie cookies geplaatst.\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\tAdvertentie cookies\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tEr worden momenteel nog geen advertentie cookies geplaatst.\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\r\n\t);\r\n});\r\n\r\nexport { CookiePolicy }\r\n","import { Box, Typography, Paper } from '@material-ui/core';\r\nimport { makeStyles, withTheme } from '@material-ui/core/styles';\r\nimport clsx from 'clsx';\r\nimport { observer } from 'mobx-react';\r\nimport React from 'react';\r\nimport { DateUtils } from '../../../lib/DateUtils';\r\nimport PublicTimeBlockV2 from '../../../models/PublicTimeBlockV2';\r\n\r\nconst styles = makeStyles((theme) => ({\r\n row: {\r\n padding: theme.spacing(1),\r\n '&:not(:last-child)': {\r\n marginBottom: theme.spacing(2)\r\n }\r\n },\r\n pointer: {\r\n cursor: 'pointer'\r\n },\r\n secondaryHeading: {\r\n fontSize: theme.typography.pxToRem(15),\r\n },\r\n secondaryHeadingColor: {\r\n color: theme.palette.text.secondary,\r\n },\r\n selected: {\r\n color: 'white',\r\n backgroundColor: theme.palette.primary.main,\r\n },\r\n occupied: {\r\n backgroundColor: theme.palette.divider\r\n }\r\n}));\r\n\r\ninterface IProps {\r\n timeBlock: PublicTimeBlockV2,\r\n selected?: boolean;\r\n onClick?: () => void;\r\n}\r\n\r\nexport default withTheme(observer((props: IProps) => {\r\n const classes = styles();\r\n\r\n const handleClick = () => {\r\n if (props.onClick) props.onClick();\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {DateUtils.toTimeString(props.timeBlock.start)} - {DateUtils.toTimeString(props.timeBlock.end)}\r\n \r\n \r\n \r\n {!props.timeBlock.isOccupied && {props.timeBlock.slotsAvailable} plek{props.timeBlock.slotsAvailable > 1 ? 'ken': ''} beschikbaar}\r\n {props.timeBlock.isOccupied && vol}\r\n \r\n \r\n \r\n );\r\n}));","import { DateTime } from 'luxon';\r\nimport { action, computed, observable } from 'mobx';\r\nimport PublicEventDay from './PublicEventDay';\r\n\r\n\r\nexport default class PublicTimeBlockV2 {\r\n\t@observable id: string = '';\r\n\t@observable start: DateTime = DateTime.invalid(' ');\r\n\t@observable end: DateTime = DateTime.invalid(' ');\r\n\t@observable maxNumberOfRegistrations: number = 0;\r\n\t@observable slotsAvailable: number = 0;\r\n\t@observable numberOfRegistrations: number = 0;\r\n\t@observable registrations: TimeBlockRegistration[] = [];\r\n\teventDay: PublicEventDay | undefined;\r\n\r\n\t@computed get isOccupied() {\r\n\t\treturn this.slotsAvailable === 0;\r\n\t}\r\n\r\n\tconstructor(eventDay: PublicEventDay | undefined = undefined) {\r\n\t\tthis.eventDay = eventDay;\r\n\t}\r\n\r\n\t@action register = (id: string, name: string) => {\r\n\t\tif (this.registrations.length < this.maxNumberOfRegistrations - 1) {\r\n\t\t\tthis.registrations.push(new TimeBlockRegistration(id, name));\r\n\t\t} else {\r\n\t\t\tthrow Error(\"Time block is full\");\r\n\t\t}\r\n\t}\r\n\r\n\t@action updateFromServer = (data: any) => {\r\n\t\tthis.id = data.id;\r\n\t\tthis.start = DateTime.fromISO(data.start);\r\n\t\tthis.end = DateTime.fromISO(data.end);\r\n\t\tthis.maxNumberOfRegistrations = +data.maxNumberOfRegistrations;\r\n\t\tthis.slotsAvailable = data.slotsAvailable;\r\n\t\tthis.numberOfRegistrations = data.numberOfRegistrations;\r\n\t}\r\n}\r\n\r\nclass TimeBlockRegistration {\r\n\t@observable id: string | undefined;\r\n\t@observable name: string | undefined;\r\n\r\n\tconstructor(participationId: string, name: string) {\r\n\t\tthis.id = participationId;\r\n\t\tthis.name = name;\r\n\t}\r\n}\r\n","import { Accordion, AccordionDetails, AccordionSummary, Box, Typography } from '@material-ui/core';\r\nimport { makeStyles, withTheme } from '@material-ui/core/styles';\r\nimport { inject, observer } from 'mobx-react';\r\nimport React, { useState } from 'react';\r\nimport RootStore from '../../../stores/RootStore';\r\nimport RefreshIcon from '@material-ui/icons/Refresh';\r\nimport Loading from '../../../components/Loading';\r\nimport pMinDelay from 'p-min-delay';\r\nimport { DateTime } from 'luxon';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport { Divider } from '@material-ui/core';\r\nimport EventRegistrationDayTimeBlock from './EventRegistrationDayTimeBlock';\r\nimport PublicTimeBlockV2 from '../../../models/PublicTimeBlockV2';\r\nimport clsx from 'clsx';\r\n\r\n\r\nconst styles = makeStyles((theme) => ({\r\n heading: {\r\n fontSize: theme.typography.pxToRem(15),\r\n flexShrink: 0,\r\n },\r\n secondaryHeading: {\r\n fontSize: theme.typography.pxToRem(15),\r\n color: theme.palette.text.secondary,\r\n },\r\n selected: {\r\n color: 'white',\r\n backgroundColor: theme.palette.primary.main,\r\n }\r\n}));\r\n\r\ninterface IProps {\r\n rootStore?: RootStore;\r\n eventId: string;\r\n}\r\n\r\nexport default withTheme(inject('rootStore')(observer((props: IProps) => {\r\n \r\n const classes = styles();\r\n const store = props.rootStore!.publicStore;\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [expanded, setExpanded] = useState(false);\r\n\r\n const loadDays = async () => {\r\n setIsLoading(true);\r\n await pMinDelay(store.loadEvent(props.eventId), 1000);\r\n setIsLoading(false);\r\n }\r\n\r\n const handleRefresh = async () => {\r\n await loadDays();\r\n }\r\n\r\n const handleAccordionClick = (id: string) => (event: React.ChangeEvent<{}>, isExpanded: boolean) => {\r\n setExpanded(isExpanded ? id : false);\r\n };\r\n\r\n const handleSelectTimeBlock = (tb: PublicTimeBlockV2) => () => {\r\n // cancellation timeblock or not occupied\r\n if (!tb.id || !tb.isOccupied) \r\n store.selectTimeBlock(tb);\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n Kies een tijdsblok\r\n \r\n \r\n Selecteer bij een van onderstaande dagen één tijdsblok en klik vervolgens op Aanmelden.\r\n \r\n \r\n Let op! Je aanmelding is definitief en kan niet meer gewijzigd worden.\r\n \r\n \r\n \r\n {/* */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Ik kan helaas niet komen\r\n \r\n \r\n\r\n {store.event && store.event!.days.map(day => (\r\n \r\n }>\r\n \r\n \r\n {day.date.toLocaleString(DateTime.DATE_HUGE)}\r\n \r\n \r\n {day.slotsAvailable} van de {day.slotCount} plekken beschikbaar\r\n \r\n \r\n \r\n \r\n \r\n {day.timeBlocks.map(tb => (\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n );\r\n})));\r\n\r\n\r\n","import { Box, Button, Container, createStyles, Grid, Theme, Typography, WithStyles, withStyles } from '@material-ui/core';\r\nimport grey from '@material-ui/core/colors/grey';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport { DateTime } from 'luxon';\r\nimport { action, observable } from 'mobx';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport pMinDelay from 'p-min-delay';\r\nimport React from 'react';\r\nimport Loading from '../../components/Loading';\r\nimport { DateUtils } from '../../lib/DateUtils';\r\nimport { TimeBlockOccupiedError } from '../../lib/Errors';\r\nimport Participation from '../../models/Participation';\r\nimport PublicStore from '../../stores/PublicStore';\r\nimport RootStore from '../../stores/RootStore';\r\nimport EventRegistrationDays from './components/EventRegistrationDays';\r\n\r\nconst styles = (theme: Theme): any => createStyles({\r\n\ttimeBlock: {\r\n\t\tpadding: theme.spacing(1),\r\n\t\tbackgroundColor: 'white',\r\n\t\tborderStyle: 'solid',\r\n\t\tborderWidth: 1,\r\n\t\tborderRadius: 4,\r\n\t\tborderColor: grey[400]\r\n\t},\r\n\tselected: {\r\n\t\tcolor: 'white',\r\n\t\tbackgroundColor: theme.palette.primary.main\r\n\t},\r\n\toccupied: {\r\n\t\tbackgroundColor: theme.palette.action.disabled,\r\n\t\tcolor: theme.palette.action.disabled\r\n\t},\r\n\tfooter: {\r\n\t\tposition: 'fixed',\r\n\t\tbottom: 0,\r\n\t\tbackgroundColor: theme.palette.background.default,\r\n\t\tboxShadow: '0px -5px 10px rgba(0,0,0,0.30)'\r\n\t},\r\n\tcard: {\r\n\t\tmargin: theme.spacing(3)\r\n\t},\r\n\tfield: {\r\n\t\tmarginBottom: theme.spacing(1)\r\n\t},\r\n});\r\n\r\ninterface IProps extends WithStyles {\r\n\trootStore?: RootStore,\r\n\teventId: string\r\n}\r\n\r\n@inject('rootStore')\r\n@observer\r\nclass EventParticipation extends React.Component {\r\n\r\n\t@observable private registrationFinished: boolean = false;\r\n\t@observable private isOccupiedDialogOpen: boolean = false;\r\n\t@observable private showInputErrors: boolean = false;\r\n\tprivate store: PublicStore;\r\n\tprivate participation: Participation;\r\n\r\n\tconstructor(props: IProps) {\r\n\t\tsuper(props);\r\n\t\tthis.store = props.rootStore!.publicStore;\r\n\t\tthis.participation = this.props.rootStore!.participationStore.create(this.props.eventId);\r\n\t}\r\n\r\n\t@action private reserve = () => {\r\n\t\tthis.showInputErrors = true;\r\n\t\tif (this.participation.nameValid && this.participation.emailValid) {\r\n\t\t\tif (this.store.selectedTimeBlock) {\r\n\t\t\t\tthis.participation.setTimeBlock(this.store.selectedTimeBlock!.id);\r\n\t\t\t}\r\n\t\t\tif (this.store.selectedTimeBlock && this.store.selectedTimeBlock.eventDay) {\r\n\t\t\t\tthis.participation.setEventDay(this.store.selectedTimeBlock!.eventDay!.id);\r\n\t\t\t}\r\n\t\t\tthis.participation.save().then(() => {\r\n\t\t\t\tthis.registrationFinished = true;\r\n\t\t\t}).catch((err: Error) => {\r\n\t\t\t\tif (err instanceof TimeBlockOccupiedError) {\r\n\t\t\t\t\tthis.isOccupiedDialogOpen = true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthrow err;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t@action occupiedDialogClose = () => {\r\n\t\tthis.isOccupiedDialogOpen = false;\r\n\t\tthis.store.loadEvent(this.props.eventId);\r\n\t}\r\n\r\n\t@action loadEvent = async (delayed: boolean = false) => {\r\n await pMinDelay(this.store.loadEvent(this.props.eventId), delayed ? 1000 : 0);\r\n }\r\n\r\n\trender() {\r\n\t\t//if (!this.isEventLoaded || !this.isEventCapacityLoaded) return null;\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t{!this.registrationFinished && this.renderRegister()}\r\n\t\t\t\t{this.registrationFinished && this.renderFinished()}\r\n\t\t\t\t{this.renderOccupiedModal()}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tprivate renderOccupiedModal() {\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t { }}\r\n\t\t\t\t\taria-labelledby=\"Helaas, iemand was u net voor.\"\r\n\t\t\t\t\taria-describedby=\"Dit tijdsblok is niet meer beschikbaar.\">\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tHelaas, iemand was u net voor.\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{`Het door jouw geselecteerde tijdsblok ${this.store.selectedTimeBlock && this.store.selectedTimeBlock!.start.toLocaleString(DateTime.DATE_FULL)}, ${this.store.selectedTimeBlock && DateUtils.toTimeString(this.store.selectedTimeBlock!.start)} - ${this.store.selectedTimeBlock && DateUtils.toTimeString(this.store.selectedTimeBlock!.end)}\r\n\t\t\t\t\t\tis zojuist door iemand anders gereserveerd en niet langer beschikbaar. Probeer het opnieuw.`}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tprivate renderWho() {\r\n\t\tconst { classes } = this.props;\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t\r\n\t\t\t\t\t this.participation.setName(e.target.value)}\r\n\t\t\t\t\t\tclassName={classes.field}\r\n\t\t\t\t\t\terror={this.showInputErrors && !this.participation.nameValid}\r\n\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\trequired\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t this.participation.setEmail(e.target.value)}\r\n\t\t\t\t\t\tclassName={classes.field}\r\n\t\t\t\t\t\terror={this.showInputErrors && !this.participation.emailValid}\r\n\t\t\t\t\t\tonKeyDown={() => { this.showInputErrors = true; }}\r\n\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\trequired\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t this.participation.setNumberOfAdults(+e.target.value)}\r\n\t\t\t\t\t\tclassName={classes.field}\r\n\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\trequired\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t this.participation.setNumberOfChildren(+e.target.value)}\r\n\t\t\t\t\t\tclassName={classes.field}\r\n\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\trequired\r\n\t\t\t\t\t/>\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t)\r\n\t}\r\n\r\n\tprivate renderRegister(): JSX.Element {\r\n\t\tconst { classes } = this.props;\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tUitnodiging\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{this.store.event ? this.store.event!.title : ''}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{this.store.event ? this.store.event!.description : ''}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tLocatie: {this.store.event ? this.store.event!.location : ''}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{this.renderWho()}\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t{this.store.selectedTimeBlock && (\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t{(!this.participation.nameValid || this.participation.email.length === 0) &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t`Voer je naam en email in.`\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t{this.store.selectedTimeBlock.id && this.participation.nameValid && this.participation.email.length > 0 &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t`Aanmelden voor ${this.store.selectedTimeBlock.start!.toLocaleString(DateTime.DATE_HUGE)}, ${DateUtils.toTimeString(this.store.selectedTimeBlock!.start)} - ${DateUtils.toTimeString(this.store.selectedTimeBlock!.end)}`\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t{!this.store.selectedTimeBlock.id && this.participation.nameValid && this.participation.email.length > 0 &&\r\n\t\t\t\t\t\t\t\t\t\t\t\t`Afmelden`\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)\r\n\t\t\t\t}\r\n\t\t\t\r\n\t\t)\r\n\t}\r\n\r\n\tprivate renderFinished(): JSX.Element {\r\n\t\tif (!this.store.selectedTimeBlock!.id) {\r\n\t\t\treturn (\r\n\t\t\t\t<>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tJe afmelding is ontvangen.\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tJe aanmelding is ontvangen.\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{this.store.event!.title}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tDatum: {DateUtils.toDateString(this.store.selectedTimeBlock!.start, 'PPPP')}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tTijdstip: {DateUtils.toTimeString(this.store.selectedTimeBlock!.start)} tot {DateUtils.toTimeString(this.store.selectedTimeBlock!.end)}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tLocatie: {this.store.event!.location}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tWe zien je graag op {DateUtils.toDateString(this.store.selectedTimeBlock!.start, 'PPPP')} tussen {DateUtils.toTimeString(this.store.selectedTimeBlock!.start)} uur en {DateUtils.toTimeString(this.store.selectedTimeBlock!.end)}. Om {DateUtils.toTimeString(this.store.selectedTimeBlock!.end)} uur\r\n\t\t\t\t\t\t\tverzoeken we je vriendelijk plaats te maken voor de volgende gasten.\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tJe ontvangt binnen enkele minuten een bevestigingsmail van je aanmelding. Deze mail kan in je spam terecht komen. Mocht je niets ontvangen hebben, dan kun je contact met ons opnemen via info@tijdprikker.nl en helpen we je graag verder.\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{/* \r\n\t\t\t\t\t\t\tJe ontvangt een bevestigingsmail met mogelijkheid tot het wijzigen en annuleren van je reservering.\r\n\t\t\t\t\t\t\tDeze e-mail kan in je spam terecht komen.\r\n\t\t\t\t\t\t */}\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.loadEvent();\r\n\t}\r\n}\r\n\r\nexport default withStyles(styles)(EventParticipation);","import { Box, Card, CardContent, createStyles, Theme, Typography, WithStyles, withStyles } from \"@material-ui/core\";\r\n//import blue from '@material-ui/core/colors/blue';\r\nimport React from 'react';\r\n\r\nconst styles = (theme: Theme): any => createStyles({\r\n\troot: {\r\n\t\t//margin: theme.spacing(2),\r\n\t\t//backgroundColor: blue[100]\r\n\t}\r\n});\r\n\r\ninterface IProps extends WithStyles {\r\n\tindex: string;\r\n}\r\n\r\nconst InfoStep = (props: React.PropsWithChildren) => {\r\n\tconst { classes } = props;\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tSTAP\r\n\t\t\t\t\t\t\t{props.index}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{props.children}\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default withStyles(styles)(InfoStep);","import { Box, Button, Container, Grid, Link, makeStyles, Theme, Typography, withTheme } from '@material-ui/core';\r\nimport { inject, observer } from 'mobx-react';\r\nimport React from 'react';\r\nimport InfoStep from '../../components/InfoStep';\r\nimport RootStore from '../../stores/RootStore';\r\nimport StartDialog from './components/StartDialog';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n\tappBar: {\r\n\t\tbackgroundColor: 'white'\r\n\t},\r\n\thomeSection: {\r\n\t\tpaddingTop: theme.spacing(10),\r\n\t\tpaddingBottom: theme.spacing(10)\r\n\t},\r\n\timageSection: {\r\n\t\tbackgroundImage: `linear-gradient(\r\n\t\t\trgba(0, 0, 0, 0.65), \r\n\t\t\trgba(0, 0, 0, 0.65)\r\n\t\t ), url(${\"content/assets/home-background3.jpg\"})`,\r\n\t\tbackgroundPosition: 'center center',\r\n\t\tbackgroundSize: 'cover',\r\n\t\tcolor: 'white'\r\n\t},\r\n\tstartNowButton: {\r\n\t\tpaddingTop: theme.spacing(2),\r\n\t\tpaddingBottom: theme.spacing(2),\r\n\t\tpaddingLeft: theme.spacing(3),\r\n\t\tpaddingRight: theme.spacing(3),\r\n\t},\r\n\tparagraph: {\r\n\t\tmarginBottom: theme.spacing(2)\r\n\t},\r\n}));\r\n\r\n\r\ninterface IProps {\r\n\trootStore?: RootStore,\r\n\tgetStartedDialogOpen?: boolean\r\n}\r\n\r\nconst Home = withTheme(inject('rootStore')(observer((props: React.PropsWithChildren) => {\r\n\tconst classes = useStyles();\r\n\r\n\tconst image = { \r\n\t\tshadeOverlay: 0.5,\r\n\t\tsrc: 'content/assets/home-background3.jpg',\r\n\t\tauthorName: 'Viktor Hanacek',\r\n\t\tauthorUrl: 'https://picjumbo.com/author/viktorhanacek/',\r\n\t\tphotoSiteName: 'picjumbo',\r\n\t\tphotoSiteUrl: 'https://picjumbo.com/freelance-woman-working-on-her-macbook/'\r\n\t}\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tPlan je bijeenkomst, verdeeld in tijdsblokken\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tBeperkte ruimte om al je gasten tegelijk te ontvangen? Of wil je de gasten verdelen over de dag? Deel je bijeenkomst in tijdsblokken en laat je genodigden kiezen wanneer ze komen.\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\tPhoto by {image.authorName} from {image.photoSiteName}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tHoe het werkt\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tJe geeft door wanneer je bijeenkomst plaatsvindt (datum & tijdstip) en hoeveel huishoudens* je tegelijk kunt ontvangen op je locatie. Het systeem berekent automatisch hoeveel tijdsblokken er nodig zijn om al je gasten binnen je opgegeven tijd te kunnen ontvangen.\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tVervolgens krijg je een link die je kunt delen met je gasten. Als zij op de link klikken, kunnen ze een tijdsblok naar keuze kiezen. Vol = vol.\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tAls organisator van de bijeenkomst kun je zien wie wanneer komt.\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t* Check altijd de site van het RIVM voor de laatste richtlijnen m.b.t. het coronavirus.\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\tPlan je bijeenkomst\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\tVul de details in over je bijeenkomst en je tijdsblokken worden automatisch gemaakt.\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\tVerstuur de uitnodigingen\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\tJe ontvangt een link die je kunt delen met de genodigden.\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\tGenodigden reserveren een tijdsblok\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\tVia de link kun je direct een tijdsblok naar keuze kiezen. Met 1 druk op de knop geregeld!\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t props.rootStore!.routerStore.push('/')}\r\n\t\t\t\tonSubmit={(event) => props.rootStore!.routerStore.push(`my/events/${event.id}`)}\r\n\t\t\t/>\r\n\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tTijdprikker is mogelijk gemaakt door:\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\"triact\"\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\"lavart\"\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n})));\r\n\r\nexport default Home;\r\n","import { Box, Container, createStyles, Theme, Typography, WithStyles, withStyles } from '@material-ui/core';\r\nimport { inject, observer } from 'mobx-react';\r\nimport React from 'react';\r\nimport RootStore from '../../stores/RootStore';\r\n\r\n\r\nconst styles = (theme: Theme): any => createStyles({\r\n\tsigninSection: {\r\n\t\tpaddingTop: theme.spacing(10),\r\n\t\tpaddingBottom: theme.spacing(10)\r\n\t},\r\n\tfield: {\r\n\t\tmarginBottom: theme.spacing(1)\r\n\t},\r\n});\r\n\r\n\r\ninterface IProps extends WithStyles {\r\n\trootStore?: RootStore,\r\n}\r\n\r\n\r\n@inject('rootStore')\r\n@observer\r\nclass PrivacyStatement extends React.Component {\r\n\r\n\r\n\trender() {\r\n\t\t//const { classes } = this.props;\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tPrivacy statement\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tWij geven om uw privicay. We versturen uw prive gegevens alleen naar derde partijen als wet- en regelgeving ons hiertoe verplicht,\r\n\t\t\t\t\t\t\t\twanneer het vereist is om de werking van een feature te corrigeren, of wanneer de data compleet annoniem is.\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tWe gebruiken gebruikelijke tools om performence en gebruik te annalyseren. De technieken en tools staan uitgelicht in dit document.\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tAls u het niet eens bent met onze Privacy Statement, willen we graag de reden weten zodat wij hiervan kunnen leren en mogelijk onze\r\n\t\t\t\t\t\t\t\tstrategy kunnen aanpassen. Als u het helaas niet eens bent met onze Privacy Statement dient u onze diensten niet te gebruiken.\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tWelke persoonlijke data verzamelen we\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tOnze diensten kunnen we alleen aanbieden door enige persoonlijke data te vragen. Van alle gebruikers, geregistreerd als zowel genodigden\r\n\t\t\t\t\t\t\t\tvoor je event, slaan we de naam en email op. Als je een adres ingeeft bij het veld \"locatie\" van een event, slaan we ook dit op.\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tAndere informatie die we (tijdelijk) opslaan zijn jouw IP address, je browser gegevens, taalvoorkeuren, het merk van je mobiele telefoon etc.\r\n\t\t\t\t\t\t\t\tSommige data wordt gebruikt voor statistische analyses. Niet alle informatie wordt direct door ons gebruikt. Sommige informatie is noodzakelijke\r\n\t\t\t\t\t\t\t\tvanwege technische doeleinden om zo bijvoorbeeld een correcte werking van de dienstverlening op jouw device te kunnen aanbieden.\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tAls je jouw data wilt verwijderen, neem dan contact op met onze service desk.\r\n\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t{/* Advertenties\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tWe \r\n\t\t\t\t\t\t\t */}\r\n\r\n\t\t\t\t\t\t\tWelke data wordt gedeelt met anderen\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tWe verkopen of overhandigen geen persoonlijke data aan anderen. Als we data delen is dit om aan de Nederlandse wet- en regelgeving te voldoen.\r\n\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\tHoe gebruiken we Social Media\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tWe bieden geen login services aan via Social Media platformen. Ook bieden we geen mogelijkheden aan om je event te delen op Social Media.\r\n\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\tMinimale vereiste leeftijd\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tOmdat we niet eenvoudig een minimale leeftijd kunnen controleren via integraties is de minimale leeftijd voor het gebruik van onze diensten 18 jaar.\r\n\t\t\t\t\t\t\t\tMensen van 17 jaar en jonger kunnen onze diensten alleen gebruiken onder toezicht van ouders of voogd.\r\n\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\tHoe kan je de persoonlijke data beheren die we van je hebben\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tJe hebt rechten om alle data in te zien die we van je hebben. Je kan een overzicht opvragen door contact op te nemen met onze service desk.\r\n\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\tWie verwerkt je data\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tTijdprikker.nl, gelocaliseerd in Rijswijk, Nederland, beheert en verwerkt je persoonlijke data in hun platform.\r\n\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\tSession Recording\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tOm beter te begrijpen hoe ons product gebruikt wordt, kunnen we verschillende technieken inzetten. Het is niet gezegd dat deze technieken zijn\r\n\t\t\t\t\t\t\t\tingeschakeld voor jou. Een van deze technieken is \"Session Recording\". Hierdoor verkrijgen we Heatmaps en geannonimiseerde opnames van hoe onze\r\n\t\t\t\t\t\t\t\tbezoekers ons product gebruiken. Dit stelt ons in staat de performance van features te analyseren. Ze helpen ons complexe features en ontbrekende\r\n\t\t\t\t\t\t\t\tfeatures te identificeren.\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default withStyles(styles)(PrivacyStatement);\r\n","import { Box, Button, CircularProgress, Container, createStyles, Grid, TextField, Theme, Typography, WithStyles, withStyles } from '@material-ui/core';\r\nimport Alert from '@material-ui/lab/Alert';\r\nimport { action, computed, observable } from 'mobx';\r\nimport { inject, observer } from 'mobx-react';\r\nimport React from 'react';\r\nimport passwordValidator from '../../lib/PasswordValidator';\r\nimport RootStore from '../../stores/RootStore';\r\n\r\n\r\nconst styles = (theme: Theme): any => createStyles({\r\n\tsigninSection: {\r\n\t\tpaddingTop: theme.spacing(10),\r\n\t\tpaddingBottom: theme.spacing(10)\r\n\t},\r\n\tfield: {\r\n\t\tmarginBottom: theme.spacing(1)\r\n\t},\r\n});\r\n\r\n\r\ninterface IProps extends WithStyles {\r\n\trootStore?: RootStore,\r\n\tid: string\r\n}\r\n\r\n\r\n@inject('rootStore')\r\n@observer\r\nclass ResetPassword extends React.Component {\r\n\r\n\t@observable private passwordReset: any | undefined;\r\n\t@observable private password1: string = '';\r\n\t@observable private password2: string = '';\r\n\t@observable private attempt: number = 0;\r\n\t@observable private viewState: 'loading' | 'expired' | 'loaded' | 'updating' | 'successful' | 'failed' = 'loading';\r\n\r\n\t@computed get password1Valid() {\r\n\t\treturn passwordValidator.validate(this.password1) as boolean;\r\n\t}\r\n\r\n\t@computed get password2Valid() {\r\n\t\treturn this.password1 === this.password2;\r\n\t}\r\n\r\n\t@action initialize = async () => {\r\n\t\tif (!this.passwordReset) {\r\n\t\t\tthis.passwordReset = await this.props.rootStore!.authStore.transportLayer.getPasswordReset(this.props.id);\r\n\r\n\t\t\tif (this.passwordReset.expired) {\r\n\t\t\t\tthis.viewState = 'expired'\r\n\t\t\t} else {\r\n\t\t\t\tthis.viewState = 'loaded';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t@action private changePassword = async () => {\r\n\t\tthis.attempt++;\r\n\t\tif (this.password1Valid && this.password2Valid) {\r\n\t\t\tthis.viewState = 'updating';\r\n\t\t\tlet res = await this.props.rootStore!.authStore.transportLayer.resetPassword(this.props.id, this.password1);\r\n\t\t\tthis.viewState = res ? 'successful' : 'failed';\r\n\t\t}\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst { classes } = this.props;\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{this.viewState === 'loading' &&\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t{this.viewState === 'expired' &&\r\n\t\t\t\t\t\t\t\tHelaas, deze link is niet meer geldig.\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t{this.viewState === 'loaded' &&\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{this.attempt >= 1 && (!this.password1Valid || !this.password2Valid) &&\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t{!this.password1Valid && Het wachtwoord is niet geldig. Het wachtwoord moet tussen de 8 en 30 karakters lang zijn. Gebruik minimaal een hoofdletter, kleine letter en een cijfer.}\r\n\t\t\t\t\t\t\t\t\t\t\t\t{!this.password2Valid && De wachtwoorden komen niet overeen.}\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t this.password1 = e.target.value}\r\n\t\t\t\t\t\t\t\t\t\t\terror={this.attempt > 0 && !this.password1Valid}\r\n\t\t\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\t\t\trequired />\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t this.password2 = e.target.value}\r\n\t\t\t\t\t\t\t\t\t\t\terror={this.attempt > 0 && !this.password2Valid}\r\n\t\t\t\t\t\t\t\t\t\t\tfullWidth\r\n\t\t\t\t\t\t\t\t\t\t\trequired />\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t{this.viewState === 'updating' &&\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tJe wachtwoord wordt gewijzigd...\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t{this.viewState === 'successful' &&\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tJe wachtwoord is gewijzigd.\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t{this.viewState === 'failed' &&\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tHet wijzigen van je wachtwoord is mislukt.\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tcomponentDidMount = async () => {\r\n\t\tawait this.initialize();\r\n\t}\r\n}\r\n\r\nexport default withStyles(styles)(ResetPassword);\r\n","import { Box, Container, createStyles, Theme, WithStyles, withStyles } from '@material-ui/core';\r\nimport { action } from 'mobx';\r\nimport { inject, observer } from 'mobx-react';\r\nimport React from 'react';\r\nimport SignInForm from '../../components/SignInForm';\r\nimport RootStore from '../../stores/RootStore';\r\n\r\n\r\nconst styles = (theme: Theme): any => createStyles({\r\n\tsigninSection: {\r\n\t\tpaddingTop: theme.spacing(10),\r\n\t\tpaddingBottom: theme.spacing(10)\r\n\t},\r\n\tfield: {\r\n\t\tmarginBottom: theme.spacing(1)\r\n\t},\r\n});\r\n\r\n\r\ninterface IProps extends WithStyles {\r\n\trootStore?: RootStore,\r\n}\r\n\r\n\r\n@inject('rootStore')\r\n@observer\r\nclass SignIn extends React.Component {\r\n\r\n\t@action private onSignIn = async () => {\r\n\t\t//this.props.rootStore!.routerStore.push('/');\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst { classes } = this.props;\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default withStyles(styles)(SignIn);\r\n","import { Box, Container, createStyles, Theme, Typography, WithStyles, withStyles } from '@material-ui/core';\r\nimport { inject, observer } from 'mobx-react';\r\nimport React from 'react';\r\nimport RootStore from '../../stores/RootStore';\r\n\r\n\r\nconst styles = (theme: Theme): any => createStyles({\r\n\tsigninSection: {\r\n\t\tpaddingTop: theme.spacing(10),\r\n\t\tpaddingBottom: theme.spacing(10)\r\n\t},\r\n\tfield: {\r\n\t\tmarginBottom: theme.spacing(1)\r\n\t},\r\n});\r\n\r\n\r\ninterface IProps extends WithStyles {\r\n\trootStore?: RootStore,\r\n}\r\n\r\n\r\n@inject('rootStore')\r\n@observer\r\nclass TermsOfUse extends React.Component {\r\n\r\n\r\n\trender() {\r\n\t\t//const { classes } = this.props;\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tGebruiksvoorwaarden\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tIntroductie\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tIn deze Gebruiksvoorwaarden worden de voorwaarden besproken waaronder u als Gebruiker van Tijdprikker.nl gebruik kunt maken van\r\n\t\t\t\t\t\t\tde Dienst die aangeboden wordt op Tijdprikker.nl. Lees deze Gebruiksvoorwaarden goed door, zodat u weet wat\r\n\t\t\t\t\t\t\tuw rechten en plichten zijn wanneer u gebruik maakt van de Dienst. Door gebruik te maken van de Dienst, op welke manier dan\r\n\t\t\t\t\t\t\took, aanvaardt u daarmee gebonden te zijn aan deze Algemene voorwaarden.\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tDefinities\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\"Tijdprikker.nl\", \"we\", \"wij\", \"ons\", en \"onze\" betekenen \"Tijdprikker.nl\". \"Tijdprikker.nl\" is een initiatief dat mensen de\r\n\t\t\t\t\t\t\tmogelijkheid geeft bijeenkomsten te organiseren waarbij de genodigden verdeeld worden over tijdsblokken.\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\"Service\", \"services\", \"dienst\", \"diensten\", \"platform\", en \"product\" verwijzen naar de (mobile) website en mobile phone app waardoor onze services\r\n\t\t\t\t\t\t\tbeschikbaar gemaakt worden.\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\tOmvang en aard van onze dienstverlening\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tVia ons platform, bieden wij een mogelijkheid aan waarmee gebruikers online een bijeenskomst kunnen plannen en online kunnen communiceren\r\n\t\t\t\t\t\t\tmet andere gebruikers.\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tTenzij anders vermeld, mogen onze diensten alleen gebruikt worden door personen van 18 jaar en ouder. Personen van 17 jaar en\r\n\t\t\t\t\t\t\tjonger mogen onze diensten alleen gebruiken onder toezicht van ouders en/of voogd.\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\tPrivacy en Cookies\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tTijdprikker.nl respecteert uw privacy. Bekijk ons Privacy Statement voor meer informatie.\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\tGratis voor consumenten\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tTenzij anders aangegeven of anderszins redelijk kan worden geacht, zijn onze diensten gratis. { /*Onze omzet komt voort uit advertenties, betaalde versies en onze ppartner platformen.*/}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tDe term \"gratis\" is alleen van toepassing op de diensten geleverd door Tijdprikker.nl.\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\tCorrespondentie en communicatie\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tDoor gebruik te maken van ons platform ga je akkoord met het ontvangen van emails die wij mogelijk verzenden betreffende uw event.\r\n\t\t\t\t\t\t\tDe communicatie kan zowel functioneel als informatief van aard zijn. Deze emails kunnen ook commerciele utingen bevatten.\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tJe gaat ook akkoord dat elke persoon die je uitnodigt voor een event, rederlijkerwijs een gewillige deelnemer is aan je event of iemand\r\n\t\t\t\t\t\t\tdie je (indirect) kent. Je gaat er mee akkoord dat alle informatie die je indient correct is en dat je de rechten bezit op alle inhoud die je\r\n\t\t\t\t\t\t\tuploadt naar onze platformen.\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\tMisbruik\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tOnwettig gebruik van ons platform is verboden. We nemen contact op met de autoriteiten wanneer evenementen illegale inhoud bevatten (zoals,\r\n\t\t\t\t\t\t\tmaar niet beberkt tot: aanzetten tot haat, pornografie door minderjarigen, enz.), Of wanneer ons platform wordt gebruikt voor verzending van spam.\r\n\t\t\t\t\t\t\tOp het gebruik van ons platform is Nederlands en tot op zekere hoogte Europees recht van toepassing.\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\tIntellectueel eigendom\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tTenzij anders aangegeven, is de software vereist voor onze diensten, of gebruikt door ons platform, eigendom van Tijdprikker.nl.\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\tDisclaimer\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tHoud er rekening mee dat gegevens in een evenement doorgaans zichtbaar zijn voor alle deelnemers. Verstrek geen geheimen of persoonlijke gegevens.\r\n\t\t\t\t\t\t\tWe passen verschillende beveiligingsmechanismen toe om een veilige omgeving te bieden, maar ons platform is niet bedoeld om gevoelige of persoonlijke\r\n\t\t\t\t\t\t\tgegevens te delen.\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\tEigendom van gegevens\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tIedereen is verantwoordelijk voor, en heeft recht op, zijn/haar gegevens. Bij twijfel zijn de evenementgegevens eigendom van de organisator.\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\tDiversen\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tVoor zover wettelijk toegestaan, worden deze voorwaarden beheerst door en geïnterpreteerd in overeenstemming met Nederlands recht en elk geschil dat\r\n\t\t\t\t\t\t\tvoortvloeit uit deze algemene voorwaarden en onze diensten worden uitsluitend voorgelegd aan de bevoegde rechtbanken in Nederland.\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default withStyles(styles)(TermsOfUse);\r\n","import React, { useEffect, useRef, useState } from 'react';\r\nimport { makeStyles, withTheme } from '@material-ui/core/styles';\r\nimport { Box, Button, Container, Drawer, Link, Typography } from '@material-ui/core';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport { LocalStorage } from '../../../lib/LocalStorage';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { useWindowSize } from '../../../lib/hooks/useWindowSize';\r\nimport { PropTypes } from 'mobx-react';\r\nimport { isWhiteSpaceLike } from 'typescript';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n closeIcon: {\r\n cursor: 'pointer'\r\n },\r\n link: {\r\n color: 'white',\r\n textDecoration: 'underline'\r\n },\r\n buttonConfirm: {\r\n color: theme.palette.primary.main,\r\n borderColor: 'white',\r\n backgroundColor: 'white'\r\n },\r\n buttonCustomize: {\r\n color: 'white',\r\n textTransform: 'none',\r\n marginRight: theme.spacing(2)\r\n }\r\n}));\r\n\r\ninterface IProps {\r\n open: boolean;\r\n onCustomize: () => void;\r\n onConfirm: () => void;\r\n}\r\n\r\nconst CookieConsent = withTheme((props: IProps) => {\r\n const classes = useStyles();\r\n const [open, setOpen] = useState(false);\r\n const [height, setHeight] = useState(0);\r\n const drawerRef = useRef(null);\r\n\r\n useWindowSize((windowSize) => {\r\n // update height of the background div to prevent that the page is behind the drawer.\r\n if (open && drawerRef && drawerRef.current) {\r\n const h = (drawerRef.current as any).offsetHeight;\r\n if (h != height) {\r\n setHeight(h);\r\n }\r\n }\r\n });\r\n\r\n useEffect(() => {\r\n // remove height when drawer is closed.\r\n if (!open && height > 0) { \r\n setHeight(0);\r\n }\r\n }, [open]);\r\n\r\n const handleConfirm = () => {\r\n props.onConfirm();\r\n }\r\n\r\n const handleCustomize = () => {\r\n props.onCustomize();\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n Wij en onze partners gebruiken cookies om jouw ervaring te personaliseren, voor statistieken en marketingdoeleinden.\r\n Door op 'zelf instellen' te klikken, kun je meer lezen over onze cookies en je voorkeuren aanpassen.\r\n Door op 'Accepteren en doorgaan' te klikken, ga je akkoord met het gebruik van de cookies zoals omschreven in\r\n ons cookiebeleid\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n );\r\n});\r\n\r\nexport { CookieConsent };\r\n","import React, { useEffect, useState } from 'react';\r\n\r\ntype WindowSize = {\r\n width: number | undefined,\r\n height: number | undefined\r\n}\r\n\r\nconst useWindowSize = (callback: (windowSize: WindowSize) => void) => {\r\n \r\n // Initialize state with undefined width/height so server and client renders match\r\n // Learn more here: https://joshwcomeau.com/react/the-perils-of-rehydration/\r\n const [windowSize, setWindowSize] = useState({\r\n width: undefined,\r\n height: undefined,\r\n });\r\n\r\n useEffect(() => {\r\n callback(windowSize);\r\n }, [windowSize])\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n setWindowSize({\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n });\r\n }\r\n \r\n // Add event listener\r\n window.addEventListener(\"resize\", handleResize);\r\n \r\n // Call handler right away so state gets updated with initial window size\r\n handleResize();\r\n \r\n // Remove event listener on cleanup\r\n return () => window.removeEventListener(\"resize\", handleResize);\r\n\r\n }, []);\r\n\r\n return windowSize;\r\n}\r\n\r\nexport { useWindowSize }\r\n","import { Box, Button, Checkbox, Dialog, DialogActions, DialogContent, DialogTitle, Typography, withTheme } from '@material-ui/core';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { CookiePreferences } from '../../../models/CookiePreferences';\r\n\r\n\r\ninterface IProps {\r\n open: boolean,\r\n onClose: () => void,\r\n cookiePreferences: CookiePreferences\r\n}\r\n\r\nconst CookiePreferencesDialog = withTheme((props: IProps) => {\r\n\r\n const [advertisement, setAdvertisement] = useState(false);\r\n const [optimization, setOptimization] = useState(false);\r\n\r\n useEffect(() => {\r\n // default enabled in form when no choices made yet.\r\n if (props.cookiePreferences.functional === undefined) {\r\n setAdvertisement(true);\r\n setOptimization(true);\r\n } else {\r\n setAdvertisement(Boolean(props.cookiePreferences.advertisement));\r\n setAdvertisement(Boolean(props.cookiePreferences.optimization));\r\n }\r\n }, [])\r\n\r\n const onAdvertisementChanged = (e: React.ChangeEvent, checked: boolean) => {\r\n setAdvertisement(checked);\r\n }\r\n\r\n const onOptimizationChanged = (e: React.ChangeEvent, checked: boolean) => {\r\n setOptimization(checked);\r\n }\r\n\r\n const handleSave = () => {\r\n const cp = props.cookiePreferences;\r\n cp.functional = true;\r\n cp.analytical = true;\r\n cp.advertisement = advertisement;\r\n cp.optimization = optimization;\r\n cp.save();\r\n props.onClose();\r\n }\r\n\r\n return (\r\n \r\n \r\n Cookies op onze website\r\n \r\n \r\n \r\n We plaatsen verschillende soorten cookies op onze website. Omdat we het belangrijk vinden dat je zelf controle hebt \r\n over jouw online privacy, informeren we je graag over welke cookies we gebruiken en waarvoor we deze gebruiken.\r\n Functionele cookies plaatsen we altijd. Deze zijn noodzakelijk om de website goed te laten werken. Ook plaatsen we \r\n analytische cookies. Hiermee meten we het gebruik van onze website en weten we hoe we die kunnen verbeteren. \r\n Uit deze cookies kunnen we geen persoonlijke gegevens herleiden.\r\n \r\n \r\n Geef aan of je toestemming geeft voor de volgende cookies:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Advertentie cookies zodat ik gepersonaliseerde aanbiedingen kan zien op andere websites. \r\n Met deze cookies kunnen advertentienetwerken je internetgedrag volgen.\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Optimalisatie cookies zodat ik feedback kan geven over mijn gebruikerservaring op de website.\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n});\r\n\r\nexport { CookiePreferencesDialog }\r\n","import { withTheme, makeStyles, Link } from '@material-ui/core';\r\nimport { Box, Container } from '@material-ui/core';\r\nimport React from 'react';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n footerSection: {\r\n\t\tbackgroundColor: theme.palette.text.primary,\r\n\t\tcolor: 'white'\r\n\t},\r\n footerLink: {\r\n\t\tcolor: 'white',\r\n cursor: 'pointer'\r\n\t},\r\n\tfooterItem: {\r\n\t\tmargin: theme.spacing(2)\r\n\t}\r\n}));\r\n\r\n\r\ninterface IProps {\r\n onCookieSettingsClick: () => void\r\n}\r\n\r\nconst Footer = withTheme((props: IProps) => {\r\n const classes = useStyles();\r\n\r\n const onCookieSettingsClick = () => {\r\n props.onCookieSettingsClick();\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Gebruiksvoorwaarden\r\n \r\n \r\n Privacybeleid\r\n \r\n \r\n Cookiebeleid\r\n \r\n \r\n Cookie instellingen\r\n \r\n \r\n Contact\r\n \r\n \r\n \r\n \r\n );\r\n});\r\n\r\nexport { Footer }\r\n","class LocalStorage {\r\n\r\n static getItem = (key: string) => {\r\n const item = localStorage.getItem(key);\r\n if (!item) return undefined;\r\n\r\n const record = JSON.parse(item);\r\n if (record && (record.expireAt === undefined || new Date().getTime() < record.expireAt)) {\r\n return record.value as T;\r\n } else {\r\n localStorage.removeItem(key);\r\n }\r\n }\r\n\r\n static setItem = (key: string, value: T, expireAfterMs: number | undefined) => {\r\n const record = {\r\n expireAt: expireAfterMs ? new Date().getTime() + expireAfterMs : undefined,\r\n value: JSON.stringify(value)\r\n };\r\n localStorage.setItem(key, JSON.stringify(record));\r\n }\r\n}\r\n\r\nexport { LocalStorage }","import { LocalStorage } from \"../lib/LocalStorage\";\r\n\r\n\r\nclass CookiePreferences {\r\n\r\n functional: boolean | undefined;\r\n analytical: boolean | undefined;\r\n optimization: boolean | undefined;\r\n advertisement: boolean | undefined;\r\n\r\n load = () : boolean => {\r\n try {\r\n const val = LocalStorage.getItem('tijdprikker_cookie_preferences');\r\n if (val) {\r\n this.functional = val.functional;\r\n this.analytical = val.analytical;\r\n this.optimization = val.optimization;\r\n this.advertisement = val.advertisement;\r\n }\r\n return val !== undefined;\r\n } catch (err) {\r\n return false;\r\n }\r\n }\r\n\r\n acceptAllAndSave = () => {\r\n this.functional = this.analytical = this.optimization = this.advertisement = true;\r\n this.save();\r\n }\r\n\r\n save = () => {\r\n LocalStorage.setItem('tijdprikker_cookie_preferences', this, 1000 * 60 * 60 * 24 * 365);\r\n }\r\n}\r\n\r\nexport { CookiePreferences }","import { Box, Container, Link } from '@material-ui/core';\r\nimport { makeStyles, Theme, ThemeProvider, WithStyles, withTheme } from '@material-ui/core/styles';\r\nimport { inject, observer } from 'mobx-react';\r\nimport React, { useEffect, useState } from 'react';\r\nimport GoogleFontLoader from 'react-google-font-loader';\r\nimport { Link as RouterLink, Route, Switch } from 'react-router-dom';\r\nimport MyAppBar from './components/MyAppBar';\r\nimport RootStore from './stores/RootStore';\r\nimport theme from './Theme';\r\nimport MyIndex from './views/my/MyIndex';\r\nimport Contact from './views/public/Contact';\r\nimport { CookiePolicy } from './views/public/CookiePolicy';\r\nimport EventRegistration from './views/public/EventRegistration';\r\nimport Home from './views/public/Home';\r\nimport PrivacyStatement from './views/public/PrivacyStatement';\r\nimport ResetPassword from './views/public/ResetPassword';\r\nimport SignIn from './views/public/SignIn';\r\nimport TermsOfUse from './views/public/TermsOfUse';\r\nimport { CookieConsent } from './views/public/components/CookieConsent';\r\nimport { CookiePreferencesDialog } from './views/public/components/CookiePreferencesDialog';\r\nimport { Footer } from './views/public/components/Footer';\r\nimport { LocalStorage } from './lib/LocalStorage';\r\nimport { CookiePreferences } from './models/CookiePreferences';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n\troot: {\r\n\t\t//\tflexGrow: 1\r\n\t},\r\n\tappBar: {\r\n\t\tbackgroundColor: 'white',\r\n\t\tcolor: theme.palette.text.primary\r\n\t},\r\n\ttitle: {\r\n\t\t//flexGrow: 1\r\n\t},\r\n\tmenuButton: {\r\n\t\tmarginLeft: -18,\r\n\t\tmarginRight: 10,\r\n\t}\t\r\n}));\r\n\r\ninterface IProps {\r\n\trootStore?: RootStore\r\n}\r\n\r\nconst App = withTheme(inject('rootStore')((props: IProps) => {\r\n\tconst classes = useStyles();\r\n\tconst [cookieConsentOpen, setCookieConsentOpen] = useState(false);\r\n\tconst [cookiePreferencesDialogOpen, setCookiePreferencesDialogOpen] = useState(false);\r\n\tconst [cookiePreferences, setCookiePreferences] = useState(new CookiePreferences());\r\n\t\r\n\tuseEffect(() => {\r\n\t\tif (!cookiePreferences.load()) \r\n\t\t\tsetCookieConsentOpen(true);\r\n\t}, []);\r\n\r\n\tconst handleCookieAccept = () => {\r\n\t\tcookiePreferences.acceptAllAndSave();\r\n\t\tsetCookieConsentOpen(false);\r\n\t}\r\n\tconst showCookiePreferences = () => {\r\n\t\tsetCookiePreferencesDialogOpen(true);\r\n\t}\r\n\tconst handleCookieDialogClose = () => {\r\n\t\tsetCookieConsentOpen(false);\r\n\t\tsetCookiePreferencesDialogOpen(false);\r\n\t}\r\n\t\t\r\n\treturn (\r\n\t\t<>\r\n\t\t\t\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t } />\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t } />\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{/* */}\r\n\t\t\t\t\t\t{/* } /> */}\r\n\t\t\t\t\t\t } />\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t
} />\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
\t\t\t\t\r\n\t\t\r\n\t);\r\n}));\r\n\r\nexport { App }\r\n","import { createStyles, Theme, withStyles, WithStyles } from \"@material-ui/core\";\r\nimport blue from '@material-ui/core/colors/blue';\r\nimport grey from '@material-ui/core/colors/grey';\r\nimport React from \"react\";\r\n\r\nconst styles = (theme: Theme): any => createStyles({\r\n\t'@global': {\r\n\t\thtml: {\r\n\t\t\tfontFamily: 'Raleway, Arial'\r\n\t\t},\r\n\t\tbody: {\r\n\t\t\tfontFamily: 'Raleway, Arial'\r\n\t\t},\r\n\t\t'.page-content': {\r\n\t\t\tpaddingTop: '64px' // app bar correction\r\n\t\t},\r\n\t\t'.page-title': {\r\n\t\t\tpaddingTop: theme.spacing(2),\r\n\t\t\tpaddingBottom: theme.spacing(2)\r\n\t\t},\r\n\t\t'.paper-padding': {\r\n\t\t\tpadding: theme.spacing(2)\r\n\t\t},\r\n\t\t'.footer': {\r\n\t\t\tposition: 'absolute',\r\n\t\t\tbottom: 0,\r\n\t\t\twidth: '100%'\r\n\t\t},\r\n\t\t'.footer-sticky': {\r\n\t\t\tposition: 'fixed',\r\n\t\t\tbottom: 0,\r\n\t\t\twidth: '100%'\r\n\t\t},\r\n\t\t'.card-info': {\r\n\t\t\tbackgroundColor: blue['100'],\r\n\t\t\tborderColor: blue['300']\r\n\t\t},\r\n\t\t'.section': {\r\n\t\t\tpaddingTop: theme.spacing(3),\r\n\t\t\tpaddingBottom: theme.spacing(3)\r\n\t\t},\r\n\t\t'.section-highlight': {\r\n\t\t\tbackgroundColor: grey[200]\r\n\t\t},\r\n\t\t'.pointer': {\r\n\t\t\tcursor: 'pointer'\r\n\t\t}\r\n\t}\r\n});\r\n\r\ninterface IProps extends WithStyles {\r\n}\r\n\r\nclass GlobalCss extends React.Component {\r\n\trender() {\r\n\t\treturn null;\r\n\t}\r\n}\r\n\r\nexport default withStyles(styles)(GlobalCss);\r\n\r\n// const GlobalCss = withStyles({\r\n// \t// @global is handled by jss-plugin-global.\r\n// \t'@global': {\r\n// \t\t// You should target [class*=\"MuiButton-root\"] instead if you nest themes.\r\n// \t\t'.page-title': {\r\n// \t\t\tmargin: 10\r\n// \t\t},\r\n// \t},\r\n// })(() => null);\r\n\r\n//export default GlobalCss;","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' },\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready\r\n .then(registration => {\r\n registration.unregister();\r\n })\r\n .catch(error => {\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n","import axios from 'axios';\r\nimport settings from '../Config';\r\n\r\n\r\nvar axiosInstance = axios.create({\r\n\tbaseURL: settings.apiBaseUrl\r\n});\r\n\r\n\r\nexport default axiosInstance;","import { action, observable } from \"mobx\";\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\n\r\nexport default class User {\r\n\tconstructor(id = uuidv4()) {\r\n\t\tthis.id = id;\r\n\t}\r\n\r\n\t@observable id: string | undefined = undefined;\r\n\t@observable username: string | undefined = '';\r\n\t@observable name: string | undefined = '';\r\n\r\n\t@action updateFromServer = (data: any) => {\r\n\t\tthis.id = data.id;\r\n\t\tthis.username = data.username;\r\n\t\tthis.name = data.name;\r\n\t}\r\n}","import * as jwt from 'jsonwebtoken';\r\nimport { action, computed, observable } from 'mobx';\r\nimport axios from '../lib/Axios';\r\nimport User from '../models/User';\r\nimport RootStore from './RootStore';\r\nimport TransportLayer from './TransportLayer';\r\n\r\nexport default class AuthStore {\r\n\tprivate rootStore: RootStore;\r\n\ttransportLayer: TransportLayer;\r\n\t@observable user: User | null = null;\r\n\t@observable private token: string = '';\r\n\tprivate tokenExpirationAt: number = 0;\r\n\tprivate tokenIssuedAt: number = 0;\r\n\tprivate refreshTimeout: NodeJS.Timeout | null = null;\r\n\r\n\t@computed get isAuthenticated() {\r\n\t\treturn this.token !== '' && this.user !== null;\r\n\t}\r\n\r\n\tconstructor(rootStore: RootStore, transportLayer: TransportLayer) {\r\n\t\tthis.rootStore = rootStore;\r\n\t\tthis.transportLayer = transportLayer;\r\n\t\tthis.loadFromLocalStorage();\r\n\t\tthis.addAxiosAuthenticationMiddleware();\r\n\t}\r\n\r\n\t@action register = async (name: string, email: string, password: string) => {\r\n\t\tawait this.transportLayer.signUp(name, email, password);\r\n\t}\r\n\r\n\t@action signIn = async (username: string, password: string) => {\r\n\t\ttry {\r\n\t\t\tlet data = await this.transportLayer.signIn(username, password);\r\n\t\t\tthis.updateFromToken(data.token);\r\n\t\t\tthis.updateLocalStorage();\r\n\t\t\treturn true;\r\n\t\t} catch (reason) {\r\n\t\t\tconsole.error('Authentication failed', reason);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t@action signOut = async () => {\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.token = '';\r\n\t\t\tthis.user = null;\r\n\t\t\tlocalStorage.clear();\r\n\r\n\t\t\tthis.rootStore.eventStore.clear();\r\n\t\t\tthis.rootStore.eventCapacityStore.clear();\r\n\t\t\tthis.rootStore.participationStore.clear();\r\n\t\t}, 500);\r\n\t}\r\n\r\n\tprivate updateLocalStorage = () => {\r\n\t\tif (this.token) {\r\n\t\t\tlocalStorage.setItem('auth.token', this.token);\r\n\t\t} else {\r\n\t\t\tlocalStorage.removeItem('auth.token');\r\n\t\t}\r\n\t}\r\n\r\n\tprivate scheduleTokenRefresh = () => {\r\n\t\tlet now = new Date().getTime();\r\n\t\tlet interval = (this.tokenExpirationAt * 1000) - now - (60 * 1000); // 1 minute before expiry\r\n\r\n\t\tthis.refreshTimeout = setTimeout(async () => {\r\n\t\t\ttry {\r\n\t\t\t\tlet data = await this.transportLayer.renewToken();\r\n\t\t\t\tthis.updateFromToken(data.token);\r\n\t\t\t\tthis.updateLocalStorage();\r\n\t\t\t} catch (err) {\r\n\t\t\t\tconsole.error(err);\r\n\t\t\t\tthis.signOut();\r\n\t\t\t}\r\n\t\t}, interval);\r\n\t}\r\n\r\n\t@action private updateFromToken = (token: string) => {\r\n\t\tlet decodedToken: any = jwt.decode(token, { complete: true });\r\n\t\tif (new Date().getTime() - (60 * 1000) > decodedToken.payload.exp * 1000) {\r\n\t\t\tthis.signOut();\r\n\t\t}\r\n\t\tlet user = new User();\r\n\t\tuser.updateFromServer(decodedToken.payload.data);\r\n\t\tthis.token = token;\r\n\t\tthis.tokenExpirationAt = decodedToken.payload.exp;\r\n\t\tthis.tokenIssuedAt = decodedToken.payload.iat;\r\n\t\tthis.user = user;\r\n\t\tthis.scheduleTokenRefresh();\r\n\t}\r\n\r\n\t@action private loadFromLocalStorage = () => {\r\n\t\tlet token = localStorage.getItem('auth.token') as string;\r\n\t\tif (token) {\r\n\t\t\tthis.updateFromToken(token);\r\n\t\t\tthis.token = token;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate addAxiosAuthenticationMiddleware = () => {\r\n\t\taxios.interceptors.request.use(config => {\r\n\t\t\tconfig.headers['authorization'] = `bearer ${this.token}`;\r\n\t\t\treturn config;\r\n\t\t});\r\n\t}\r\n}","import { action, computed, observable } from 'mobx';\r\n\r\n\r\nexport default class TimeBlock {\r\n\tid: string;\r\n\tstart: Date;\r\n\tend: Date;\r\n\t@observable maxNumberOfRegistrations: number = 0;\r\n\t@observable registrations: string[] = [];\r\n\r\n\t@computed get isOccupied() {\r\n\t\treturn this.registrations.length >= this.maxNumberOfRegistrations;\r\n\t}\r\n\r\n\t@computed get spotsAvailable() {\r\n\t\treturn this.maxNumberOfRegistrations - this.registrations.length;\r\n\t}\r\n\r\n\tconstructor(id: string, start: Date, end: Date, maxNumberOfRegistrations: number) {\r\n\t\tthis.id = id;\r\n\t\tthis.start = start;\r\n\t\tthis.end = end;\r\n\t\tthis.maxNumberOfRegistrations = maxNumberOfRegistrations;\r\n\t}\r\n\r\n\t@action register = (name: string) => {\r\n\t\tif (this.registrations.length < this.maxNumberOfRegistrations - 1) {\r\n\t\t\tthis.registrations.push(name);\r\n\t\t} else {\r\n\t\t\tthrow Error(\"Time block is full\");\r\n\t\t}\r\n\t}\r\n\r\n\t@action updateFromServer = (data: any) => {\r\n\t\tthis.start = new Date(data.start);\r\n\t\tthis.end = new Date(data.end);\r\n\t\tthis.maxNumberOfRegistrations = data.maxNumberOfRegistrations;\r\n\t\tthis.registrations.slice(0, this.registrations.length);\r\n\t\tdata.registrations.forEach((r: any) => this.registrations.push(r));\r\n\t}\r\n}","import { action, observable } from 'mobx';\r\nimport EventCapacityStore from \"../stores/EventCapacityStore\";\r\nimport TimeBlock from './TimeBlock';\r\n\r\nexport default class EventCapacity {\r\n\tstore: EventCapacityStore;\r\n\teventId: string;\r\n\t@observable timeBlocks: TimeBlock[] = [];\r\n\t@observable cancellations: string[] = [];\r\n\r\n\tconstructor(store: EventCapacityStore, eventId: string) {\r\n\t\tthis.store = store\r\n\t\tthis.eventId = eventId;\r\n\t}\r\n\r\n\t@action updateFromServer = (data: any) => {\r\n\t\tthis.eventId = data._id;\r\n\t\tdata.timeBlocks.slice(0, data.timeBlocks.length);\r\n\t\tdata.timeBlocks.forEach((tb: any) => {\r\n\t\t\tlet timeBlock = new TimeBlock(tb.id, tb.start, tb.end, tb.maxnumberOfRegistrations);\r\n\t\t\ttimeBlock.updateFromServer(tb);\r\n\t\t\tthis.timeBlocks.push(timeBlock);\r\n\t\t});\r\n\t\tif (data.cancellations) {\r\n\t\t\tdata.cancellations.forEach((c: any) => {\r\n\t\t\t\tthis.cancellations.push(c);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}","import { action, observable } from 'mobx';\r\nimport EventCapacity from '../models/EventCapacity';\r\nimport TransportLayer from './TransportLayer';\r\n\r\n\r\nexport default class EventCapacityStore {\r\n\ttransportLayer: TransportLayer;\r\n\t@observable eventCapacity: EventCapacity | undefined = undefined;\r\n\r\n\tconstructor(transportLayer: TransportLayer, initialData: any = {}) {\r\n\t\tthis.eventCapacity = initialData.event;\r\n\t\tthis.transportLayer = transportLayer;\r\n\t}\r\n\r\n\t@action clear = async () => {\r\n\t\tthis.eventCapacity = undefined;\r\n\t}\r\n\r\n\t@action loadEventCapacity = async (eventId: string) => {\r\n\t\tlet serverData = await this.transportLayer.fetchEventCapacity(eventId);\r\n\t\tthis.eventCapacity = new EventCapacity(this, eventId);\r\n\t\tthis.eventCapacity.updateFromServer(serverData);\r\n\t}\r\n}","import { action, observable } from 'mobx';\r\nimport Event from '../models/Event';\r\nimport EventDay from '../models/EventDay';\r\nimport TransportLayer from './TransportLayer';\r\nimport { DateTime } from 'luxon';\r\nimport _ from 'lodash';\r\n\r\n\r\nexport default class EventDayStore {\r\n\ttransportLayer: TransportLayer;\r\n\t@observable days: EventDay[] = [];\r\n\t@observable isLoading: boolean = false;;\r\n\tprivate event: Event | undefined;\r\n\r\n\tconstructor(transportLayer: TransportLayer, initialData: any = {}) {\r\n\t\tthis.transportLayer = transportLayer;\r\n\t\tif (initialData.eventDays) this.days = initialData.eventDays;\r\n\t}\r\n\r\n\t@action clear = async () => {\r\n\t\tthis.days = [];\r\n\t}\r\n\r\n\t@action createEventDay = (date: DateTime) => {\r\n\t\tlet d = new EventDay(this, this.event!.id!, date);\r\n\t\tthis.days.push(d);\r\n\t\tthis.event?.addDay(d);\r\n\t\tthis.sortDays();\r\n\t\treturn d;\r\n\t}\r\n\r\n\t@action sortDays = () => {\r\n\t\tthis.days = _.sortBy(this.days, d => d.date);\r\n\t}\r\n\r\n\t@action loadDays = async (event: Event) => {\r\n\t\tthis.isLoading = true;\r\n\t\tthis.clear();\r\n\t\tthis.event = event;\r\n\t\tthis.event.days = [];\r\n\t\tlet days = await this.transportLayer.fetchEventDays(event.id!);\r\n\t\tif (days) {\r\n\t\t\tdays.forEach((d: any) => {\r\n\t\t\t\tlet day = new EventDay(this, this.event!.id!, DateTime.fromISO(d.date));\r\n\t\t\t\tday.updateFromServer(d);\r\n\t\t\t\tthis.days.push(day);\r\n\t\t\t\tevent.addDay(day);\r\n\t\t\t});\r\n\t\t}\r\n\t\tthis.isLoading = false;\r\n\t}\r\n}","import _ from 'lodash';\r\nimport { DateTime } from 'luxon';\r\nimport { action, computed, observable } from \"mobx\";\r\nimport EventStore from '../stores/EventStore';\r\nimport EventDay from './EventDay';\r\nconst { v4: uuidv4 } = require('uuid');\r\n\r\nexport default class Event {\r\n\tprivate store: EventStore;\r\n\r\n\tconstructor(store: EventStore, id = uuidv4()) {\r\n\t\tthis.store = store;\r\n\t\tthis.id = id;\r\n\t}\r\n\r\n\t@observable id: string | undefined = undefined;\r\n\t@observable ownerUserId: string | undefined = undefined;\r\n\t@observable title: string | undefined = '';\r\n\t@observable description: string | undefined = '';\r\n\t@observable location: string = '';\r\n\t@observable organizerName: string = '';\r\n\t@observable organizerEmail: string = '';\r\n\t@observable minDayDate: DateTime | undefined;\r\n\t@observable maxDayDate: DateTime | undefined;\r\n\t@observable cancellations: EventCancellationRegistration[] = [];\r\n\t@observable days: EventDay[] = [];\r\n\r\n\t@computed get hasActiveDays() : boolean {\r\n\t\treturn this.days !== undefined && _.some(this.days, d => d.state === 'active');\r\n\t}\r\n\t@computed get hasInactiveDays() : boolean {\r\n\t\treturn this.days !== undefined && _.some(this.days, d => d.state === 'inactive');\r\n\t}\r\n\t@computed get cancellationCount(): number {\r\n\t\treturn this.cancellations.length;\r\n\t}\r\n\t@action setTitle = (title: string) => { this.title = title; }\r\n\t@action setLocation = (value: string) => { this.location = value; }\r\n\t@action setOrganizerEmail = (value: string) => { this.organizerEmail = value; }\r\n\t@action setOrganizerName = (value: string) => { this.organizerName = value; }\r\n\r\n\t@action updateFromServer = (data: any) => {\r\n\t\tthis.id = data._id;\r\n\t\tthis.title = data.title;\r\n\t\tthis.description = data.description;\r\n\t\tthis.location = data.location;\r\n\t\tthis.organizerEmail = data.organizerEmail;\r\n\t\tthis.organizerName = data.organizerName;\r\n\t\tthis.ownerUserId = data.ownerUserId;\r\n\t\tthis.minDayDate = DateTime.fromISO(data.minDayDate, { zone: data.timeZone });;\r\n\t\tthis.maxDayDate = DateTime.fromISO(data.maxDayDate, { zone: data.timeZone });;\r\n\t\tthis.cancellations = [];\r\n\r\n\t\tif (data.cancellations) {\r\n\t\t\tdata.cancellations.forEach((c:any) => {\r\n\t\t\t\tthis.cancellations.push(new EventCancellationRegistration(c.id, c.name));\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t@action addDay = (day: EventDay) => {\r\n\t\tthis.days.push(day);\r\n\t}\r\n\r\n\tsave = async () => {\r\n\t\tawait this.store.transportLayer.saveEvent(this);\r\n\t}\r\n\r\n\treload = async (options?: {eventDays: boolean, registrations: boolean}) => {\r\n\t\tawait Promise.all([\r\n\t\t\tthis.store.loadEvent(this.id!),\r\n\t\t\tnew Promise((resolve, reject) => { \r\n\t\t\t\tif (options !== undefined && options?.eventDays) {\r\n\t\t\t\t\tthis.store.rootStore.eventDayStore.loadDays(this).then(() => resolve());\r\n\t\t\t\t}\r\n\t\t\t\tresolve();\r\n\t\t\t}),\r\n\t\t\tnew Promise((resolve, reject) => { \r\n\t\t\t\tif (options !== undefined && options?.registrations) {\r\n\t\t\t\t\treturn this.store.rootStore.registrationStore.loadForEvent(this).then(() => resolve());\r\n\t\t\t\t}\r\n\t\t\t\tresolve();\r\n\t\t\t})\r\n\t\t]);\r\n\t}\r\n}\r\n\r\nclass EventCancellationRegistration {\r\n\t@observable id: string | undefined;\r\n\t@observable name: string | undefined;\r\n\r\n\tconstructor(participationId: string, name: string) {\r\n\t\tthis.id = participationId;\r\n\t\tthis.name = name;\r\n\t}\r\n}","import { action, computed, observable } from 'mobx';\r\nimport Event from '../models/Event';\r\nimport RootStore from './RootStore';\r\nimport TransportLayer from './TransportLayer';\r\n\r\nexport default class EventStore {\r\n\ttransportLayer: TransportLayer;\r\n\t@observable events: Event[] = [];\r\n\trootStore: RootStore;\r\n\r\n\t@computed get organizedEvents() {\r\n\t\tif (!this.rootStore.authStore.isAuthenticated) return [];\r\n\t\treturn this.events.filter(e => e.ownerUserId === this.rootStore.authStore.user!.id);\r\n\t}\r\n\r\n\tconstructor(rootStore: RootStore, transportLayer: TransportLayer) {\r\n\t\tthis.transportLayer = transportLayer;\r\n\t\tthis.rootStore = rootStore;\r\n\t}\r\n\r\n\t@action clear = async () => {\r\n\t\tthis.events = [];\r\n\t}\r\n\r\n\t@action createEvent = (): Event => {\r\n\t\tlet event = new Event(this);\r\n\t\tif (this.rootStore.authStore.isAuthenticated) {\r\n\t\t\tevent.ownerUserId = this.rootStore.authStore.user!.id;\r\n\t\t\tevent.setOrganizerEmail(this.rootStore.authStore.user!.username!);\r\n\t\t\tevent.setOrganizerName(this.rootStore.authStore.user!.name!);\r\n\t\t}\r\n\t\tthis.events.push(event);\r\n\t\treturn event;\r\n\t}\r\n\r\n\t/// Load event\r\n\t@action loadEvent = async (eventId: string) => {\r\n\t\tlet e = await this.transportLayer.fetchEvent(eventId);\r\n\t\tlet event = this.get(eventId);\r\n\t\tif (event) {\r\n\t\t\tevent.updateFromServer(e);\r\n\t\t} else {\r\n\t\t\t// create event and push to memcache.\r\n\t\t\tevent = new Event(this);\r\n\t\t\tevent.updateFromServer(e);\r\n\t\t\tthis.events.push(event);\r\n\t\t}\r\n\t\tthis.sort();\r\n\t}\r\n\r\n\t/// reload organized events for user.\r\n\t@action loadOrganizedEventsForUser = async (userId: string) => {\r\n\t\tlet retrievedEvents = await this.transportLayer.fetchOrganizedEventsForUser(userId);\r\n\t\tretrievedEvents.forEach((e: any, i: number) => {\r\n\t\t\tlet event = this.get(e._id);\r\n\t\t\tif (event) {\r\n\t\t\t\tevent.updateFromServer(e);\r\n\t\t\t} else {\r\n\t\t\t\tevent = new Event(this);\r\n\t\t\t\tevent.updateFromServer(e);\r\n\t\t\t\tthis.events.push(event);\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.sort();\r\n\t}\r\n\r\n\tget = (eventId: string): Event | undefined => {\r\n\t\treturn this.events.find(e => e.id === eventId);\r\n\t}\r\n\r\n\t@action private sort = () => {\r\n\t\tthis.events = this.events.slice().sort((a, b) => {\r\n\t\t\ta.title?.localeCompare(b.title ? b.title : '');\r\n\t\t\t// if (a.start === b.start) return 0;\r\n\t\t\t// if (a.start && b.start) {\r\n\t\t\t// \tif (a.start < b.start) return 1;\r\n\t\t\t// \tif (a.start > b.start) return -1;\r\n\t\t\t// }\r\n\t\t\t// if (!a.start && b.start) return 1;\r\n\t\t\t// if (a.start && !b.start) return -1;\r\n\r\n\t\t\treturn 0;\r\n\t\t})\r\n\t}\r\n}\r\n","import emailValidator from 'email-validator';\r\nimport { action, computed, observable } from \"mobx\";\r\nimport ParticipationStore from \"../stores/ParticipationStore\";\r\nconst { v4: uuidv4 } = require('uuid');\r\n\r\n\r\nexport default class Participation {\r\n\tstore: ParticipationStore;\r\n\r\n\t@observable id: string;\r\n\t@observable eventId: string = '';\r\n\t@observable eventDayId: string | undefined = undefined;\r\n\t@observable timeBlockId: string | undefined = undefined;\r\n\t@observable name: string = '';\r\n\t@observable email: string = '';\r\n\t@observable numberOfAdults: number | undefined = undefined;\r\n\t@observable numberOfChildren: number | undefined = undefined;\r\n\r\n\tconstructor(store: ParticipationStore, id: string = uuidv4()) {\r\n\t\tthis.store = store;\r\n\t\tthis.id = id;\r\n\t}\r\n\r\n\t@computed get emailValid(): boolean {\r\n\t\treturn emailValidator.validate(this.email);\r\n\t}\r\n\r\n\t@computed get nameValid(): boolean {\r\n\t\treturn this.name !== '';\r\n\t}\r\n\r\n\t@action setEmail = (value: string) => { this.email = value; }\r\n\t@action setName = (value: string) => { this.name = value; }\r\n\t@action setEventDay = (id: string | undefined) => { this.eventDayId = id; }\r\n\t@action setTimeBlock = (id: string | undefined) => { this.timeBlockId = id; }\r\n\t@action setNumberOfAdults = (value: number) => { this.numberOfAdults = value; }\r\n\t@action setNumberOfChildren = (value: number) => { this.numberOfChildren = value; }\r\n\r\n\t@action updateFromServer = (data: any) => {\r\n\t\tthis.id = data._id;\r\n\t\tthis.eventId = data.eventId;\r\n\t\tthis.timeBlockId = data.timeBlockId;\r\n\t\tthis.name = data.name;\r\n\t\tthis.email = data.email;\r\n\t\tthis.numberOfAdults = data.numberOfAdults;\r\n\t\tthis.numberOfChildren = data.numberOfChildren;\r\n\t}\r\n\r\n\tsave = async () => {\r\n\t\tawait this.store.transportLayer.saveRegistration(this);\r\n\t}\r\n}\r\n","import { action, observable } from 'mobx';\r\nimport Participation from '../models/Participation';\r\nimport TransportLayer from './TransportLayer';\r\n\r\nexport default class ParticipationStore {\r\n\ttransportLayer: TransportLayer;\r\n\t@observable participations: Participation[] = [];\r\n\r\n\tconstructor(transportLayer: TransportLayer) {\r\n\t\tthis.transportLayer = transportLayer;\r\n\t}\r\n\r\n\t@action clear = () => {\r\n\t\tthis.participations = [];\r\n\t}\r\n\r\n\t@action create = (eventId: string): Participation => {\r\n\t\tlet p = new Participation(this);\r\n\t\tp.eventId = eventId;\r\n\t\tthis.participations.push(p);\r\n\t\treturn p;\r\n\t}\r\n}","import { action, computed, observable } from 'mobx';\r\nimport * as _ from 'lodash';\r\nimport { DateTime } from 'luxon';\r\nimport PublicStore from '../stores/PublicStore';\r\nimport PublicTimeBlockV2 from './PublicTimeBlockV2';\r\n\r\n/**\r\n * Downgraded public version of EventDay.\r\n */\r\nexport default class PublicEventDay {\r\n\t@observable id: string = '';\r\n\t@observable eventId: string = '';\r\n\t@observable date: DateTime = DateTime.invalid(' ');\r\n\t@observable timeZone: string = 'Europe/Amsterdam';\r\n\t@observable timeBlocks: PublicTimeBlockV2[] = [];\r\n\t@observable state: 'active'|'inactive' = 'inactive';\r\n\r\n\t@computed get isOccupied(): boolean {\r\n\t\treturn _.sumBy(this.timeBlocks, tb => tb.slotsAvailable) === 0;\r\n\t}\r\n\r\n\t@computed get slotCount(): number {\r\n\t\treturn _.sumBy(this.timeBlocks, tb => tb.maxNumberOfRegistrations);\r\n\t}\r\n\r\n\t@computed get registrationCount() : number {\r\n\t\treturn _.sumBy(this.timeBlocks, tb => tb.registrations.length);\r\n\t}\r\n\r\n\t@computed get slotsAvailable() : number {\r\n\t\treturn _.sumBy(this.timeBlocks, tb => tb.slotsAvailable);\r\n\t}\r\n\r\n\t@action updateFromServer = (data: any) => {\r\n\t\tthis.id = data._id;\r\n\t\tthis.date = DateTime.fromISO(data.date, { zone: data.timeZone });\r\n\t\tthis.timeZone = data.timeZone;\r\n\t\tthis.eventId = data.eventId;\r\n\t\tthis.state = data.state;\r\n\t\tdata.timeBlocks.forEach((d:any) => {\r\n\t\t\tlet tb = new PublicTimeBlockV2(this);\r\n\t\t\ttb.updateFromServer(d);\r\n\t\t\tthis.timeBlocks.push(tb); \r\n\t\t});\r\n\t}\r\n}","import _ from 'lodash';\r\nimport { action, observable } from \"mobx\";\r\nimport PublicStore from '../stores/PublicStore';\r\nimport PublicEventDay from './PublicEventDay';\r\n\r\nexport default class PublicEvent {\r\n\tprivate store: PublicStore;\r\n\r\n\tconstructor(store: PublicStore) {\r\n\t\tthis.store = store;\r\n\t}\r\n\r\n\t@observable id: string | undefined = undefined;\r\n\t@observable title: string | undefined = '';\r\n\t@observable description: string | undefined = '';\r\n\t@observable location: string = '';\r\n\t@observable organizerName: string = '';\r\n\t@observable days: PublicEventDay[] = [];\r\n\r\n\t@action updateFromServer = (data: any) => {\r\n\t\tthis.id = data._id;\r\n\t\tthis.title = data.title;\r\n\t\tthis.description = data.description;\r\n\t\tthis.location = data.location;\r\n\t\tthis.organizerName = data.organizerName;\r\n\r\n\t\tif (data.days) {\r\n\t\t\tdata.days.forEach((d: any) => {\r\n\t\t\t\tlet day = new PublicEventDay();\r\n\t\t\t\tday.updateFromServer(d);\r\n\t\t\t\tthis.days.push(day);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\treload = async () => {\r\n\t\tif (this.id)\r\n\t\t\tawait this.store.loadEvent(this.id);\r\n\t}\r\n}","import { action, observable } from 'mobx';\r\nimport TransportLayer from './TransportLayer';\r\nimport PublicEvent from '../models/PublicEvent';\r\nimport PublicEventDay from '../models/PublicEventDay';\r\nimport PublicTimeBlockV2 from '../models/PublicTimeBlockV2';\r\n\r\nexport default class PublicStore {\r\n\ttransportLayer: TransportLayer;\r\n\t@observable isLoading: boolean = false;\r\n\t@observable event: PublicEvent | undefined;\r\n\t@observable selectedTimeBlock: PublicTimeBlockV2 | undefined;\r\n\r\n\tconstructor(transportLayer: TransportLayer) {\r\n\t\tthis.transportLayer = transportLayer;\r\n\t}\r\n\r\n\t@action loadEvent = async (eventId: string) => {\r\n\t\tthis.isLoading = true;\r\n\t\tthis.event = undefined;\r\n\t\t\r\n\t\tlet fe = await this.transportLayer.fetchPublicEvent(eventId)\r\n\t\tlet event = new PublicEvent(this);\r\n\t\tevent.updateFromServer(fe);\r\n\t\tthis.event = event;\r\n\t\t\t\t\r\n\t\tthis.isLoading = false;\r\n\t}\r\n\r\n\t@action selectTimeBlock = (tb: PublicTimeBlockV2 | undefined ) => {\r\n\t\tthis.selectedTimeBlock = tb;\r\n\t}\r\n}","import * as qs from 'qs';\r\nimport axios from '../lib/Axios';\r\nimport { TimeBlockOccupiedError, UserWithSameEmailAlreadyExistsError } from '../lib/Errors';\r\nimport Event from '../models/Event';\r\nimport EventDay from '../models/EventDay';\r\nimport Participation from '../models/Participation';\r\n\r\nexport default class TransportLayer {\r\n\t// AUTH\r\n\tsignIn = async (username: string, password: string) => {\r\n\t\ttry {\r\n\t\t\tlet res = await axios({\r\n\t\t\t\tmethod: 'post',\r\n\t\t\t\turl: `/auth.signin`,\r\n\t\t\t\tdata: qs.stringify({\r\n\t\t\t\t\tusername: username,\r\n\t\t\t\t\tpassword: password\r\n\t\t\t\t}),\r\n\t\t\t\theaders: {\r\n\t\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn res.data;\r\n\t\t} catch (err) {\r\n\t\t\tconsole.error(\"err\", err.response.data.errorCode);\r\n\t\t\tthrow err;\r\n\t\t}\r\n\t}\r\n\r\n\trenewToken = async () => {\r\n\t\ttry {\r\n\t\t\tlet res = await axios({\r\n\t\t\t\tmethod: 'post',\r\n\t\t\t\turl: '/auth.renewtoken'\r\n\t\t\t});\r\n\t\t\treturn res.data;\r\n\t\t} catch (err) {\r\n\t\t\tconsole.error(\"err\", err.response.data.errorCode);\r\n\t\t\tthrow err;\r\n\t\t}\r\n\t}\r\n\r\n\tsignUp = async (name: string, email: string, password: string) => {\r\n\t\ttry {\r\n\t\t\tawait axios({\r\n\t\t\t\tmethod: 'post',\r\n\t\t\t\turl: '/auth.register',\r\n\t\t\t\tdata: qs.stringify({\r\n\t\t\t\t\tname: name,\r\n\t\t\t\t\temail: email,\r\n\t\t\t\t\tpassword: password\r\n\t\t\t\t})\r\n\t\t\t});\r\n\t\t} catch (err) {\r\n\t\t\tconsole.error(\"err\", err.response.data.errorCode);\r\n\t\t\tif (err.response.data.errorCode === '10001') throw new UserWithSameEmailAlreadyExistsError();\t\t\t\r\n\t\t\tthrow err;\r\n\t\t}\r\n\t}\r\n\r\n\trequestPasswordReset = async (email: string) => {\r\n\t\ttry {\r\n\t\t\tawait axios({\r\n\t\t\t\tmethod: 'post',\r\n\t\t\t\turl: '/password-resets',\r\n\t\t\t\tdata: qs.stringify({\r\n\t\t\t\t\temail: email\r\n\t\t\t\t})\r\n\t\t\t});\r\n\t\t} catch (err) {\r\n\t\t\tconsole.error(\"err\", err.response.data.errorCode);\r\n\t\t\tthrow err;\r\n\t\t}\r\n\t}\r\n\r\n\tgetPasswordReset = async (id: string) => {\r\n\t\ttry {\r\n\t\t\tlet res = await axios.get(`/password-resets/${id}`);\r\n\t\t\treturn {\r\n\t\t\t\tid: id,\r\n\t\t\t\texpired: res.data ? res.data.expired : true\r\n\t\t\t}\r\n\t\t} catch (err) {\r\n\t\t\tconsole.error(err);\r\n\t\t\tthrow err;\r\n\t\t}\r\n\t}\r\n\r\n\tresetPassword = async (id: string, password: string) => {\r\n\t\ttry {\r\n\t\t\tlet res = await axios.patch(`password-resets/${id}`, { password: password });\r\n\t\t\treturn res.status === 204;\r\n\t\t} catch (err) {\r\n\t\t\tconsole.error(err);\r\n\t\t\tthrow err;\r\n\t\t}\r\n\t}\r\n\r\n\tgetSignInMethod = async (username: string) => {\r\n\t\ttry {\r\n\t\t\tlet res = await axios.get(`/signinmethods?username=${username}`);\r\n\t\t\treturn res.data.method as string;\r\n\t\t} catch (err) {\r\n\t\t\tconsole.error(err);\r\n\t\t\tthrow err;\r\n\t\t}\r\n\t}\r\n\r\n\t// EVENT\r\n\tfetchOrganizedEventsForUser = async (userId: string) => {\r\n\t\tlet res = await axios.get(`users/${userId}/organized-events`);\r\n\t\treturn res.data;\r\n\t}\r\n\r\n\tfetchEvent = async (eventId: string) => {\r\n\t\tlet res = await axios.get(`/events/${eventId}`);\r\n\t\treturn res.data;\r\n\t}\r\n\r\n\tsaveEvent = async (event: Event) => {\r\n\t\t//let formattedDate = parseFromTimeZone(dateUtils.format(event.start!, 'yyyy-MM-dd HH:mm'), { timeZone: event.timeZone })\r\n\t\tlet body = {\r\n\t\t\t_id: event.id,\r\n\t\t\ttitle: event.title,\r\n\t\t\tdescription: event.description,\r\n\t\t\ttimeZone: 'Europe/Amsterdam',\r\n\t\t\t//date: dateUtils.format(event.date!, 'yyyy-MM-dd'),\r\n\t\t\t//start: dateUtils.format(event.start!, 'yyyy-MM-dd HH:mm xxx'),\r\n\t\t\t//end: dateUtils.format(event.end!, 'yyyy-MM-dd HH:mm xxx'),\r\n\t\t\tlocation: event.location,\r\n\t\t\t//numberOfGroupsSimultane: event.numberOfGroupsSimultane,\r\n\t\t\t//numberOfGroupsInvited: event.numberOfGroupsInvited,\r\n\t\t\t//numberOfAdultsPerGroup: event.numberOfAdultsPerGroup,\r\n\t\t\t//numberOfChildrenPerGroup: event.numberOfChildrenPerGroup,\r\n\t\t\torganizerEmail: event.organizerEmail,\r\n\t\t\torganizerName: event.organizerName,\r\n\t\t};\r\n\t\tawait axios.post('/events', body);\r\n\t}\r\n\r\n\t/// EVENT DAY\r\n\tfetchEventDays = async (eventId: string) => {\r\n\t\tlet res = await axios.get(`/events/${eventId}/days`);\r\n\t\treturn res.data;\r\n\t}\r\n\r\n\tsaveEventDay = async (eventDay: EventDay) => {\r\n\t\tlet body = {\r\n\t\t\t_id: eventDay.id,\r\n\t\t\teventId: eventDay.eventId,\r\n\t\t\tdate: eventDay.date,\r\n\t\t\ttimeZone: eventDay.timeZone,\r\n\t\t\tstate: eventDay.state,\r\n\t\t\tconfiguration: eventDay.configuration,\r\n\t\t\ttimeBlocks: eventDay.timeBlocks\r\n\t\t};\r\n\t\tif (eventDay.isNew)\r\n\t\t\tawait axios.post(`/events/${eventDay.eventId}/days`, body);\r\n\t\telse \r\n\t\t\tawait axios.put(`/events/${eventDay.eventId}/days/${eventDay.id}`, body);\r\n\t}\r\n\r\n\tfetchEventCapacity = async (eventId: string) => {\r\n\t\tlet res = await axios.get(`/events/${eventId}/capacity`);\r\n\t\treturn res.data;\r\n\t}\r\n\r\n\tactivateEventDay = async (eventId: string, eventDayId: string) => {\r\n\t\tawait axios.post(`/events/${eventId}/days/${eventDayId}/.activate`)\r\n\t}\r\n\r\n\t// REGISTRATIONS \r\n\tfetchRegistrations = async (eventId: string) => {\r\n\t\tlet res = await axios.get(`/events/${eventId}/registrations`);\r\n\t\treturn res.data;\r\n\t}\r\n\r\n\t// PUBLIC - EVENT\r\n\tfetchPublicEvent = async (eventId: string) => {\r\n\t\tlet res = await axios.get(`/public/events/${eventId}`);\r\n\t\treturn res.data;\r\n\t}\r\n\r\n\t// PUBLIC - REGISTRATION\r\n\tsaveRegistration = async (participation: Participation) => {\r\n\t\tlet body = {\r\n\t\t\t_id: participation.id,\r\n\t\t\teventId: participation.eventId,\r\n\t\t\teventDayId: participation.eventDayId,\r\n\t\t\tname: participation.name,\r\n\t\t\temail: participation.email,\r\n\t\t\ttimeBlockId: participation.timeBlockId,\r\n\t\t\tnumberOfAdults: participation.numberOfAdults,\r\n\t\t\tnumberOfChildren: participation.numberOfChildren\r\n\t\t};\r\n\r\n\t\ttry {\r\n\t\t\tawait axios.post(`/public/registrations`, body);\r\n\t\t} catch (err) {\r\n\t\t\tif (err.response.data.errorCode === 40001) {\r\n\t\t\t\tthrow new TimeBlockOccupiedError();\r\n\t\t\t}\r\n\t\t\tconsole.log(\"err\", err.response.data.errorCode);\r\n\t\t}\r\n\t}\r\n}","import _ from 'lodash';\r\nimport { action, observable } from \"mobx\";\r\nimport { RegistrationStore } from '../stores/RegistrationStore';\r\nconst { v4: uuidv4 } = require('uuid');\r\n\r\nexport class Registration {\r\n\tprivate store: RegistrationStore;\r\n\r\n\tconstructor(store: RegistrationStore, id = uuidv4()) {\r\n\t\tthis.store = store;\r\n\t\tthis.id = id;\r\n\t}\r\n\r\n\t@observable id: string;\r\n\t@observable eventId: string | undefined;\r\n\t@observable eventDayId: string | undefined;\r\n\t@observable timeBlockId: string | undefined;\r\n\t@observable name: string | undefined;\r\n\t@observable email: string | undefined;\r\n\t@observable numberOfAdults: number | undefined;\r\n\t@observable numberOfChildren: number | undefined;\r\n\r\n\t@action updateFromServer = (data: any) => {\r\n\t\tthis.id = data._id;\r\n\t\tthis.eventId = data.eventId;\r\n\t\tthis.eventDayId = data.eventDayId;\r\n\t\tthis.timeBlockId = data.timeBlockId;\r\n\t\tthis.name = data.name;\r\n\t\tthis.email = data.email;\r\n\t\tthis.numberOfAdults = data.numberOfAdults;\r\n\t\tthis.numberOfChildren = data.numberOfChildren;\r\n\t}\r\n}\r\n","import _, { Dictionary } from 'lodash';\r\nimport { action, computed, observable } from 'mobx';\r\nimport Event from '../models/Event';\r\nimport { Registration } from '../models/Registration';\r\nimport RootStore from './RootStore';\r\nimport TransportLayer from './TransportLayer';\r\n\r\nexport class RegistrationStore {\r\n\ttransportLayer: TransportLayer;\r\n\t@observable registrations: Registration[] = [];\r\n\trootStore: RootStore;\r\n\r\n\tconstructor(rootStore: RootStore, transportLayer: TransportLayer) {\r\n\t\tthis.transportLayer = transportLayer;\r\n\t\tthis.rootStore = rootStore;\r\n\t}\r\n\r\n\t@computed get registrationsByEventDay() : Dictionary {\r\n\t\treturn _.groupBy(this.registrations, 'eventDayId');\r\n\t}\r\n\r\n\t@computed get registrationsByTimeBlock() : Dictionary {\r\n\t\treturn _.groupBy(this.registrations, 'timeBlockId');\r\n\t}\r\n\r\n\t@action loadForEvent = async (event: Event) => {\r\n\t\tthis.registrations = [];\r\n\t\tlet regs = await this.transportLayer.fetchRegistrations(event.id!);\r\n if (regs) {\r\n regs.forEach((data: any) => {\r\n let reg = new Registration(this);\r\n reg.updateFromServer(data);\r\n this.registrations.push(reg);\r\n });\r\n }\r\n\t}\r\n}\r\n","import DateFnsUtils from '@date-io/date-fns';\r\nimport { MuiPickersUtilsProvider } from '@material-ui/pickers';\r\nimport nlLocale from \"date-fns/locale/nl\";\r\nimport { createBrowserHistory } from 'history';\r\nimport { Provider } from 'mobx-react';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Route, Router } from 'react-router-dom';\r\nimport { App } from './App';\r\nimport GlobalCss from './GlobalCss';\r\nimport './index.css';\r\nimport { syncHistoryWithStore } from './lib/SyncHistoryWithStore';\r\nimport * as serviceWorker from './serviceWorker';\r\nimport RootStore from './stores/RootStore';\r\nimport RouterStore from './stores/RouterStore';\r\n\r\nconst routerStore = new RouterStore();\r\nconst rootStore = new RootStore(routerStore);\r\n\r\nconst browserHistory = createBrowserHistory();\r\nconst history = syncHistoryWithStore(browserHistory, routerStore);\r\n\r\nconst stores = {\r\n\trootStore,\r\n\trouterStore\r\n}\r\n\r\nReactDOM.render(\r\n\t<>\r\n\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t<>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t,\r\n\tdocument.getElementById('root')\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n","import { History } from 'history';\r\nimport { action, observable } from 'mobx';\r\n\r\nexport default class RouterStore {\r\n\tprivate history: History | undefined;\r\n\t@observable location: Location | undefined;\r\n\r\n\tsetHistory = (history: History) => {\r\n\t\t//console.log('router.setHistory', history);\r\n\t\tthis.history = history;\r\n\t}\r\n\r\n\t@action updateLocation = (location: Location) => {\r\n\t\t//console.log('router.updateLocation', location, this.history)\r\n\t\tthis.location = location;\r\n\t\tif (window) window.scrollTo(0, 0);\r\n\t}\r\n\r\n\tto = (location: string) => {\r\n\t\treturn this.replaceVariables(location);\r\n\t}\r\n\r\n\tpush = (location: string) => {\r\n\t\tthis.history!.push(this.replaceVariables(location), null);\r\n\t}\r\n\r\n\treplace = (location: string) => {\r\n\t\tthis.history!.replace(location);\r\n\t}\r\n\r\n\tgo = (n: number) => {\r\n\t\tthis.history!.go(n);\r\n\t}\r\n\r\n\tgoBack = () => {\r\n\t\tthis.history!.goBack();\r\n\t}\r\n\r\n\tgoForward = () => {\r\n\t\tthis.history!.goForward();\r\n\t}\r\n\r\n\tsearch = (q: string) => {\r\n\t\tthis.history!.replace({ search: q })\r\n\t}\r\n\r\n\tprivate replaceVariables = (location: string) => {\r\n\t\treturn location;\r\n\t}\r\n\r\n\tprivate scrollToTop() {\r\n\t\tif (window) window.scrollTo(0, 0);\r\n\t}\r\n}\r\n\r\n\r\n","import AuthStore from \"./AuthStore\";\r\nimport EventCapacityStore from \"./EventCapacityStore\";\r\nimport EventDayStore from \"./EventDayStore\";\r\nimport EventStore from \"./EventStore\";\r\nimport ParticipationStore from \"./ParticipationStore\";\r\nimport PublicStore from \"./PublicStore\";\r\nimport RouterStore from \"./RouterStore\";\r\nimport TransportLayer from \"./TransportLayer\";\r\nimport { RegistrationStore } from './RegistrationStore';\r\n\r\nexport default class RootStore {\r\n\tauthStore: AuthStore;\r\n\trouterStore: RouterStore;\r\n\teventStore: EventStore;\r\n\teventDayStore: EventDayStore;\r\n\tregistrationStore: RegistrationStore;\r\n\teventCapacityStore: EventCapacityStore;\r\n\tparticipationStore: ParticipationStore;\r\n\tpublicStore: PublicStore;\r\n\r\n\r\n\tconstructor(routerStore: RouterStore) {\r\n\t\tconst transportLayer = new TransportLayer();\r\n\r\n\t\tthis.routerStore = routerStore;\r\n\t\tthis.authStore = new AuthStore(this, transportLayer);\r\n\t\tthis.eventStore = new EventStore(this, transportLayer);\r\n\t\tthis.eventDayStore = new EventDayStore(transportLayer);\r\n\t\tthis.registrationStore = new RegistrationStore(this, transportLayer);\r\n\t\tthis.eventCapacityStore = new EventCapacityStore(transportLayer);\t\t\r\n\t\tthis.participationStore = new ParticipationStore(transportLayer);\r\n\t\tthis.publicStore = new PublicStore(transportLayer);\r\n\t}\r\n}","import { observe } from \"mobx\";\r\n\r\n\r\nexport const syncHistoryWithStore = (history, store) => {\r\n\r\n\tstore.setHistory(history);\r\n\r\n\tconst handleLocationChange = (location) => {\r\n\t\tstore.updateLocation(location);\r\n\t};\r\n\r\n\tconst unsubscribeFromHistory = history.listen(handleLocationChange);\r\n\thandleLocationChange(history.location);\r\n\r\n\tconst subscribe = (listener) => {\r\n\t\tconst onStoreChange = () => {\r\n\t\t\tconst rawLocation = { ...store.location };\r\n\t\t\tlistener(rawLocation, history.action);\r\n\t\t};\r\n\r\n\t\t// Listen for changes to location state in store\r\n\t\tconst unsubscribeFromStore = observe(store, 'location', onStoreChange);\r\n\r\n\t\tlistener(store.location, history.action);\r\n\r\n\t\treturn unsubscribeFromStore;\r\n\t};\r\n\r\n\thistory.subscribe = subscribe;\r\n\thistory.unsubscribe = unsubscribeFromHistory;\r\n\r\n\treturn history;\r\n}"],"sourceRoot":""}