{"version":3,"sources":["serviceWorkerRegistration.ts","containers/Manager/NoPermission.tsx","containers/ProtectedRoute.tsx","ui/Checkbox/Checkbox.tsx","ui/Radio/Radio.tsx","ui/Switch/Switch.tsx","ui/Button/Button.tsx","ui/File/File.tsx","utils/hexToRGB.ts","ui/Heading/Heading.tsx","ui/Modal/Modal.tsx","ui/Reel/Reel.tsx","ui/Content/Content.tsx","ui/Fab/Fab.tsx","ui/Label/Label.tsx","ui/Form/Form.tsx","ui/Input/Input.tsx","ui/Badge/Badge.tsx","ui/GlobalStyle.ts","utils/animation.ts","ui/Drawer/Drawer.tsx","utils/useClickAway.ts","ui/Popover/Popover.tsx","ui/Tooltip/Tooltip.tsx","ui/List/List.tsx","ui/Card/Card.tsx","ui/Seperator/Seperator.tsx","ui/Pill/Pill.tsx","ui/ValueLabel/ValueLabel.tsx","utils/getColorFromString.ts","ui/Avatar/Avatar.tsx","ui/Selector/Selector.tsx","ui/OvalButton/OvalButton.tsx","ui/Container/Container.tsx","ui/Steps/Steps.tsx","ui/ProgressRing/ProgressRing.tsx","utils/calendar.ts","utils/numberFormatter.ts","containers/Calendar/Month.tsx","components/AvatarGroup.tsx","components/ReservationCard/ReservationCard.tsx","containers/Calendar/Offices.tsx","state/users/thunks.ts","state/users/index.ts","state/plannings/cache.ts","enums.ts","state/reservations/thunks.ts","state/reservations/index.ts","state/plannings/thunks.ts","state/plannings/index.ts","components/ChipsSelector.tsx","containers/Calendar/LocationsFilter.tsx","containers/Calendar/MonthNavigator.tsx","state/layout/actions.ts","state/layout/index.ts","utils/getNextWorkableDay.ts","containers/Calendar/index.tsx","utils/useWindowSize.ts","ui/themes.ts","components/AppearanceSelector/AppearanceSelector.tsx","containers/Settings.tsx","state/locations/thunks.ts","state/locations/index.ts","state/offices/thunks.ts","state/offices/index.ts","components/EmptyState.tsx","containers/Manager/OfficeForm.tsx","components/EditRemoveMenu.tsx","containers/Manager/LocationRow.tsx","containers/Manager/LocationCard.tsx","containers/Manager/LocationForm.tsx","containers/Manager/Locations.tsx","containers/Plannings/PullToRefresh.tsx","utils/isInStandaloneMode.ts","components/EmptyPlanning.tsx","containers/Reservations/YearNavigator.tsx","containers/Reservations/index.tsx","utils/useInfiniteScroll.ts","containers/Plannings/PlanningList.tsx","utils/usePrevious.ts","containers/Plannings/OfficesFilter.tsx","ui/ScrollView/ScrollView.tsx","ui/Filter/FilterPopover.tsx","ui/Filter/Filter.tsx","containers/Plannings/UserFilter.tsx","containers/Plannings/PlanningFilters.tsx","containers/Plannings/index.tsx","state/companies/thunks.ts","state/companies/index.ts","containers/CompanySettings/EditForm.tsx","containers/CompanySettings/index.tsx","containers/UserSettings.tsx","containers/Intro.tsx","containers/Onboarding.tsx","components/ReservationCreditInfo.tsx","components/ReservationInfo.tsx","components/DateInputField/DateInputField.tsx","ui/SimpleLink.tsx","components/CreateReservationForm/CreateReservationForm.tsx","components/ValueLabelWithRing.tsx","components/ReservationOverview.tsx","components/AttendeesList.tsx","components/GuestInput/GuestInput.tsx","state/planningPopup/thunks.ts","components/GuestInput/GuestSuggestions.tsx","components/GuestInput/GuestTab.tsx","components/DatePopup.tsx","utils/useCalendarAvailability.tsx","components/Logo.tsx","components/NavigationBar.tsx","ui/Chip/Chip.tsx","components/ReleaseNote/ReleaseNote.tsx","releaseNotes.ts","components/Help.tsx","components/CustomScrollBar/TimeLineScrollBar.tsx","components/CustomScrollBar/CustomScrollBar.tsx","containers/Layout.tsx","containers/App.tsx","state/authentication/index.ts","state/planningPopup/index.ts","state/users/allUsersReducer.ts","state/planningFilters/index.ts","state/preferences/index.ts","state/rootReducer.ts","state/store.ts","utils/userProvider.tsx","utils/authProvider.tsx","state/authentication/thunks.ts","components/Error.tsx","utils/appInsights.tsx","components/PricingPlan.tsx","components/TenantCreator.tsx","state/tenants/thunks.ts","containers/Welcome.tsx","components/CustomThemeProvider.tsx","components/PwaInstallProvider/AndroidInstallProvider.tsx","ui/IosNativeDrawer/IosNativeDrawer.tsx","components/IosNativeComponents/IosNativeDrawerHeader.tsx","components/IosNativeComponents/IosNativeDrawerContent.tsx","components/IosNativeComponents/IosNativeDrawerSeparator.tsx","components/IosNativeComponents/IosNativeDrawerStep.tsx","components/PwaInstallProvider/IosInstallProvider.tsx","components/PwaInstallProvider/PwaInstallProvider.tsx","index.tsx"],"names":["isLocalhost","Boolean","window","location","hostname","match","registerValidSW","swUrl","config","navigator","serviceWorker","register","then","registration","onupdatefound","installingWorker","installing","onstatechange","state","controller","console","log","onUpdate","onSuccess","catch","error","Container","styled","div","_templateObject","NoPermission","_jsxs","children","className","version","x","y","viewBox","_jsx","fill","d","ProtectedRoute","_ref","_user$user","path","rest","_objectWithoutProperties","isAdmin","useSelector","user","roles","includes","Route","_objectSpread","render","label","props","theme","colors","border","primary","Styled","inputBorder","Radio","type","faded","cardBackground","Switch","Base","button","Primary","_templateObject2","onPrimary","primaryDarker","isLoading","css","_templateObject3","disabled","disabledText","Minimal","_templateObject4","background","Destructive","_templateObject5","Button","IconButton","_templateObject6","_templateObject7","_templateObject8","Actions","img","hexToRgb","hex","r","parseInt","slice","g","b","concat","Heading","_ref$type","position","onCardBackground","fonts","body","heading","FocusTrap","require","Small","CloseButton","portalRoot","document","getElementById","Modal","isOpen","_ref$isCancellable","isCancellable","_ref$onCancel","onCancel","title","renderHeader","modalRef","React","createRef","useEffect","current","disableBodyScroll","enableBodyScroll","ReactDOM","createPortal","CSSTransition","addEndListener","unmountOnExit","in","timeout","ref","tabIndex","focusTrapOptions","onDeactivate","onClick","undefined","Close","Reel","Label","size","Form","form","isDisabled","Field","Default","FieldLabel","attrs","light","white","FieldHint","FieldError","as","FormField","errorMessage","hint","style","_ref$light","Input","input","inputBackground","Select","select","span","onLabel","GlobalStyle","createGlobalStyle","reset","success","clamp","min","max","val","Math","rubberBand","distance","dimension","constant","arguments","length","rubberBandIfOutOfBounds","delta","projection","initialVelocity","findNearestNumberInArray","n","arr","reduce","a","abs","HandleBar","Wrapper","Underlay","Inner","ChildrenWrapper","DrawerHeader","Title","to","spring1","tension","friction","spring2","Drawer","stops","useMemo","innerHeight","drawerRef","useRef","_useSpring","useSpring","_useSpring2","_slicedToArray","setY","_useSpring3","scrollY","onFrame","scrollTop","_useSpring4","setScrollY","immediate","bind","useDrag","_ref2","velocityY","vxvy","deltaY","_ref2$movement","movement","movementX","movementY","last","memo","event","getValue","isScrollable","scrollHeight","clientHeight","maxScrollTop","projectedEndpoint","projectedScrollEndpoint","point","newY","pointerEvents","animated","opacity","interpolate","range","output","transform","useClickAway","handler","callback","el","contains","target","addEventListener","removeEventListener","Popper","placement","Popover","content","_ref$openOnHover","openOnHover","_ref$closeOnMouseLeav","closeOnMouseLeave","_ref$placement","_ref$strategy","strategy","_ref$offset","offset","referenceElement","popperElement","_React$useState","useState","_React$useState2","setIsOpen","_usePopper","usePopper","modifiers","name","options","styles","attributes","onMouseLeave","cloneElement","onMouseEnter","open","popper","Tooltip","Children","only","innerWidth","renderTarget","zIndex","ol","ul","li","Card","ElevatedCard","Seperator","direction","margin","ValueLabel","value","defaultColors","getColorFromString","hash","i","charCodeAt","highlighted","additional","colorModifier","Avatar","_ref$size","_ref$highlighted","image","_ref$additional","data-testid","backgroundColor","src","alt","initials","replace","toggled","OvalButton","muted","StyledSteps","Steps","amount","_ref$className","handleOnClick","step","Array","from","map","_","getStokeColor","progress","warning","ProgressRing","radius","stroke","normalizedRadius","circumference","PI","strokeDashoffset","useTheme","height","width","washed","strokeWidth","cx","cy","strokeLinecap","strokeDasharray","isWeekend","date","day","formatNumber","locale","Intl","NumberFormat","format","OuterWrapper","MonthWrapper","renderWeekend","MonthCell","borderRadiusBottomLeft","borderRadiusBottomRight","isFull","isHighlighted","MonthCellOccupationIndicator","_templateObject9","MonthCellDate","_templateObject10","isToday","_templateObject11","MonthCellSmall","_templateObject12","Month","month","year","selectDate","offices","indexedPlannings","rows","generateWeekends","firstDayOfMonth","moment","startDay","clone","startOf","endDay","endOf","_loop","days","forEach","push","add","filter","anyInCurrentMonth","isBefore","generateRowsForMonthView","hasOffices","renderCell","rowIndex","key","Object","keys","find","p","isSame","dayParts","slotsFilled","signedInUsers","slots","seats","hasCurrentUser","_toConsumableArray","findIndex","u","uuid","handleSelectDate","toString","_Fragment","index","row","Fragment","Additional","AvatarGroup","avatars","maxLength","display","avatar","whiteSpace","DefaultAvatarGroup","CardPlanning","CardRing","ReservationListItem","ReservationCard","subtitle","users","_props$highlighted","planningTitle","_props$holidays","holidays","_props$asListItem","asListItem","card","aria-haspopup","aria-label","holiday","Today","OfficesList","Offices","selectedDate","selectOffice","office","officeUuid","uniqBy","hasCurrentUserPerDayPart","_defineProperty","dayPart","0","1","fetchUser","_asyncToGenerator","_regeneratorRuntime","mark","_callee","dispatch","getState","response","wrap","_context","prev","next","axios","get","e","Promise","reject","sent","credits","data","maxCredits","preferredLocation","voorkeurslocatie","naam","timesVisited","payload","abrupt","resolve","stop","_x","_x2","apply","updateUser","_ref3","preferredLocationUuid","_ref4","_callee3","_getState$user$user","_context3","method","url","voorkeurslocatieUuid","_x3","_x4","fetchAllUsers","_ref5","_callee4","_context4","_e$response","toast","voorkeurslocatieNaam","_x5","_x6","initialState","loading","userReducer","action","planningsCache","DayPart","cache","fetchReservations","useCache","params","reservations","entries","join","btoa","planning","isCompleted","locationUuid","locatie","locatieUuid","locationName","locatieNaam","ruimteUuid","officeName","ruimteNaam","timestamp","Date","ReservationsNewtorkState","IDLE","reservationsReducer","FETCHING","UPDATING","SUCCESS","ERROR","isFetching","fetchPlanningBlock","plannings","finally","guestsAsSignedInUsers","gasten","guest","guests","PlanningBlockState","planningReducer","exists","_Reel","Pill","selected","Badge","ChipsSelector","_ref$showIcon","showIcon","chips","onSelect","_ref$invertSelected","invertSelected","_ref$renderReel","renderReel","chipsMap","chip","id","Check","showBadge","LocationsFilter","selectedLocation","setSelectedLocation","locations","l","MonthNavigator","nextMonth","prevMonth","currentMonth","currentYear","ChevronBack","ChevronForward","setTitle","setActionButton","actionButton","setBackButton","backButton","setScrollbarData","scrollbarData","layoutReducer","getNextWorkableDay","m","TabsWrapper","Tab","active","tabId","Calendar","today","useDispatch","selectedLocationUuid","history","useHistory","useParams","o","planningDates","groupBy","_React$useState3","_React$useState4","setSelectedDate","_React$useState5","_React$useState6","officeViewActive","setOfficeViewActive","isActive","Add","marginTop","useWindowSize","_useState","_useState2","windowSize","setWindowSize","handleResize","isMobileDevice","lightTheme","black","onCardBackgroundEmphasized","timeLineColor","iosStyles","titleColor","contentColor","separatorColor","iconColor","iconBackground","handleBarColor","backdropBackground","titleSize","contentSize","darkTheme","Appearance","AppearanceSelectorWrapper","AppearanceLabel","RadioInput","AppearanceSelector","Light","checked","onChange","htmlFor","Dark","System","_Avatar","VersionNumber","SettingsHeader","SettingsBody","SettingsCredits","_Container","Settings","_useSelector","company","companies","appearance","preferences","_user$preferredLocati","selectedAppearance","setSelectedAppearance","hasMultipleLocations","Edit","Element","onSubmit","preventDefault","usesCredits","href","ExitToApp","marginRight","process","fetchLocations","isActief","ruimtes","ruimte","plekken","locationsReducer","updateOffice","_callee2","_context2","patch","_e$response2","untoggled","JSON","parse","localStorage","getItem","officesReducer","s","EmptyState","text","actionLabel","icon","OfficeForm","_locations$","_errors$locationUuid","_errors$name","_errors$seats","createOffice","_useForm","useForm","defaultValues","handleSubmit","errors","message","required","minLength","Menu","MenuItem","EditRemoveMenu","edit","remove","Delete","LocationRow","setIsActive","Person","MoreHoriz","LocationCard","editLocation","editOffice","removeLocation","removeOffice","openPopupWithTab","justifyContent","alignItems","marginBottom","LocationForm","createLocation","updateLocation","Locations","locationToEdit","setLocationToEdit","_useState3","_useState4","officeToEdit","setOfficeToEdit","_useState5","_useState6","activeTab","setActiveTab","tab","delete","_e$response4","_x7","_x8","deleteLocation","_e$response3","deleteOffice","setTimeout","_officeToEdit$name","_locationToEdit$name","post","loc","LocationOn","Loader","RefreshStates","PullToRefresh","onRefresh","_ref$refreshDuration","refreshDuration","wrapperRef","idle","setState","script","createElement","async","appendChild","removeChild","set","dy","refreshing","domTarget","filterTaps","v","isInStandaloneMode","EmptyPlanning","xmlns","YearNavigator","nextYear","prevYear","disablePrev","disableNext","hidden","ReservationCards","ReservationsWeek","Reservations","showPastReservations","setShowPastReservations","setDisablePrev","setDisableNext","thisYear","_useState7","_useState8","reservationsYear","setReservationsYear","minReservationYear","reservation","maxReservationYear","userUuid","getReservationsByYear","includePast","filteredReservations","planningArray","isPast","reservationYear","weekNumber","sortedReservations","sort","reservationByPastOrPresent","inner","dates","valueOf","dateString","_ref6","_ref7","_locations$find","_ref8","handleOnSelect","isDutchHoliday","useInfiniteScroll","scrollRef","onIntersect","observer","scrollObserver","useCallback","node","IntersectionObserver","en","intersectionRatio","observe","_observer$current","disconnect","ReservationList","filters","planningFilters","weeks","token","obj","comp","datesGroupByComponent","week","hasContent","userMatch","hasOwnProperty","some","renderWeek","data-week","data-month","minHeight","usePrevious","OfficesFilter","getPlanningLocation","sortBy","ScrollableContainer","ScrollView","_ref$maxHeight","maxHeight","_ref$height","parentRef","scrollContainerRef","onScroll","_parentRef$current","_e$target$scrollTop","_parentRef$current2","_scrollContainerRef$c","_scrollContainerRef$c2","setAttribute","scrollContainer","data-scroll-top","data-scroll-bottom","FilterDropdownHeader","FilterDropdownBody","FilterResultItem","FilterDropdown","FilterUnderlay","FilterPortal","FilterPopOver","unit","items","handleSelectOption","filteredItems","setFilteredItems","filterItems","trim","toLowerCase","filteredResults","item","indexOf","setPopperElement","classNames","placeholder","onInput","autoFocus","FilterToggle","FilterToggleBody","Filter","_items$find","_ref$filterName","filterName","_ref$unit","_ref$items","_ref$handleAppliedFil","handleAppliedFilter","selectedOption","setSelectedOption","setReferenceElement","search","ChevronDown","stopPropagation","UserEntry","UserFilter","_filters$user","loggedInUser","filterUsers","returnUsers","userIsCurrent","PlanningFilters","marginLeft","LoadingIndicator","Plannings","selectedOffices","loaderRef","showMonths","setShowMonths","count","setCount","prevCount","months","currentMonthAndYear","daysInMonth","generateDaysInMonth","_key$split","split","_key$split2","throttle","PlanningList","fetchCompany","res","creditsPerUser","t0","companyReducer","EditForm","control","usesCreditsToggled","watch","Controller","onBlur","CompanySettings","_company$creditsPerUs","_company$creditsPerUs2","CompanySettingsForm","updateCompany","UserCards","UserCardLabel","Credits","UserCard","showCredits","Icon","Search","UserSettings","selectedLocations","setSelectedLocations","searchValue","setSearchValue","filteredUsers","_u$preferredLocation","toUpperCase","LoginButton","Intro","Redirect","Microsoftoffice","Onboarding","ReservationCreditInfo","cost","userCredits","creditOrCredits","Info","ReservationInfo","InputWrapper","ShadowInput","ShadowDateInputToggle","DateInputField","dateChangeCallBack","dateInput","setDateInput","textInput","setTextInput","handleTextInputChanged","parsedValue","isValid","CalendarToday","SimpleLink","RadioContainer","Ring","FormFieldLocation","CreateReservationForm","_errors$date","_errors$dayPart","_ref$isDisabled","unavailableDateParts","occupancyErrorMessage","planningPopup","setIsLoading","isComplete","setIsComplete","formDayPart","setFormDayPart","handleDateChange","setValue","selectedOffice","scheduleClear","FullDay","morning","Morning","midday","Midday","enoughLeftForFullDay","cantMakeReservation","companyUsesCredits","hasEnoughCredits","tooManyGuests","duplicateGuests","values","email","Set","guestEmailInvalid","_ref2$guests","selectedUser","requestObject","filteredGuests","emailadres","makeReservation","replaceAll","renderName","emailValid","color","ValueLabelWithRing","ringLabel","dayPartTitle","ReservationOverview","_ref$dayPart","Attendees","AttendeesList","fullday","currentUser","renderList","Wrap","Strong","strong","DoubleFormField","AlignFieldButton","GuestInput","inputGuest","_ref$allowDelete","allowDelete","_ref$allowGuestReserv","allowGuestReservation","handleUpdateGuest","handleDeleteGuest","_ref$emailIsDuplicate","emailIsDuplicate","setGuest","emailIsInvalid","setEmailIsInvalid","addCapitalizationToFullName","nameArray","ignorePrefixes","namePart","charAt","marginBlock","confirm","Trash","GuestSuggestionContainer","GuestSuggestions","links","setLinks","suggestions","guestSuggestions","currentGuests","filteredSuggestions","numberOfInvites","suggestedGuest","enteredGuest","emptyIndex","copy","handleQuickAdd","getLinks","formattedData","aantalKeerUitgenodigd","Sparkles","Guests","GuestTab","_ref$freeSpots","freeSpots","maxGuests","addNewField","data-scroll","updatedGuest","modifiable","splice","updateGuest","deleteGuest","DatePopup","_planning$key","_planning$key2","_plannings$find","_plannings$find2","_useCalendarAvailabil","occupancy","setOccupancy","_useSelector3$plannin","formattedSelectedDate","reservationsOnDate","planningItem","shift","getOccupiedMessage","_occupancy$scheduleCl","timeIndications","link","useCalendarAvailability","allPlannings","dayCompleted","_assertAvailability","inputPlanning","_inputPlanning$find","_inputPlanning$find2","morningAll","t","middayAll","fullDay","assertAvailability","userDayPart","_user$user2","_user$user3","hasUser","handleDeleteReservation","deleteReservation","tabs","Link","Logo","LogoWrapper","NavigationBar","onMenuToggle","layout","ArrowBack","ChipContainer","_props$color","_props$textColor","textColor","Chip","_ref$color","_ref$textColor","_ref$icon","ReleaseNoteContainer","ReleaseNote","description","notes","bugfixes","note","bugfix","releaseNotes","Content","Help","showReleaseNoteBadge","setShowReleaseNoteBadge","lastReadUpdate","lastReleaseNote","isAfter","rel","Email","Phone","releaseNote","ScrollBar","ScrollTrack","thumbOnly","ScrollThumb","MonthTab","WeekTab","TimeLineScrollBar","_contentRef$current","_contentRef$current2","_contentRef$current5","_contentRef$current6","_ref$startDate","startDate","scrollOffsetPercentage","setScrollOffsetPercentage","dragging","setDragging","scrollTrackRef","scrollThumbRef","contentRef","setCurrentScrollOffsetPercentage","scrollOffset","handleThumbPosition","top","handleDragEnd","startDateObj","startYear","startMonth","filteredWeeks","weekDate","toDate","oneJan","getFullYear","ceil","getTime","getDay","getWeekNumber","filteredMonths","monthDate","monthNumber","getMonth","toLocaleString","monthTabs","monthIndex","_contentRef$current$s","_contentRef$current3","querySelector","offsetPercentage","offsetTop","weekTabs","_contentRef$current$s2","_contentRef$current4","scrollIntoView","behavior","onMouseMove","_scrollTrackRef$curre","getBoundingClientRect","targetOffsetPercentage","clientY","screenHeightCorrection","scrollTo","onMouseUp","offsetHeight","onMouseDown","cursor","CustomScrollBar","showTimeline","SideBar","ChildWrapper","Footer","SettingsLink","NavLink","menuTabs","EventAvailable","pathName","Face","adminMenuTabs","Business","Group","Layout","useLocation","isHelpActive","setIsHelpActive","drawerOpen","setDrawerOpen","pathname","baseName","currentTab","startsWith","renderTabsList","activeClassName","HelpOutline","App","_user$user$preferredL","setItem","stringify","exact","isLoggedIn","authReducer","planningPopupReducer","allUsersReducer","planningFiltersReducer","filtersCopy","preferencesReducer","rootReducer","combineReducers","auth","usersReducer","companiesReducer","createStore","applyMiddleware","thunk","UserProvider","status","AuthProvider","Error","instrumentationKey","AppInsightsProvider","reactPlugin","ReactPlugin","appInsights","ApplicationInsights","maxBatchInterval","disableFetchTracking","extensions","extensionConfig","identifier","_appInsights$current","loadAppInsights","AppInsightsContext","Provider","AppInsightsErrorBoundary","onError","StyledPricingPlan","PricingPlan","_ref$isSelectable","isSelectable","_ref$isSelected","isSelected","bullets","_ref$isHighlighted","_ref$isTryable","isTryable","_ref$showNote","showNote","StyledTenantCreator","Header","header","ButtonGroup","plans","Free","costYearly","Premium","TenantCreator","_errors$contactPerson","_errors$companyName","_errors$invoicingEmai","_errors$street","_errors$postalCode","_errors$city","_errors$vatNumber","_errors$chamberOfComm","pricingPlan","companyName","contactPerson","onCreateTenant","yearly","setYearly","setStep","_step","fields","handleNext","details","address","city","street","postalCode","vatNumber","chamberOfCommerceNumber","invoicePeriod","invoicingEmail","left","plan","pattern","createTenant","Welcome","newTenant","setNewTenant","query","URLSearchParams","redirect","handleCreateAndFetchUser","init","CustomThemeProvider","setTheme","colorSchemePreference","matchMedia","setThemeBasedOnSystemPreference","matches","ThemeProvider","ButtonRow","AndroidInstallProvider","allowShow","onUpdatePreference","isVisible","setIsVisible","deferredPrompt","setDeferredPrompt","hideInstallPromotion","handleInstallPWA","prompt","userChoice","Backdrop","IosNativeDrawer","IosDrawerHeader","IosDrawerHeaderTitle","IosDrawerHeaderButton","IosNativeDrawerHeader","buttonIcon","onButtonPress","IosDrawerContentBlock","IosNativeDrawerContent","IosNativeDrawerSeparator","IosRow","IosIcon","IosText","IosNativeDrawerStep","IosInstallProvider","data-name","PwaInstallProvider","checkPlatform","ua","userAgent","isAndroid","isIos","isMobile","setShowPreference","platform","apiUrl","defaults","baseURL","store","Router","ToastContainer","autoClose","hideProgressBar","newestOnTop","closeOnClick","transition","Slide","rtl","pauseOnFocusLoss","draggable","pauseOnHover","URL","origin","fetch","headers","contentType","ready","unregister","reload","checkValidServiceWorker"],"mappings":"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","file":"static/js/main.9ae0b7d1.chunk.js","sourcesContent":["// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://cra.link/PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/),\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://cra.link/PWA',\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://cra.link/PWA.',\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (response.status === 404 || (contentType != null && contentType.indexOf('javascript') === -1)) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log('No internet connection found. App is running in offline mode.');\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister();\n })\n .catch((error) => {\n console.error(error.message);\n });\n }\n}\n","import React from 'react';\nimport styled from 'styled-components';\n\nconst Container = styled.div`\n margin: 3rem;\n padding: 1rem;\n display: inline-flex;\n flex-direction: row;\n background-color: white;\n border-radius: 24px;\n\n div {\n display: flex;\n flex-direction: column;\n }\n\n span {\n padding: 0.5rem;\n }\n\n svg {\n margin-right: 0.5rem;\n margin-left: -0.25rem;\n height: 4rem;\n }\n\n @media screen and (max-width: 64rem) {\n flex-direction: column;\n\n svg {\n align-self: start;\n margin-left: 0.5rem;\n }\n }\n`;\n\nconst NoPermission: React.FC = () => {\n return (\n \n \n \n \n \n \n
\n Sorry, je hebt geen toestemming om deze pagina te bekijken.\n Is dit niet correct? Neem dan contact op met de beheerder van de omgeving.\n
\n
\n );\n};\n\nexport default NoPermission;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { RootState } from '../global';\nimport { Route } from 'react-router-dom';\nimport NoPermission from './Manager/NoPermission';\n\ntype Props = {\n path: string;\n};\n\nconst ProtectedRoute: React.FC = ({ children, path, ...rest }) => {\n const { user } = useSelector((state: RootState) => state);\n const isAdmin = user.user?.roles.includes('admin');\n\n return (isAdmin ? children : )} />;\n};\n\nexport default ProtectedRoute;\n","import React from 'react';\nimport styled from 'styled-components';\n\ntype Rest = React.DetailedHTMLProps, HTMLInputElement>;\ntype Props = Rest & {\n label: string;\n};\n\nconst Styled = styled.label`\n cursor: pointer;\n\n input[type='checkbox'] {\n display: none;\n }\n\n span {\n display: flex;\n align-items: center;\n color: ${(props) => props.theme.colors.label};\n }\n\n span:before {\n content: '';\n width: 1.25rem;\n height: 1.25rem;\n margin-right: 0.75rem;\n border-radius: 0.25rem;\n display: flex;\n justify-content: center;\n align-items: center;\n border: 2px solid ${(props) => props.theme.colors.border};\n }\n\n span:after {\n content: '';\n opacity: 0;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='24' width='24'%3E%3Cpath d='M0 0h24v24H0z' fill='none' /%3E%3Cpath fill='%23ffffff' d='M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z'/%3E%3C/svg%3E\");\n background-size: contain;\n background-position: center;\n background-repeat: no-repeat;\n width: 1.25rem;\n height: 1.25rem;\n border-radius: 0.25rem;\n position: absolute;\n border: 2px solid transparent;\n }\n\n input:checked ~ span::before {\n background-color: ${(props) => props.theme.colors.primary};\n border-color: ${(props) => props.theme.colors.primary};\n }\n\n input:checked ~ span::after {\n opacity: 1;\n }\n`;\n\nconst Checkbox: React.FC = ({ label, ...rest }) => {\n return (\n \n \n {label}\n \n );\n};\n\nexport { Checkbox };\n","import React from 'react';\nimport styled from 'styled-components';\n\ntype Rest = React.DetailedHTMLProps, HTMLInputElement>;\ntype Props = Rest & {\n label: string;\n};\n\nconst Styled = styled.label`\n cursor: pointer;\n\n input[type='radio'] {\n /* display: none; */\n visibility: none;\n opacity: 0;\n width: 1px;\n height: 1px;\n margin: 0;\n padding: 0;\n position: absolute;\n }\n\n span {\n display: flex;\n align-items: center;\n position: relative;\n }\n\n span:before {\n content: '';\n width: 20px;\n height: 20px;\n margin-right: 0.75rem;\n border-radius: 2rem;\n display: flex;\n justify-content: center;\n align-items: center;\n border: 2px solid ${(props) => props.theme.colors.inputBorder};\n }\n\n span:after {\n content: '';\n opacity: 0;\n background-size: contain;\n background-position: center;\n width: 10px;\n height: 10px;\n left: 5px;\n top: 5px;\n position: absolute;\n border: 2px solid transparent;\n background-color: ${(props) => props.theme.colors.primary};\n border-radius: 2rem;\n }\n\n input:checked ~ span::before {\n border-color: ${(props) => props.theme.colors.primary};\n }\n\n input:checked ~ span::after {\n opacity: 1;\n }\n\n input:focus ~ span {\n outline: 2px dashed black;\n }\n\n input:disabled ~ span {\n opacity: 0.5;\n cursor: not-allowed;\n }\n`;\n\nconst Radio: React.FC = ({ label, ...rest }) => {\n return (\n \n \n {label}\n \n );\n};\n\nexport { Radio };\n","import React from 'react';\nimport styled from 'styled-components';\n\ntype Rest = React.DetailedHTMLProps, HTMLInputElement>;\ntype Props = Rest & {\n label: string;\n};\n\nconst Styled = styled.label`\n cursor: pointer;\n\n input[type='checkbox'] {\n display: none;\n }\n\n span {\n display: flex;\n align-items: center;\n position: relative;\n font-weight: 400;\n color: ${(props) => props.theme.colors.label};\n font-size: 1rem;\n line-height: 1.4;\n user-select: none;\n }\n\n span:before {\n content: '';\n width: 36px;\n height: 24px;\n margin-right: 0.75rem;\n border-radius: 2rem;\n display: flex;\n justify-content: center;\n align-items: center;\n background: ${(props) => props.theme.colors.faded};\n }\n\n span:after {\n content: '';\n background-size: contain;\n background-position: center;\n width: 16px;\n height: 16px;\n left: 4px;\n top: 4px;\n position: absolute;\n border: 2px solid transparent;\n background-color: ${(props) => props.theme.colors.cardBackground};\n border-radius: 2rem;\n transition: 0.15s ease;\n }\n\n input:checked ~ span::before {\n background: ${(props) => props.theme.colors.primary};\n }\n\n input:checked ~ span::after {\n transform: translate3d(12px, 0, 0);\n }\n`;\n\nconst Switch: React.FC = ({ label, ...rest }) => {\n return (\n \n \n {label}\n \n );\n};\n\nexport { Switch };\n","import styled, { css } from 'styled-components';\n\nconst Base = styled.button`\n font: inherit;\n border-radius: 1rem;\n border: 1px solid transparent;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n padding: 0 1rem;\n margin: 0;\n cursor: pointer;\n height: 3.5rem;\n font-size: 0.875rem;\n font-weight: 500;\n transition: 0.15s ease;\n position: relative;\n text-decoration: none;\n\n svg {\n width: auto;\n height: 1.5rem;\n }\n\n & > * + * {\n margin-left: 0.25rem;\n }\n`;\n\nconst Primary = styled(Base)<{ isLoading?: boolean }>`\n background: ${(props) => props.theme.colors.primary};\n color: ${(props) => props.theme.colors.onPrimary};\n\n &:hover {\n background: ${(props) => props.theme.colors.primaryDarker};\n }\n\n ${(props) =>\n props.isLoading &&\n css`\n color: transparent !important;\n\n &:after {\n content: '';\n display: flex;\n position: absolute;\n width: 1.375rem;\n height: 1.375rem;\n border: 0.1875rem solid rgba(255, 255, 255, 0.2);\n border-top: 0.1875rem solid rgba(255, 255, 255, 1);\n border-radius: 50%;\n animation: spin 1.5s cubic-bezier(0.46, 0.09, 0.54, 0.9) infinite;\n }\n `}\n\n &:disabled {\n background: ${(props) => props.theme.colors.disabled};\n color: ${(props) => props.theme.colors.disabledText};\n cursor: not-allowed;\n }\n`;\n\nconst Minimal = styled(Base)`\n background: transparent;\n color: ${(props) => props.theme.colors.label};\n\n &:hover {\n background: ${(props) => props.theme.colors.background};\n }\n\n &:disabled {\n color: ${(props) => props.theme.colors.disabledText};\n cursor: not-allowed;\n }\n`;\n\nconst Destructive = styled(Base)`\n background: ${(props) => props.theme.colors.error};\n color: white;\n\n &:hover {\n background: #b95f55;\n }\n\n &:disabled {\n background: ${(props) => props.theme.colors.disabled};\n color: ${(props) => props.theme.colors.disabledText};\n cursor: not-allowed;\n }\n`;\n\nconst Button = {\n Primary,\n Minimal,\n Destructive,\n};\n\nconst IconPrimary = styled(Primary)`\n width: 2.5rem;\n height: 2.5rem;\n padding: 0;\n`;\n\nconst IconMinimal = styled(Minimal)`\n width: 2.5rem;\n height: 2.5rem;\n padding: 0;\n`;\n\nconst IconDestructive = styled(Destructive)`\n width: 2.5rem;\n height: 2.5rem;\n padding: 0;\n`;\n\nconst IconButton = {\n Primary: IconPrimary,\n Minimal: IconMinimal,\n Destructive: IconDestructive,\n};\n\nexport { Button, IconButton };\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Document, Trash } from '@styled-icons/ionicons-outline';\nimport { IconButton } from '../Button/Button';\n\nexport const FileGrid = styled.div`\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(min(10rem, 100%), 1fr));\n grid-auto-rows: minmax(10rem, 1fr);\n gap: 1rem;\n`;\n\nconst Actions = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: flex-end;\n align-items: flex-start;\n background: rgba(0, 0, 0, 0.3);\n pointer-events: none;\n opacity: 0;\n`;\n\nconst ActionButton = styled(IconButton.Minimal)`\n color: rgba(255, 255, 255, 0.9);\n\n &:hover {\n background: transparent;\n color: rgba(255, 255, 255, 1);\n }\n`;\n\nconst Preview = styled.div`\n position: relative;\n\n &:hover {\n ${Actions} {\n opacity: 1;\n pointer-events: initial;\n }\n }\n`;\n\nconst Image = styled.img`\n width: 100%;\n height: 100%;\n object-fit: contain;\n background: ${(props) => props.theme.colors.border};\n display: block;\n margin: 0;\n`;\n\nconst File = styled.div`\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n border: 1px solid ${(props) => props.theme.colors.border};\n\n span {\n font-size: 0.875rem;\n text-align: center;\n max-width: 80%;\n line-height: 1.4;\n color: ${(props) => props.theme.colors.label};\n margin-top: 0.25rem;\n word-break: break-word;\n }\n`;\n\ntype Props = {\n src: string;\n name: string;\n type: string;\n onRemove?: (src: string) => void;\n};\n\nexport const FilePreview: React.FC = ({ src, name, type, onRemove }) => {\n const isImage = type.split('/')[0] === 'image';\n\n return (\n \n \n onRemove && onRemove(src)}>\n \n \n \n {isImage ? (\n {name}\n ) : (\n \n \n {name.length > 40 ? `${name.substring(0, 40)}...` : name}\n \n )}\n \n );\n};\n","export function hexToRgb(hex: string) {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return `${r}, ${g}, ${b}`;\n}\n","import styled, { css } from 'styled-components';\nimport { hexToRgb } from '../../utils/hexToRGB';\n\nconst Heading = styled.div<{ type?: 'lg' | 'md'; position?: 'sticky' | 'normal' }>`\n ${({ type = 'lg', theme, position }) => css`\n font-weight: ${type === 'lg' ? '500' : '600'};\n font-size: ${type === 'lg' ? '1.125rem' : '1rem'};\n color: ${(props) => props.theme.colors.onCardBackground};\n font-family: ${['md'].includes(type) ? theme.fonts.body : theme.fonts.heading};\n\n ${position === 'sticky' &&\n css`\n position: sticky;\n top: 1px;\n background-image: linear-gradient(\n 0deg,\n rgba(${(props) => hexToRgb(props.theme.colors.background)}, 0),\n rgba(${(props) => hexToRgb(props.theme.colors.background)}, 1)\n );\n padding-block: 1rem;\n z-index: 10;\n `}\n `}\n`;\n\nexport { Heading };\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { CSSTransition } from 'react-transition-group';\nimport styled from 'styled-components';\nimport { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock';\nimport { Close } from '@styled-icons/ionicons-outline';\nimport { IconButton } from '../Button/Button';\nimport { Heading } from '../Heading/Heading';\nconst FocusTrap = require('focus-trap-react');\n\nexport type Props = {\n isOpen: boolean;\n isCancellable?: boolean;\n onCancel?: () => void;\n className?: string;\n title?: string;\n renderHeader?: () => React.ReactNode;\n};\n\nconst Styled = styled.div`\n display: flex;\n justify-content: center;\n position: fixed;\n left: 0;\n top: 0;\n width: 100%;\n height: 100vh;\n z-index: 1001;\n overflow-y: hidden;\n pointer-events: none;\n align-items: center;\n\n .underlay {\n position: fixed;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.4);\n opacity: 0;\n transition: 0.15s ease;\n }\n\n .inner {\n position: relative;\n max-width: calc(100% - 1rem);\n width: 40rem;\n background: ${(props) => props.theme.colors.cardBackground};\n padding: 2rem;\n border-radius: 0.2rem;\n transition: 0.2s cubic-bezier(0.45, 0, 0.21, 1);\n transform: scale(0.7) translateY(10%);\n opacity: 0;\n box-shadow: 0 3.4px 2.7px rgba(0, 0, 0, 0.012), 0 8.7px 6.9px rgba(0, 0, 0, 0.018),\n 0 17.7px 14.2px rgba(0, 0, 0, 0.022), 0 36.5px 29.2px rgba(0, 0, 0, 0.028), 0 100px 80px rgba(0, 0, 0, 0.04);\n }\n\n &.enter-done {\n pointer-events: initial;\n\n .underlay {\n opacity: 1;\n }\n\n .inner {\n transform: scale(1) translateY(0%);\n opacity: 1;\n }\n }\n\n .header {\n display: flex;\n align-items: center;\n margin-bottom: 1rem;\n\n ${Heading.Small} {\n font-family: 'Poppins';\n font-weight: 500;\n font-size: 1.25rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n height: 1.3em;\n }\n }\n\n .subHeader {\n padding-bottom: 1rem;\n }\n @media screen and (max-width: 44rem) {\n .inner {\n /* transition: 0.2s cubic-bezier(0.45, 0, 0.21, 1);\n border-radius: 0;\n border-top-left-radius: 1rem;\n border-top-right-radius: 1rem; */\n\n overflow-y: scroll;\n max-height: 80%;\n -webkit-overflow-scrolling: touch;\n /* transform: scale(1) translateY(100%); */\n }\n }\n`;\n\nconst CloseButton = styled(IconButton.Minimal)`\n position: absolute;\n right: 1rem;\n top: 1rem;\n`;\n\nconst portalRoot = document.getElementById('portal');\n\nconst Modal: React.FC = ({\n children,\n isOpen,\n className,\n isCancellable = true,\n onCancel = () => {},\n title,\n renderHeader,\n}) => {\n const modalRef = React.createRef();\n\n React.useEffect(() => {\n if (!modalRef.current) return;\n\n if (isOpen) {\n disableBodyScroll(modalRef.current);\n } else {\n enableBodyScroll(modalRef.current);\n }\n }, [isOpen, modalRef]);\n\n if (!portalRoot) return null;\n\n return ReactDOM.createPortal(\n {}} unmountOnExit in={isOpen} timeout={200}>\n \n \n
\n
\n
\n {title && (\n
\n {title}\n\n \n \n Sluiten\n \n
\n )}\n {renderHeader &&
{renderHeader()}
}\n {children}\n
\n
\n \n \n ,\n portalRoot,\n );\n};\n\nexport { Modal };\n","import styled from 'styled-components';\n\nconst Reel = styled.div`\n display: flex;\n height: auto;\n overflow-x: auto;\n overflow-y: hidden;\n touch-action: pan-x;\n\n & > * {\n flex: 0 0 auto;\n }\n\n & > img {\n height: 100%;\n flex-basis: auto;\n width: auto;\n }\n\n & > * + * {\n margin-left: 0.5rem;\n }\n`;\n\nexport { Reel };\n","import styled from 'styled-components';\n\nexport const Content = styled.div`\n & > * + * {\n margin-top: 1rem;\n }\n\n p {\n line-height: 1.5;\n color: ${(props) => props.theme.colors.label};\n }\n\n img {\n max-width: 100%;\n height: auto;\n }\n`;\n","import styled from 'styled-components';\nimport { IconButton } from '../Button/Button';\n\nconst Fab = styled(IconButton.Primary)`\n width: 3rem;\n height: 3rem;\n position: fixed;\n z-index: 99;\n right: 2rem;\n bottom: 2rem;\n box-shadow: 0 1.3px 2.2px rgba(0, 0, 0, 0.04), 0 4.5px 7.4px rgba(0, 0, 0, 0.06), 0 20px 33px rgba(0, 0, 0, 0.1);\n`;\n\nexport { Fab };\n","import styled from 'styled-components';\n\ntype LabelProps = {\n type?: 'default' | 'muted' | 'faded' | 'fat';\n size?: 'default' | 'small';\n};\nconst Label = styled.div`\n font-weight: ${(props) => (props.type === 'fat' ? '600' : '400')};\n color: ${(props) =>\n // @ts-ignore\n props.type && ['muted', 'faded'].includes(props.type) ? props.theme.colors[props.type] : props.theme.colors.label};\n font-size: ${(props) => (props.size === 'small' ? '0.8125rem' : '0.875rem')};\n line-height: 1.4;\n\n &.badge {\n position: relative;\n &:after {\n content: '';\n position: absolute;\n top: 0;\n left: 100%;\n width: 0.5rem;\n height: 0.5rem;\n border-radius: 50%;\n background-color: ${(props) => props.theme.colors.primary};\n }\n }\n`;\n\nexport { Label };\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport { Label } from '..';\n\nconst Form = styled.form<{ isLoading?: boolean; isDisabled?: boolean }>`\n display: grid;\n grid-template-columns: 1fr;\n width: 100%;\n gap: 1rem;\n transition: 0.15s ease;\n\n ${(props) =>\n props.isLoading &&\n `\n opacity: 0.7;\n pointer-events: none;\n `}\n\n ${(props) =>\n props.isDisabled &&\n `\n opacity: 0.5;\n pointer-events: none;\n `}\n\n\n button[type='submit'] {\n margin-left: auto;\n }\n`;\n\nconst Field = styled.div`\n display: flex;\n flex-direction: column;\n\n ${Label.Default} {\n margin: 0 0 0.5rem 0;\n }\n`;\n\nconst FieldLabel = styled(Label).attrs(() => ({\n type: 'faded',\n size: 'small',\n}))<{ light: boolean }>`\n margin-bottom: 0.5rem;\n\n ${(props) =>\n props.light &&\n css`\n color: ${props.theme.colors.white};\n `}\n`;\n\nconst FieldHint = styled(FieldLabel)`\n margin-top: -0.25rem;\n`;\n\nconst FieldError = styled(Label).attrs(() => ({\n as: 'span',\n size: 'small',\n}))`\n color: ${(props) => props.theme.colors.error};\n`;\n\ntype Props = {\n label?: string | JSX.Element;\n errorMessage?: string;\n hint?: string;\n light?: boolean;\n style?: React.CSSProperties;\n};\n\nconst FormField: React.FC = ({ label, children, errorMessage, hint, style, light = false }) => {\n return (\n \n {label && {label}}\n {hint && {hint}}\n {children}\n {errorMessage && {errorMessage}}\n \n );\n};\n\nexport { Form, FormField };\n","import styled from 'styled-components';\n\nconst Input = styled.input`\n width: 100%;\n display: flex;\n height: 3.5rem;\n padding: 0 1rem;\n font: inherit;\n border: 1px solid ${(props) => props.theme.colors.inputBorder};\n border-radius: 0.5rem;\n box-shadow: none;\n background: ${(props) => props.theme.colors.inputBackground};\n -webkit-appearance: none;\n color: inherit;\n cursor: pointer;\n\n &[type='color'] {\n width: 4rem;\n padding: 2px;\n }\n\n &:focus {\n border-color: ${(props) => props.theme.colors.primary};\n box-shadow: 0px 0px 0px 1px ${(props) => props.theme.colors.primary};\n outline: 0;\n }\n`;\n\nconst Select = styled.select`\n width: 100%;\n display: flex;\n height: 3.5rem;\n padding: 0 1rem;\n font: inherit;\n border: 1px solid ${(props) => props.theme.colors.inputBorder};\n border-radius: 0.5rem;\n box-shadow: none;\n background: ${(props) => props.theme.colors.inputBackground};\n -webkit-appearance: none;\n color: inherit;\n cursor: pointer;\n\n &:focus {\n border-color: ${(props) => props.theme.colors.primary};\n box-shadow: 0px 0px 0px 1px ${(props) => props.theme.colors.primary};\n outline: 0;\n }\n`;\n\nexport { Input, Select };\n","import styled from 'styled-components';\n\nconst Badge = styled.span`\n background-color: ${(props) => props.theme.colors.primary};\n color: ${(props) => props.theme.colors.onLabel};\n border-radius: 0.25rem;\n text-align: center;\n font-weight: 700;\n padding: 0.25rem;\n font-size: 0.875rem;\n margin: 0 0.5rem;\n`;\n\nexport { Badge };\n","import { createGlobalStyle } from 'styled-components';\nimport reset from 'styled-reset';\n\nexport const GlobalStyle = createGlobalStyle`\n${reset}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n#root {\n /* Makeup for scrollbar on the right side. https://stackoverflow.com/a/30293718 */\n overflow-x: hidden;\n margin-right: calc(-1 * (100vw - 100%));\n}\n\nbody {\n margin: 0;\n font-family: ${(props) => props.theme.fonts.body};\n box-sizing: border-box;\n max-width: 100vw;\n background-color: ${(props) => props.theme.colors.background};\n overflow-x: hidden;\n color: ${(props) => props.theme.colors.label};\n}\n\nhtml, body {\ntext-rendering: optimizeLegibility; \n-webkit-font-smoothing: subpixel-antialiased;\n\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace;\n}\n\n.visually-hidden {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n}\n\n.Toastify__toast {\n min-height: 3rem;\n padding: 1rem;\n font: inherit;\n}\n\n.Toastify__toast-body {\n /* display: -webkit-box;\n -webkit-line-clamp:3;;\n -webkit-box-orient:vertical; \n overflow:hidden; */\n margin-right: 0.5rem;\n}\n\n.Toastify__toast--success {\n background: ${(props) => props.theme.colors.success};\n}\n\n.Toastify__toast--error {\n background: ${(props) => props.theme.colors.error};\n}\n\n*,\n*:after,\n*:before {\n box-sizing: border-box;\n /* -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale; */\n}\n\n\n/* Focusing the button with a keyboard will show a dashed black line. */\n*:focus-visible {\n outline: 2px dashed black;\n}\n\n/* Focusing the button with a mouse, touch, will not show any outline */\n*:focus:not(:focus-visible) {\n outline: none;\n}\n\n\n`;\n","// percent should be between 0 and 1\nexport const range = (start: number, end: number, percent: number) => (end - start) * percent + start;\n\nexport const clamp = (min: number, max: number, val: number) => Math.max(Math.min(val, max), min);\n\n// take a number (\"val\") in between the two numbers in arr1, and map it to a number in between the two numbers in arr2\nexport const rangeMap = (arr1: number[], arr2: number[], val: number) => {\n const percent = (val - arr1[0]) / (arr1[1] - arr1[0]);\n return range(arr2[0], arr2[1], percent);\n};\n\n// rangeMap with a guarantee that the returned number will be inside the bounds of arr2\n// export const clampedRangeMap = (arr1, arr2, val) => {\n// const min = arr2[0] < arr2[1] ? arr2[0] : arr2[1]\n// const max = min === arr2[0] ? arr2[1] : arr2[0]\n// return clamp(min, max, rangeMap(arr1, arr2, val))\n// }\n\n// https://twitter.com/chpwn/status/285540192096497664\n// iOS constant = 0.55\nexport const rubberBand = (distance: number, dimension: number, constant = 0.15) => {\n return (distance * dimension * constant) / (dimension + constant * distance);\n};\n\nexport const rubberBandIfOutOfBounds = (min: number, max: number, delta: number, constant: number) => {\n if (delta < min) {\n return -rubberBand(min - delta, max - min, constant) + min;\n }\n if (delta > max) {\n return rubberBand(delta - max, max - min, constant) + max;\n }\n return delta;\n};\n\n// https://medium.com/@nathangitter/building-fluid-interfaces-ios-swift-9732bb934bf5\n// note: velocity in UIkit is points per second, but react use gesture gives px per millisecond,\n// so we can simplify somewhat\nexport const projection = (initialVelocity: number) => {\n const decelerationRate = 0.998;\n return (initialVelocity * decelerationRate) / (1 - decelerationRate);\n};\n\n// export const findNearestNumberInArray = (n: number, arr: number[]) => {\n// const sortedArr = [...arr].sort((a, b) => a - b);\n// if (n <= sortedArr[0]) return sortedArr[0];\n// if (n >= sortedArr[arr.length - 1]) return sortedArr[arr.length - 1];\n\n// for (let i = 1; i < sortedArr.length; i++) {\n// const prev = sortedArr[i - 1];\n// const current = sortedArr[i];\n// if (current === n) return current;\n// if (current > n && prev < n) {\n// return current - n < n - prev ? current : prev;\n// }\n// }\n// return false;\n// };\n\nexport const findNearestNumberInArray = (n: number, arr: number[]) => {\n return arr.reduce((a, b) => {\n return Math.abs(b - n) < Math.abs(a - n) ? b : a;\n });\n};\n","import { useMemo, useRef, useEffect } from 'react';\nimport styled from 'styled-components';\nimport { useSpring, animated } from 'react-spring';\nimport { useDrag } from 'react-use-gesture';\nimport { Heading } from '../Heading/Heading';\n// import { enableBodyScroll, disableBodyScroll } from 'body-scroll-lock';\nimport { rubberBandIfOutOfBounds, findNearestNumberInArray, projection, clamp } from '../../utils/animation';\nimport ReactDOM from 'react-dom';\nimport React from 'react';\n\nexport type Props = {\n isOpen: boolean;\n onCancel?: () => void;\n className?: string;\n title?: string;\n renderHeader?: () => React.ReactNode;\n};\n\nconst HandleBar = styled.div`\n background-color: rgba(128, 128, 128, 0.3);\n border-radius: 2px;\n height: 4px;\n width: 36px;\n position: sticky;\n top: 0.75rem;\n margin: 0 auto;\n z-index: 3;\n`;\n\nconst Wrapper = styled.div`\n position: fixed;\n display: flex;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n z-index: 1001;\n overflow-y: hidden;\n pointer-events: none;\n`;\n\nconst Underlay = styled.div`\n position: fixed;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.6);\n`;\n\nconst Inner = styled.div`\n height: fit-content;\n max-height: 90%;\n bottom: 0;\n position: absolute;\n width: 100%;\n background: ${(props) => props.theme.colors.cardBackground};\n box-shadow: 0 100px 0 white, 0 3.4px 2.7px rgba(0, 0, 0, 0.012), 0 8.7px 6.9px rgba(0, 0, 0, 0.018),\n 0 17.7px 14.2px rgba(0, 0, 0, 0.022), 0 36.5px 29.2px rgba(0, 0, 0, 0.028), 0 100px 80px rgba(0, 0, 0, 0.04);\n border-radius: 0;\n border-top-left-radius: 1rem;\n border-top-right-radius: 1rem;\n -webkit-overflow-scrolling: touch;\n overflow-y: auto;\n overflow-x: hidden;\n transform: scale(1) translateY(100%);\n touch-action: none;\n\n &:after {\n content: '';\n width: 100%;\n height: 100%;\n top: calc(100% - 1px);\n left: 0;\n background: ${(props) => props.theme.colors.cardBackground};\n pointer-events: none;\n border-radius: 0;\n }\n`;\n\nconst ChildrenWrapper = styled.div`\n padding: 1rem 1rem 2rem;\n`;\n\nconst DrawerHeader = styled.div`\n position: sticky;\n top: 0;\n margin-top: -4px; /* Make up for the height of the handlebar */\n background: ${(props) => props.theme.colors.cardBackground};\n padding: 1.5rem 1rem 0.5rem;\n z-index: 2;\n`;\n\nconst Title = styled(Heading).attrs(() => ({ to: 'h3' }))`\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n height: 1.3em;\n`;\n\nconst portalRoot = document.getElementById('portal');\n\nconst spring1 = {\n tension: 350,\n friction: 34,\n};\n\nconst spring2 = {\n tension: 175,\n friction: 25,\n};\n\nconst Drawer: React.FC = ({ children, className, isOpen, onCancel, title, renderHeader }) => {\n const stops = useMemo(() => [0, window.innerHeight], []);\n const drawerRef = useRef(null);\n const [{ y }, setY] = useSpring<{ y: number }>(() => ({\n y: stops[1],\n }));\n\n const [{ scrollY }, setScrollY] = useSpring<{ scrollY: number }>(() => ({\n scrollY: 0,\n onFrame: (props: any) => {\n if (drawerRef.current) drawerRef.current.scrollTop = props.scrollY;\n },\n }));\n\n useEffect(() => {\n setY({\n y: isOpen ? stops[0] : stops[1],\n immediate: false,\n config: spring2,\n });\n }, [isOpen, setY, stops]);\n\n const threshold = 10;\n\n const bind = useDrag(\n ({ vxvy: [, velocityY], delta: [, deltaY], movement: [movementX, movementY], last, memo, event }) => {\n if (!drawerRef.current) return;\n\n if (!memo) {\n const isIntentionalGesture = Math.abs(movementY) > threshold && Math.abs(movementY) > Math.abs(movementX);\n\n if (!isIntentionalGesture) return;\n memo = y.getValue() - movementY;\n }\n\n const isScrollable = drawerRef.current.scrollHeight > drawerRef.current.clientHeight;\n const maxScrollTop = drawerRef.current.scrollHeight - drawerRef.current.clientHeight;\n\n if (last) {\n const projectedEndpoint = y.getValue() + projection(velocityY);\n const projectedScrollEndpoint = scrollY.getValue() + projection(velocityY) * -1;\n\n if (projectedScrollEndpoint < -2000 || scrollY.getValue() === 0) {\n const point = findNearestNumberInArray(projectedEndpoint, stops);\n\n setScrollY({\n scrollY: 0,\n immediate: false,\n config: spring1,\n });\n\n if (point > 0 && onCancel) {\n onCancel();\n } else {\n setY({\n y: point,\n immediate: false,\n config: spring1,\n });\n }\n } else {\n setScrollY({\n scrollY: clamp(0, maxScrollTop, projectedScrollEndpoint),\n immediate: false,\n config: spring2,\n });\n }\n\n return;\n }\n\n if (isScrollable && (deltaY < 0 || drawerRef.current.scrollTop > 0)) {\n const scrollTop = clamp(0, maxScrollTop, deltaY * -1 + scrollY.getValue());\n setScrollY({\n scrollY: scrollTop,\n immediate: true,\n });\n return;\n }\n\n const newY = rubberBandIfOutOfBounds(stops[0], stops[1], movementY + memo, 0.08);\n\n setY({\n y: newY,\n immediate: true,\n });\n\n return memo;\n },\n {},\n );\n\n if (!portalRoot) return null;\n\n return ReactDOM.createPortal(\n \n {\n if (onCancel) onCancel();\n }}\n as={animated.div}\n style={{\n opacity: y.interpolate({ range: stops, output: [1, 0] }),\n }}\n />\n `translate3D(0, ${y}px, 0)`),\n }}\n className={className}\n >\n \n {(title || renderHeader) && (\n \n {title && {title}}\n {renderHeader && renderHeader()}\n \n )}\n {children}\n \n ,\n portalRoot,\n );\n};\n\nexport { Drawer };\n","import { MutableRefObject, useEffect } from 'react';\n\nconst useClickAway = (ref: MutableRefObject, handler: (event: Event) => void) => {\n useEffect(() => {\n const callback = (event: Event) => {\n const el = ref.current;\n if (!event || !el || el.contains((event as any).target)) return;\n handler(event);\n };\n\n document.addEventListener('click', callback);\n return () => document.removeEventListener('click', callback);\n }, [ref, handler]);\n};\n\nexport default useClickAway;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { usePopper } from 'react-popper';\nimport PopperJS from '@popperjs/core';\nimport useClickAway from '../../utils/useClickAway';\n\nconst Popper = styled.div`\n z-index: 9;\n`;\n\nfunction getTransformOrigin(placement: PopperJS.Placement) {\n if (['bottom-end', 'bottom-start', 'bottom'].includes(placement)) {\n return '80% 0';\n }\n\n if (['top-end', 'top-start', 'top'].includes(placement)) {\n return '80% 100%';\n }\n}\n\nconst Inner = styled.div<{ isOpen: boolean; placement: PopperJS.Placement }>`\n display: flex;\n flex-direction: column;\n background-color: #ffffff;\n min-width: 10rem;\n border-radius: 0.75rem;\n box-shadow: 0 0.3px 0.3px -4px rgba(0, 0, 0, 0.081), 0 1.1px 2px -4px rgba(0, 0, 0, 0.119),\n 0 5px 10px -4px rgba(0, 0, 0, 0.2);\n\n transform: scale(0.6);\n transform-origin: ${(props) => getTransformOrigin(props.placement)};\n opacity: 0;\n transition: 0.2s cubic-bezier(0.45, 0, 0.21, 1);\n border-bottom: 4px solid transparent;\n\n ${(props) =>\n props.isOpen &&\n `\n transform: scale(1);\n opacity: 1;\n `}\n`;\n\ntype Props = {\n content: () => React.ReactNode;\n placement?: PopperJS.Placement;\n strategy?: PopperJS.PositioningStrategy;\n openOnHover?: boolean;\n closeOnMouseLeave?: boolean;\n offset?: [number, number];\n};\n\nexport const Popover: React.FC = ({\n children,\n content,\n openOnHover = false,\n closeOnMouseLeave = false,\n placement = 'bottom-end',\n strategy = 'absolute',\n offset = [0, 0],\n}) => {\n const referenceElement = React.useRef(null);\n const popperElement = React.useRef(null);\n const [isOpen, setIsOpen] = React.useState(false);\n\n const { styles, attributes } = usePopper(referenceElement.current, popperElement.current, {\n strategy,\n placement,\n modifiers: [\n {\n name: 'offset',\n options: {\n offset,\n },\n },\n ],\n });\n\n useClickAway(popperElement, (event) => {\n if (!event || !referenceElement.current || referenceElement.current.contains((event as any).target)) {\n return;\n }\n setIsOpen(false);\n });\n\n const getTargetProps = () => {\n if (openOnHover) {\n return {\n onMouseEnter: () => setIsOpen(true),\n };\n }\n\n return {\n onClick: () => setIsOpen((open) => !open),\n };\n };\n\n const renderTarget = () => {\n if (!children) return null;\n\n return React.cloneElement(children as any, {\n ref: referenceElement,\n ...getTargetProps(),\n });\n };\n\n return (\n
closeOnMouseLeave && setIsOpen(false)}>\n {renderTarget()}\n \n \n {content()}\n \n \n
\n );\n};\n","import React, { Children } from 'react';\nimport { usePopper } from 'react-popper';\nimport styled from 'styled-components';\nimport PopperJS from '@popperjs/core';\n\nconst Inner = styled.div<{ isOpen: boolean; placement: PopperJS.Placement }>`\n display: flex;\n flex-direction: column;\n background-color: ${(props) => props.theme.colors.label};\n color: ${(props) => props.theme.colors.onLabel};\n padding: 0.5rem;\n border-radius: 0.5rem;\n box-shadow: 0 0.3px 0.3px -4px rgba(0, 0, 0, 0.081), 0 1.1px 2px -4px rgba(0, 0, 0, 0.119),\n 0 5px 10px -4px rgba(0, 0, 0, 0.2);\n\n transform: scale(0.8);\n transform-origin: center;\n opacity: 0;\n transition: 0.2s cubic-bezier(0.45, 0, 0.21, 1);\n\n ${(props) =>\n props.isOpen &&\n `\n transform: scale(1);\n opacity: 1;\n `}\n`;\n\ntype Props = {\n content: React.ReactNode;\n children: React.ReactElement;\n placement?: PopperJS.Placement;\n};\n\nexport const Tooltip: React.FC = ({ children, content, placement = 'bottom' }) => {\n const [isOpen, setIsOpen] = React.useState(false);\n\n const referenceElement = React.useRef(null);\n const popperElement = React.useRef(null);\n\n const { styles, attributes } = usePopper(referenceElement.current, popperElement.current, {\n placement: placement,\n modifiers: [\n {\n name: 'offset',\n options: {\n offset: [4, 4],\n },\n },\n ],\n });\n\n const renderTarget = () => {\n const target = Children.only(children);\n\n return React.cloneElement(target, {\n ref: referenceElement,\n onMouseEnter: () => window.innerWidth >= 1024 && setIsOpen(true),\n });\n };\n\n return (\n
setIsOpen(false)}>\n {renderTarget()}\n\n
\n \n {content}\n \n
\n
\n );\n};\n","import React from 'react';\nimport styled, { StyledComponent } from 'styled-components';\n\ninterface IListComposition {\n Item: StyledComponent<'li', any, {}, never>;\n}\n\nconst OrderdList = styled.ol``;\n\nconst UnorderdList = styled.ul``;\n\ntype UnorderdListProps = { type: 'unorderd' };\ntype OrderdListProps = { type: 'orderd' };\n\ntype Props = UnorderdListProps | OrderdListProps;\n\nconst List: React.FC & IListComposition = ({ type, children }) => {\n if (type === 'orderd') return {children};\n return {children};\n};\n\nList.Item = styled.li`\n padding: 0.25rem 0;\n height: 2rem;\n display: flex;\n align-items: center;\n`;\n\nexport { List };\n","import styled from 'styled-components';\n\nexport const Card = styled.div`\n background: ${(props) => props.theme.colors.background};\n border: 1px solid ${(props) => props.theme.colors.border};\n border-radius: 1.5rem;\n padding: 1rem;\n`;\n\nexport const ElevatedCard = styled(Card)`\n /* box-shadow: 0 4px 2.9px rgba(0, 0, 0, 0.012), 0 13.4px 9.6px rgba(0, 0, 0, 0.018), 0 60px 43px rgba(0, 0, 0, 0.03); */\n box-shadow: 0 0.8px 2.1px rgba(0, 0, 0, 0.02), 0 2.7px 6.9px rgba(0, 0, 0, 0.03), 0 12px 31px rgba(0, 0, 0, 0.05);\n background: ${(props) => props.theme.colors.cardBackground};\n border: 0;\n`;\n","import styled from 'styled-components';\n\nconst Seperator = styled.span<{ direction?: 'horizontal' | 'vertical'; margin?: string }>`\n margin: ${(props) =>\n props.direction === 'vertical'\n ? props.margin\n ? `0 ${props.margin}`\n : '0 2rem'\n : props.margin\n ? `${props.margin} 0`\n : '2rem 0'};\n width: 100%;\n display: flex;\n height: 1px;\n background: ${(props) => props.theme.colors.border};\n\n ${(props) =>\n props.direction === 'vertical' &&\n `\n width: 1px;\n align-self: stretch;\n height: initial;\n `}\n`;\n\nexport { Seperator };\n","import React from 'react';\nimport styled from 'styled-components';\n\ntype Rest = React.DetailedHTMLProps, HTMLInputElement>;\ntype Props = Rest & {\n label: string;\n};\n\nconst Styled = styled.label`\n cursor: pointer;\n background-color: ${(props) => props.theme.colors.primary};\n border-radius: 999rem;\n padding: 0.5rem 1rem 0.5rem 0.5rem;\n\n input[type='radio'] {\n display: none;\n }\n\n span {\n display: flex;\n align-items: center;\n color: ${(props) => props.theme.colors.onLabel};\n position: relative;\n }\n\n span:before {\n content: '';\n width: 18px;\n height: 18px;\n margin-right: 0.75rem;\n border-radius: 50%;\n display: flex;\n justify-content: center;\n align-items: center;\n border: 2px solid ${(props) => props.theme.colors.border};\n }\n\n span:after {\n content: '';\n opacity: 0;\n background-size: contain;\n background-position: center;\n width: 10px;\n height: 10px;\n left: 4px;\n top: 4px;\n position: absolute;\n border: 2px solid transparent;\n background-color: ${(props) => props.theme.colors.onLabel};\n border-radius: 50%;\n }\n\n input:checked ~ span::after {\n opacity: 1;\n }\n`;\n\nconst Pill: React.FC = ({ label, ...rest }) => {\n return (\n \n \n {label}\n \n );\n};\n\nexport { Pill };\n","import React from 'react';\nimport { Label } from '..';\nimport styled from 'styled-components';\n\ntype Props = {\n label: string;\n value: string;\n};\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n\n ${Label}:first-child {\n margin-bottom: 0.5rem;\n }\n`;\n\nconst ValueLabel: React.FC = ({ label, value }) => {\n return (\n \n \n\n \n \n );\n};\n\nexport { ValueLabel };\n","const defaultColors = [\n '#e51c23',\n '#e91e63',\n '#9c27b0',\n '#673ab7',\n '#3f51b5',\n '#5677fc',\n '#03a9f4',\n '#00bcd4',\n '#009688',\n '#259b24',\n '#8bc34a',\n '#afb42b',\n '#ff9800',\n '#ff5722',\n '#795548',\n '#607d8b',\n];\n\nexport default function getColorFromString(value: string, colors: undefined | string[] = defaultColors) {\n var hash = 0;\n if (value.length === 0) return hash;\n for (var i = 0; i < value.length; i++) {\n hash = value.charCodeAt(i) + ((hash << 5) - hash);\n hash = hash & hash;\n }\n hash = ((hash % colors.length) + colors.length) % colors.length;\n return colors[hash];\n}\n","import React from 'react';\nimport styled from 'styled-components';\nimport initials from 'initials';\nimport getColorFromString from '../../utils/getColorFromString';\n\nconst Container = styled.div<{ size: number | string; highlighted: boolean; additional: boolean }>`\n img {\n width: 100%;\n height: 100%;\n margin: 2px;\n border-radius: 1rem;\n }\n\n div {\n width: ${(props) => props.size};\n height: ${(props) => props.size};\n border-radius: 1rem;\n display: flex;\n align-items: center;\n justify-content: center;\n border: ${(props) => (props.highlighted ? `2px solid ${props.theme.colors.primary}` : '0')};\n color: ${(props) => (props.additional ? props.theme.colors.primary : /*props.theme.colors.onLabel*/ 'white')};\n filter: ${(props) => (props.additional ? 'none' : props.theme.modifiers.colorModifier)};\n }\n`;\n\ntype Props = {\n name: string;\n size?: number | string;\n highlighted?: boolean;\n image?: string;\n additional?: boolean;\n};\n\nconst Avatar: React.FC = ({ name, size = '3rem', highlighted = false, image, additional = false, ...rest }) => {\n return (\n \n {additional ? (\n
\n {name}\n
\n ) : (\n
\n {image ? {name} : initials(name.replace(' (Gast)', ''))}\n
\n )}\n
\n );\n};\n\nexport { Avatar };\n","import React from 'react';\nimport styled from 'styled-components';\n\ntype Props = {\n tabs: string[];\n activeTab: string;\n handleSelect: (tab: string) => void;\n};\n\nconst Container = styled.div`\n display: flex;\n border: 1px solid ${(props) => props.theme.colors.border};\n`;\n\nconst SelectorItem = styled.div<{ toggled: boolean }>`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 3rem;\n background-color: ${(props) => (props.toggled ? props.theme.colors.primary : props.theme.colors.faded)};\n color: white;\n`;\n\nconst Selector: React.FC = ({ tabs, activeTab, handleSelect }) => {\n return (\n \n {tabs.map((tab, index) => (\n handleSelect(tab)}\n >\n {tab}\n \n ))}\n \n );\n};\n\nexport { Selector };\n","import { IconButton } from '..';\nimport styled from 'styled-components';\n\nexport const OvalButton = styled(IconButton.Minimal)`\n width: 2rem;\n height: 2rem;\n border-radius: 50%;\n border: 1px solid ${(props) => props.theme.colors.border};\n color: ${(props) => props.theme.colors.muted};\n\n &:hover {\n background: ${(props) => props.theme.colors.primary};\n\n svg {\n color: white;\n }\n }\n\n svg {\n width: 1rem;\n height: 1rem;\n }\n`;\n","import styled from 'styled-components';\nexport const Container = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: 1.5rem;\n margin-left: auto;\n margin-right: auto;\n\n @media screen and (max-width: 64em) {\n padding: 1rem;\n }\n`;\n","import { HTMLAttributes } from 'react';\nimport styled from 'styled-components';\n\nexport type StepsProps = Omit, 'onClick'> & {\n amount: number;\n current: number;\n onClick?: (index: number) => void;\n};\n\nconst StyledSteps = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n position: relative;\n user-select: none;\n\n &:after {\n content: '';\n width: calc(100% - 1.5rem);\n left: 0.75rem;\n height: 1px;\n background: ${(props) => props.theme.colors.inputBorder};\n display: block;\n position: absolute;\n top: 50%;\n left: 0;\n }\n .step {\n cursor: default;\n font-size: 0.75rem;\n color: ${(props) => props.theme.colors.faded};\n width: 1.5rem;\n height: 1.5rem;\n border: 1px solid ${(props) => props.theme.colors.inputBorder};\n background: ${(props) => props.theme.colors.background};\n border-radius: 1.5rem;\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n position: relative;\n z-index: 2;\n }\n /* .step.done {\n cursor: pointer;\n } */\n .step.current {\n background: ${(props) => props.theme.colors.primary};\n border-color: ${(props) => props.theme.colors.primary};\n color: ${(props) => props.theme.colors.onLabel};\n font-weight: 600;\n }\n`;\n\nfunction Steps({ amount, current, className = '', onClick }: StepsProps) {\n const handleOnClick = (step: number) => {\n if (onClick) {\n onClick(step + 1);\n }\n };\n\n return (\n \n {Array.from(Array(amount)).map((_, i) => (\n handleOnClick(i + 1)}\n className={`step ${current === i + 1 ? 'current' : ''} ${i < current ? 'done' : ''}`}\n key={i}\n >\n {i + 1}\n
\n ))}\n \n );\n}\n\nexport { Steps };\n","import React from 'react';\nimport { DefaultTheme, useTheme } from 'styled-components';\n\ntype Props = {\n radius: number;\n stroke: number;\n progress: number;\n};\n\nfunction getStokeColor(theme: DefaultTheme, progress: number) {\n if (progress === 100) {\n return theme.colors.error;\n }\n if (progress > 80) {\n return theme.colors.warning;\n }\n\n return theme.colors.success;\n}\n\nexport const ProgressRing: React.FC = ({ radius, stroke, progress }) => {\n const normalizedRadius = radius - stroke * 2;\n const circumference = normalizedRadius * 2 * Math.PI;\n const strokeDashoffset = circumference - (progress / 100) * circumference;\n const theme = useTheme();\n\n return (\n \n \n \n \n );\n};\n","import moment, { Moment } from 'moment';\n\ntype Row = { days: Moment[] };\n\nexport function generateRowsForMonthView(month: number, year: number, generateWeekends: boolean = true): Row[] {\n const firstDayOfMonth = moment()\n .month(month - 1)\n .year(year)\n .date(1);\n\n let rows: Row[] = [];\n const startDay = firstDayOfMonth.clone().startOf('month').startOf('week');\n const endDay = firstDayOfMonth.clone().endOf('month').endOf('week');\n\n let date = startDay.clone();\n\n while (date.isBefore(endDay, 'day')) {\n let days: Moment[] = [];\n\n Array(7)\n .fill(0)\n .forEach(() => {\n days.push(date.clone());\n date.add(1, 'day');\n });\n\n // Remove Saturday and Sundays if needed\n if (!generateWeekends) {\n days = days.filter((day) => !isWeekend(day));\n }\n\n // Remove a week if none of the days are in the current month\n let anyInCurrentMonth = false;\n days.forEach((x) => {\n if (anyInCurrentMonth) return;\n\n if (x.month() === month - 1) {\n anyInCurrentMonth = true;\n }\n });\n\n // Add the week if any of the days are in the current month\n if (anyInCurrentMonth) {\n rows.push({ days });\n }\n }\n\n return rows;\n}\n\nexport function generateDaysInMonth(month: number, year: number): Moment[] {\n const firstDayOfMonth = moment()\n .month(month - 1)\n .year(year)\n .date(1);\n\n const days = new Array(firstDayOfMonth.daysInMonth())\n .fill(null)\n .map((x, i) => firstDayOfMonth.clone().startOf('month').add(i, 'days'));\n\n return days;\n}\n\nexport function isWeekend(date: Moment) {\n var day = date.day();\n return day === 6 || day === 0;\n}\n\nexport function datesGroupByComponent(dates: Moment[], token: string) {\n return dates.reduce<{ [key: string]: Moment[] }>(function (val, obj) {\n let comp = obj.format(token);\n (val[comp] = val[comp] || []).push(obj);\n return val;\n }, {});\n}\n","export const formatNumber = (locale: string, value: number) => {\n return new Intl.NumberFormat(`${locale}`).format(value);\n};\n","import { Dictionary } from 'lodash';\nimport moment, { Moment } from 'moment';\nimport React from 'react';\nimport { useSelector } from 'react-redux';\nimport styled, { css } from 'styled-components';\nimport { Office, Planning, PlanningUser, RootState } from '../../global';\nimport { ElevatedCard, ProgressRing } from '../../ui';\nimport { generateRowsForMonthView } from '../../utils/calendar';\nimport { formatNumber } from '../../utils/numberFormatter';\n\nconst OuterWrapper = styled.div`\n width: clamp(300px, 100%, 1000px);\n margin: 0 auto;\n`;\n\nconst MonthWrapper = styled(ElevatedCard)<{ renderWeekend: boolean }>`\n will-change: transform, opacity;\n grid-template-columns: repeat(${(props) => (props.renderWeekend ? 7 : 5)}, minmax(0, 1fr));\n grid-auto-rows: auto repeat(99, minmax(0, 1fr));\n background: ${(props) => props.theme.colors.border};\n padding: 0;\n overflow: hidden;\n margin-bottom: 2rem;\n\n @media screen and (max-width: 114em) {\n grid-template-columns: repeat(5, minmax(0, 1fr));\n }\n\n @media screen and (min-width: 1024px) {\n width: calc(100% - 3rem);\n margin-left: auto;\n margin-right: auto;\n }\n\n display: grid;\n gap: 1px;\n padding: 0 1px 1px 1px;\n`;\n\nconst MonthCell = styled.div<{\n isDisabled: boolean;\n isHighlighted: boolean;\n isFull?: boolean;\n borderRadiusBottomLeft?: boolean;\n borderRadiusBottomRight?: boolean;\n}>`\n background: ${(props) => props.theme.colors.cardBackground};\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: auto;\n position: relative;\n padding: 0.25rem 1rem 0.75rem;\n cursor: pointer;\n\n @media screen and (max-width: 1280px) {\n padding: 0.25rem 0 0.75rem;\n div {\n font-size: 0.75rem;\n }\n }\n\n aspect-ratio: 5 / 3;\n max-width: 200px;\n\n ${(props) =>\n props.borderRadiusBottomLeft &&\n css`\n border-bottom-left-radius: 1.5rem;\n &:before {\n border-bottom-left-radius: 1.5rem;\n }\n `};\n ${(props) =>\n props.borderRadiusBottomRight &&\n css`\n border-bottom-right-radius: 1.5rem;\n &:before {\n border-bottom-right-radius: 1.5rem;\n }\n `};\n\n @media screen and (min-width: 1280px) {\n div {\n font-size: 0.9rem;\n }\n }\n\n ${(props) =>\n props.isDisabled &&\n css`\n & > *,\n & > *:before {\n opacity: 0.4;\n }\n `}\n\n ${(props) =>\n props.isFull &&\n !props.isHighlighted &&\n css`\n z-index: 0;\n opacity: 0.5;\n &:before {\n content: '';\n position: absolute;\n inset: -1px;\n box-shadow: inset 0 0 0 0.5px ${(props) => props.theme.colors.muted};\n background: ${(props) => props.theme.colors.faded + '20'};\n z-index: -1;\n }\n `}\n\n ${(props) =>\n props.isHighlighted &&\n css`\n z-index: 0;\n\n &:before {\n content: '';\n position: absolute;\n inset: -1px;\n box-shadow: inset 0 0 0 0.5px ${(props) => props.theme.colors.primary};\n background: ${(props) => props.theme.colors.primary + '20'};\n z-index: -1;\n }\n\n > div,\n > span {\n z-index: 1;\n }\n `}\n`;\n\nconst MonthCellOccupationIndicator = styled.div`\n width: fit-content;\n height: 3rem;\n position: relative;\n margin-left: auto;\n margin-right: auto;\n flex-wrap: wrap;\n gap: 0.2rem;\n justify-content: space-around;\n align-items: center;\n`;\n\nconst MonthCellDate = styled.span<{ isToday: boolean }>`\n display: flex;\n width: 2.25rem;\n height: 2.25rem;\n flex-shrink: 0;\n justify-content: center;\n align-items: center;\n font-size: 0.9125rem;\n\n @media screen and (max-width: 1280px) {\n width: 1.75rem;\n height: 1.75rem;\n font-size: 0.8125rem;\n }\n ${(props) =>\n props.isToday &&\n css`\n color: #fff;\n background-color: ${(props) => props.theme.colors.primary};\n border-radius: 999rem;\n font-weight: 700;\n `}\n`;\n\nconst MonthCellSmall = styled(MonthCell)`\n aspect-ratio: unset;\n padding: 1rem;\n > span {\n margin-bottom: 0;\n }\n`;\n\ntype Props = {\n month: number;\n year: number;\n selectDate?: (date: Moment) => void;\n indexedPlannings: Dictionary;\n offices: Office[];\n};\n\nconst Month: React.FC = ({ month, year, selectDate, offices, indexedPlannings }) => {\n const { user } = useSelector((state: RootState) => state.user);\n\n if (!user) return null;\n\n const rows = generateRowsForMonthView(month, year, false);\n\n const hasOffices = offices.length > 0;\n\n const handleSelectDate = (date: Moment) => {\n if (selectDate && date.month() === month - 1 && hasOffices) {\n selectDate(date);\n }\n };\n\n const renderCell = (date: Moment, rowIndex: number) => {\n // Not good, working on a better solution.\n const key = Object.keys(indexedPlannings).find((p) => moment(p).isSame(date, 'date'));\n const dayParts = key ? indexedPlannings[key] : [];\n\n const slotsFilled = dayParts.reduce((a, b) => a + b.signedInUsers.length, 0);\n const slots = offices.reduce((a, b) => a + b.seats, 0) * 2;\n const users = dayParts.reduce((a, b) => [...a, ...b.signedInUsers], []);\n const hasCurrentUser = users.findIndex((u) => u.uuid === user.uuid) !== -1;\n\n const progress = slotsFilled / slots;\n\n return (\n handleSelectDate(date)}\n isDisabled={date.isBefore(moment(), 'date')}\n isHighlighted={hasCurrentUser}\n isFull={progress >= 1}\n borderRadiusBottomLeft={rowIndex === rows.length - 1 && date.format('d') === '1'}\n borderRadiusBottomRight={\n rowIndex === rows.length - 1 && date.format('d') === rows[rowIndex].days.length.toString()\n }\n >\n {date.month() === month - 1 ? (\n <>\n {date.format('DD')}\n \n \n \n {hasOffices && date.month() === month - 1 && (\n
{`${formatNumber('nl-NL', slotsFilled / 2)} / ${formatNumber('nl-NL', slots / 2)}`}
\n )}\n \n ) : (\n <>\n \n \n \n )}\n \n );\n };\n\n return (\n \n \n {rows[0].days.map((day, index) => (\n \n {day.format('dd')}\n \n ))}\n {rows.map((row, index) => (\n {row.days.map((day, i) => renderCell(day, index))}\n ))}\n \n \n );\n};\n\nexport default Month;\n","import React from 'react';\nimport { Avatar as AvatarType } from '../global';\nimport { Avatar, Label, Tooltip } from '../ui';\nimport styled from 'styled-components';\n\ntype Rest = React.DetailedHTMLProps, HTMLInputElement>;\n\ntype Props = Rest & {\n maxLength?: number;\n avatars: AvatarType[];\n};\n\nconst Additional = styled.div`\n width: 3rem;\n height: 3rem;\n border-radius: 1rem;\n background: ${(props) => props.theme.colors.disabled};\n color: ${(props) => props.theme.colors.disabledText};\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst Container = styled.div`\n margin-right: 0.5rem;\n`;\n\nconst AvatarGroup: React.FC = ({ avatars, style, maxLength, ...rest }) => {\n const additional = maxLength ? avatars.length - maxLength : 0;\n\n return (\n
\n {additional <= 0 &&\n avatars.map((avatar, index) => {\n return (\n {avatar.name}} key={index}>\n \n \n \n \n );\n })}\n\n {additional > 0 && (\n <>\n {avatars.slice(0, avatars.length - additional).map((avatar, index) => (\n {avatar.name}} key={index}>\n \n \n \n \n ))}\n \n \n \n \n )}\n
\n );\n};\n\nexport default AvatarGroup;\n","import React, { Key } from 'react';\nimport styled, { css } from 'styled-components';\nimport { ElevatedCard, Heading, Label } from '../../ui';\nimport { ProgressRing } from '../../ui';\nimport { PlanningUser } from '../../global';\nimport DefaultAvatarGroup from '../AvatarGroup';\nimport { Today } from '@styled-icons/material-outlined';\n\nconst Card = styled(ElevatedCard)<{ highlighted: boolean; isFull?: boolean }>`\n display: flex;\n flex-direction: column;\n align-items: stretch;\n padding: 2rem;\n position: relative;\n overflow: hidden;\n cursor: pointer;\n text-align: left;\n\n .holidayName {\n background: ${(props) => props.theme.colors.primary + '33'};\n color: ${(props) => props.theme.colors.primary};\n font-size: 0.7em;\n font-weight: lighter;\n padding: 0.2em 0.5em;\n border-radius: 0.5em;\n }\n\n ${(props) =>\n props.isFull &&\n !props.highlighted &&\n css`\n z-index: 0;\n &:after {\n content: '';\n position: absolute;\n inset: 0;\n background: ${(props) => props.theme.colors.faded + '20'};\n border: 1px solid ${(props) => props.theme.colors.muted};\n border-radius: 1.5rem;\n z-index: -1;\n }\n `};\n\n ${(props) =>\n props.highlighted &&\n css`\n z-index: 0;\n &:after {\n content: '';\n position: absolute;\n inset: 0;\n background: ${(props) => props.theme.colors.primary + '20'};\n z-index: -1;\n border: 1px solid ${(props) => props.theme.colors.primary};\n border-radius: 1.5rem;\n }\n `};\n\n h4 {\n margin-bottom: 0.5rem;\n max-width: calc(100% - 5rem);\n display: flex;\n flex-wrap: wrap;\n gap: 0 0.5rem;\n align-items: center;\n }\n`;\n\nconst AvatarGroup = styled(DefaultAvatarGroup)`\n margin-top: 1rem;\n max-width: 100%;\n`;\n\nconst CardPlanning = styled(Label).attrs((props) => ({ type: 'muted' }))`\n display: flex;\n align-items: center;\n margin-bottom: 0.25rem;\n font-weight: 300;\n font-size: 0.875rem;\n color: ${(props) => props.theme.colors.label};\n\n svg {\n width: 1em;\n margin-right: 0.5rem;\n }\n`;\n\nconst CardRing = styled.div`\n display: flex;\n align-items: center;\n position: absolute;\n right: 2rem;\n top: 2rem;\n margin-top: -0.25rem;\n margin-right: -0.375rem;\n`;\n\nconst ReservationListItem = styled.li`\n list-style: none;\n > button {\n width: 100%;\n height: 100%;\n }\n`;\n\nexport type ReservationCardProps = {\n title: string;\n subtitle?: string;\n planningTitle?: string;\n users: PlanningUser[];\n slots: number;\n slotsFilled: number;\n onClick: () => void;\n className?: string;\n highlighted?: boolean;\n holidays?: moment.Holiday[];\n asListItem?: boolean;\n};\n\nconst ReservationCard: React.FC = (props) => {\n const {\n title,\n subtitle,\n users,\n slots,\n slotsFilled,\n onClick,\n highlighted = false,\n className,\n planningTitle,\n holidays = false,\n asListItem = false,\n } = props;\n\n const card = (\n = 1}\n className={className}\n >\n {highlighted ? Geselecteerd : null}\n\n \n {title}{' '}\n {holidays\n ? holidays.map((holiday, i: Key) => (\n \n {holiday.name}\n \n ))\n : null}\n \n {planningTitle && (\n \n \n {planningTitle}\n \n )}\n {subtitle && (\n \n )}\n \n \n \n \n ({ name: user.name }))} maxLength={4} />\n \n );\n\n if (asListItem) {\n return {card};\n }\n\n return card;\n};\n\nexport default ReservationCard;\n","import { Dictionary, uniqBy } from 'lodash';\nimport moment from 'moment';\nimport { Moment } from 'moment';\nimport React from 'react';\nimport { useSelector } from 'react-redux';\nimport styled from 'styled-components';\nimport ReservationCard from '../../components/ReservationCard/ReservationCard';\nimport { Planning, Office, PlanningUser, RootState } from '../../global';\n\nconst OfficesList = styled.div`\n display: grid;\n gap: 1.5rem;\n margin-top: 1.5rem;\n grid-template-columns: repeat(auto-fill, minmax(min(20rem, 100%), 1fr));\n`;\n\ntype Props = {\n selectedDate: Moment;\n indexedPlannings: Dictionary;\n offices: Office[];\n selectOffice: (officeUuid: string) => void;\n};\n\nconst Offices: React.FC = ({ offices, selectedDate, indexedPlannings, selectOffice }) => {\n const { user } = useSelector((state: RootState) => state.user);\n\n if (!user) return null;\n\n return (\n \n {offices.map((office) => {\n // Not good, working on a better solution.\n const key = Object.keys(indexedPlannings).find((p) => moment(p).isSame(selectedDate, 'date'));\n const dayParts = (key ? indexedPlannings[key] : []).filter((d) => d.officeUuid === office.uuid);\n\n const slotsFilled = dayParts.reduce((a, b) => a + b.signedInUsers.length, 0);\n const users = uniqBy(\n dayParts.reduce((a, b) => [...a, ...b.signedInUsers], []),\n 'uuid',\n );\n const hasCurrentUser = users.findIndex((u) => u.uuid === user.uuid) !== -1;\n const hasCurrentUserPerDayPart = dayParts.reduce<{ 0: boolean; 1: boolean }>(\n (a, b) => {\n if (b.signedInUsers.findIndex((u) => u.uuid === user.uuid) !== -1) {\n return { ...a, [b.dayPart]: true };\n }\n return a;\n },\n { 0: false, 1: false },\n );\n\n const planningTitle =\n hasCurrentUserPerDayPart[0] === true && hasCurrentUserPerDayPart[1] === true\n ? 'Hele dag'\n : hasCurrentUserPerDayPart[0] === true\n ? '08:00 - 13:00'\n : hasCurrentUserPerDayPart[1] === true\n ? '13:00 - 18:00'\n : undefined;\n\n const slots = office.seats * 2;\n\n return (\n selectOffice(office.uuid)}\n slots={slots / 2}\n slotsFilled={slotsFilled / 2}\n title={office.name}\n users={users}\n highlighted={hasCurrentUser}\n planningTitle={planningTitle}\n />\n );\n })}\n \n );\n};\nexport default Offices;\n","import { ThunkAction } from 'redux-thunk';\nimport axios from 'axios';\nimport { User, RootState } from '../../global';\nimport { UserStateAction } from '.';\nimport { AllUserStateAction } from './allUsersReducer';\nimport { toast } from 'react-toastify';\n\ntype AllUsersThunk = ThunkAction;\ntype UserThunk = ThunkAction;\n\ntype UserResponse = {\n uuid: string;\n name: string;\n maxCredits: number;\n credits: number;\n timesVisited: number;\n voorkeurslocatie: {\n uuid: string;\n naam: string;\n };\n roles: string[];\n};\n\ntype UsersResponse = {\n uuid: string;\n name: string;\n maxCredits: number;\n credits: number;\n timesVisited: number;\n voorkeurslocatieNaam: string;\n};\n\nexport const fetchUser = (): UserThunk> => async (dispatch, getState) => {\n dispatch({ type: 'FETCH_USER_REQUEST' });\n\n const response = await axios.get(`/api/Users/me`).catch((e) => {\n dispatch({ type: 'FETCH_USER_FAILED' });\n return Promise.reject(e.response);\n });\n\n if (response) {\n const user: User = {\n credits: response.data.credits,\n maxCredits: response.data.maxCredits,\n name: response.data.name,\n preferredLocation: response.data.voorkeurslocatie\n ? {\n name: response.data.voorkeurslocatie.naam,\n uuid: response.data.voorkeurslocatie.uuid,\n }\n : null,\n timesVisited: response.data.timesVisited,\n uuid: response.data.uuid,\n roles: response.data.roles || [],\n };\n dispatch({ type: 'FETCH_USER_SUCCESS', payload: user });\n return Promise.resolve(user);\n }\n};\n\nexport const createUser = (): UserThunk> => async () => {\n await axios({\n method: 'POST',\n url: `/api/Users`,\n data: {},\n }).catch((e) => Promise.reject(e.response));\n\n return Promise.resolve();\n};\n\nexport const updateUser =\n ({ preferredLocationUuid }: { preferredLocationUuid: string }): UserThunk> =>\n async (dispatch, getState) => {\n const uuid = getState().user.user?.uuid;\n\n if (!uuid) {\n return Promise.reject();\n }\n\n const response = await axios({\n method: 'PATCH',\n url: `/api/Users/${uuid}`,\n data: {\n voorkeurslocatieUuid: preferredLocationUuid,\n },\n }).catch(() => Promise.reject());\n\n if (response) {\n dispatch(fetchUser());\n Promise.resolve();\n }\n };\n\nexport const fetchAllUsers = (): AllUsersThunk => async (dispatch, getState) => {\n dispatch({ type: 'FETCH_USERS_REQUEST' });\n\n const response = await axios.get(`/api/Users`).catch((e) => {\n dispatch({ type: 'FETCH_USERS_FAILED' });\n toast.error(e.response?.data || 'Er is iets fout gegaan tijdens het ophalen van de users.');\n });\n\n if (response) {\n const users: User[] = response.data.map((response) => ({\n credits: response.credits,\n maxCredits: response.maxCredits,\n name: response.name,\n preferredLocation: {\n name: response.voorkeurslocatieNaam,\n },\n timesVisited: response.timesVisited,\n uuid: response.uuid,\n roles: [],\n }));\n\n dispatch({\n type: 'FETCH_USERS_SUCCESS',\n payload: users,\n });\n }\n};\n","import { Reducer } from 'redux';\nimport { User } from '../../global';\n\ntype FETCH_USER_REQUEST = { type: 'FETCH_USER_REQUEST' };\ntype FETCH_USER_SUCCESS = { type: 'FETCH_USER_SUCCESS'; payload: User };\ntype FETCH_USER_FAILED = { type: 'FETCH_USER_FAILED' };\n\nexport type UserState = {\n user: User | null;\n loading: boolean;\n success: boolean;\n error: boolean;\n};\n\nexport type UserStateAction = FETCH_USER_REQUEST | FETCH_USER_SUCCESS | FETCH_USER_FAILED;\n\nexport const initialState: UserState = {\n user: null,\n loading: true,\n success: false,\n error: false,\n};\n\nconst userReducer: Reducer = (state = initialState, action) => {\n switch (action.type) {\n case 'FETCH_USER_REQUEST':\n return { ...state, success: false, loading: true, error: false };\n case 'FETCH_USER_SUCCESS':\n return {\n ...state,\n success: true,\n loading: false,\n error: false,\n user: action.payload,\n };\n case 'FETCH_USER_FAILED':\n return {\n ...state,\n success: false,\n error: true,\n loading: false,\n user: null,\n };\n default:\n return state;\n }\n};\n\nexport { fetchUser, fetchAllUsers, updateUser, createUser } from './thunks';\nexport default userReducer;\n","import { Planning } from '../../global';\n\ntype PlanningsCache = {\n [key: string]: {\n key: string;\n timestamp: Date;\n data: Planning[];\n };\n};\n\nexport const planningsCache: PlanningsCache = {};\n","export enum DayPart {\n Morning = 'Morning',\n Midday = 'Midday',\n FullDay = 'FullDay',\n}\n","import { ThunkAction } from 'redux-thunk';\nimport axios from 'axios';\nimport { Planning, Reservation, RootState } from '../../global';\nimport { ReservationsStateAction } from '.';\nimport { toast } from 'react-toastify';\nimport { DayPart } from '../../enums';\n\ntype PlanningsResponse = {\n uuid: string;\n date: string;\n dayPart: string;\n signedInUsers: {\n uuid: string;\n name: string;\n }[];\n locatie: {\n locatieUuid: string;\n locatieNaam: string;\n ruimteUuid: string;\n ruimteNaam: string;\n };\n isCompleted: boolean;\n};\n\ntype ReservationsThunk = ThunkAction;\n\ntype FetchReservationsProps = {\n month?: number;\n year?: number;\n userUuid?: string;\n officeUuid?: string;\n};\n\nlet cache: {\n [key: string]: {\n data: Planning[];\n timestamp: Date;\n };\n} = {};\n\nexport const fetchReservations =\n (props: FetchReservationsProps = {}, useCache: boolean = true): ReservationsThunk =>\n async (dispatch, getState) => {\n const params = Object.entries(props).map(([key, value]) => typeof value !== 'undefined' && `${key}=${value}`);\n const url = `/api/Plannings?${params.join('&')}`;\n const key = btoa(url);\n\n if (cache[key] && useCache) {\n const data: Reservation[] = cache[key].data;\n return dispatch({ type: 'FETCH_RESERVATIONS_SUCCESS', payload: data });\n }\n\n dispatch({ type: 'FETCH_RESERVATIONS_REQUEST' });\n\n const response = await axios.get(url).catch((e) => {\n toast.error(e.response?.data || 'Er is iets fout gegaan tijdens het ophalen van de kantoren.');\n dispatch({ type: 'FETCH_RESERVATIONS_FAILED' });\n });\n\n if (response) {\n const reservations: Reservation[] = response.data.map((planning) => ({\n date: planning.date,\n dayPart: DayPart[planning.dayPart as keyof typeof DayPart],\n signedInUsers: planning.signedInUsers,\n isCompleted: planning.isCompleted,\n locationUuid: planning.locatie.locatieUuid,\n locationName: planning.locatie.locatieNaam,\n officeUuid: planning.locatie.ruimteUuid,\n officeName: planning.locatie.ruimteNaam,\n uuid: planning.uuid,\n }));\n\n cache[key] = {\n data: reservations,\n timestamp: new Date(),\n };\n\n dispatch({ type: 'FETCH_RESERVATIONS_SUCCESS', payload: reservations });\n }\n };\n","import { Reducer } from 'redux';\nimport { Reservation } from '../../global';\n\ntype FETCH_RESERVATIONS_REQUEST = { type: 'FETCH_RESERVATIONS_REQUEST' };\ntype FETCH_RESERVATIONS_SUCCESS = { type: 'FETCH_RESERVATIONS_SUCCESS'; payload: Reservation[] };\ntype FETCH_RESERVATIONS_FAILED = { type: 'FETCH_RESERVATIONS_FAILED' };\n\nexport type ReservationsStateAction =\n | FETCH_RESERVATIONS_REQUEST\n | FETCH_RESERVATIONS_SUCCESS\n | FETCH_RESERVATIONS_FAILED;\n\nexport type ReservationsState = {\n state: ReservationsNewtorkState;\n reservations: Reservation[];\n};\n\nenum ReservationsNewtorkState {\n FETCHING = 'FETCHING',\n ERROR = 'ERROR',\n UPDATING = 'UPDATING',\n SUCCESS = 'SUCCESS',\n IDLE = 'IDLE',\n}\n\nconst initialState: ReservationsState = {\n state: ReservationsNewtorkState.IDLE,\n reservations: [],\n};\n\nconst reservationsReducer: Reducer = (state = initialState, action) => {\n switch (action.type) {\n case 'FETCH_RESERVATIONS_REQUEST':\n return {\n ...state,\n state:\n state.state === ReservationsNewtorkState.IDLE\n ? ReservationsNewtorkState.FETCHING\n : ReservationsNewtorkState.UPDATING,\n };\n case 'FETCH_RESERVATIONS_SUCCESS':\n return {\n ...state,\n state: ReservationsNewtorkState.SUCCESS,\n reservations: action.payload,\n };\n case 'FETCH_RESERVATIONS_FAILED':\n return { ...state, state: ReservationsNewtorkState.ERROR };\n default:\n return state;\n }\n};\n\nexport { fetchReservations } from './thunks';\nexport default reservationsReducer;\n","import { ThunkAction } from 'redux-thunk';\nimport axios, { AxiosRequestConfig } from 'axios';\nimport { Guest, Planning, PlanningUser, RootState } from '../../global';\nimport { PlanningStateAction } from '.';\nimport { toast } from 'react-toastify';\nimport { Moment } from 'moment';\nimport { fetchUser } from '../users';\nimport { planningsCache } from './cache';\nimport { fetchReservations } from '../reservations';\nimport { PlanningPopupStateAction } from '../planningPopup';\nimport { DayPart } from '../../enums';\n\ntype PlanningsResponse = {\n uuid: string;\n date: string;\n dayPart: DayPart;\n signedInUsers: {\n uuid: string;\n name: string;\n }[];\n gasten: {\n uuid: string;\n naam: string;\n emailadres: string;\n ingechecktOp: Date;\n gastbegeleider: {\n uuid: string;\n naam: string;\n };\n }[];\n locatie: {\n locatieUuid: string;\n locatieNaam: string;\n ruimteUuid: string;\n ruimteNaam: string;\n };\n isCompleted: boolean;\n};\n\ntype PlanningThunk = ThunkAction;\n\ntype FetchPlanningBlockProps = {\n officeUuid: string;\n month: number;\n year: number;\n};\n\nlet isFetching: string[] = [];\n\nexport const fetchPlanningBlock =\n (props: FetchPlanningBlockProps, useCache: boolean = true): PlanningThunk =>\n async (dispatch) => {\n const { officeUuid, month, year } = props;\n\n const url = `/api/Ruimtes/${officeUuid}/reserveringen?month=${month}&year=${year}`;\n\n if (url in planningsCache && useCache) return;\n\n if (isFetching.includes(url)) return;\n\n isFetching.push(url);\n\n dispatch({\n type: 'FETCH_PLANNING_BLOCK_REQUEST',\n payload: { officeUuid, month, year },\n });\n\n const response = await axios\n .get(url)\n .catch((e) => {\n toast.error(e.response?.data || 'Er is iets fout gegaan tijdens het ophalen van de kantoren.');\n dispatch({\n type: 'FETCH_PLANNING_BLOCK_ERROR',\n payload: { officeUuid, month, year },\n });\n })\n .finally(() => {\n isFetching = isFetching.filter((u) => u !== url);\n });\n\n if (response) {\n const plannings: Planning[] = response.data.map((planning) => {\n const guestsAsSignedInUsers = planning.gasten.map((guest) => ({\n uuid: guest.uuid,\n name: `${guest.naam} (Gast)`,\n })) as PlanningUser[];\n\n return {\n date: planning.date,\n dayPart: planning.dayPart,\n signedInUsers: [...planning.signedInUsers, ...guestsAsSignedInUsers],\n guests: planning.gasten as unknown as Guest[],\n isCompleted: planning.isCompleted,\n locationUuid: planning.locatie.locatieUuid,\n locationName: planning.locatie.locatieNaam,\n officeUuid: planning.locatie.ruimteUuid,\n officeName: planning.locatie.ruimteNaam,\n uuid: planning.uuid,\n };\n });\n planningsCache[url] = { key: url, timestamp: new Date(), data: plannings };\n dispatch({\n type: 'FETCH_PLANNING_BLOCK_SUCCESS',\n payload: { officeUuid, month, year, plannings },\n });\n }\n };\n\ntype MakeReservationProps = {\n date: Moment;\n officeUuid: string;\n dayPart: DayPart;\n guests?: Guest[];\n};\n\nexport const makeReservation = ({\n date,\n officeUuid,\n dayPart,\n guests = [],\n}: MakeReservationProps): PlanningThunk> => {\n return async (dispatch, getState) => {\n const selectedUser = getState().user.user;\n\n if (selectedUser === null) return;\n\n const requestObject: AxiosRequestConfig = {\n method: 'POST',\n url: `/api/Ruimtes/${officeUuid}/reserveringen`,\n data: {\n dayPart,\n date: date.format(),\n },\n };\n\n if (guests.length > 0) {\n // Filter out empty guests\n const filteredGuests = guests.filter((guest) => guest.name !== '' && guest.email !== '');\n if (filteredGuests.length > 0) {\n requestObject.data.gasten = filteredGuests.map((guest) => {\n return { naam: guest.name, emailadres: guest.email };\n });\n }\n }\n\n const response = await axios(requestObject).catch((e) => {\n if (e.response?.data.includes('User does not have sufficient credits')) {\n toast.error('Je hebt niet genoeg credits om de reservering te voltooien.');\n } else {\n toast.error('Er is iets fout gegaan tijdens het maken van je reservering.');\n }\n\n return Promise.reject(e);\n });\n\n if (response) {\n toast.success('Reservering aangemaakt.');\n dispatch({ type: 'CLOSE_PLANNING_POPUP' });\n dispatch({ type: 'SET_GUESTS', payload: { guests: [] } });\n dispatch(fetchPlanningBlock({ month: date.month() + 1, year: date.year(), officeUuid }, false));\n dispatch(fetchUser());\n dispatch(fetchReservations({ userUuid: selectedUser.uuid }, false));\n return Promise.resolve();\n }\n };\n};\n\ntype DeleteReservationProps = {\n date: Moment;\n officeUuid: string;\n dayPart: DayPart;\n};\n\nexport const deleteReservation = ({\n date,\n officeUuid,\n dayPart,\n}: DeleteReservationProps): PlanningThunk> => {\n return async (dispatch, getState) => {\n const selectedUser = getState().user.user;\n\n if (selectedUser === null) return;\n\n const response = await axios({\n method: 'DELETE',\n url: `/api/Ruimtes/${officeUuid}/reserveringen`,\n data: {\n dayPart,\n date: date.format(),\n },\n }).catch((e) => {\n toast.error(e.response?.data || 'Er is iets fout gegaan tijdens het maken van je reservering.');\n return Promise.reject();\n });\n\n if (response) {\n toast.success('Reservering verwijderd.');\n dispatch({ type: 'CLOSE_PLANNING_POPUP' });\n dispatch(fetchPlanningBlock({ month: date.month() + 1, year: date.year(), officeUuid }, false));\n dispatch(fetchReservations({ userUuid: selectedUser.uuid }, false));\n dispatch(fetchUser());\n return Promise.resolve();\n }\n };\n};\n","import { Reducer } from 'redux';\nimport { Planning } from '../../global';\n\ntype PLANNING_BLOCK_PAYLOAD = { officeUuid: string; month: number; year: number };\n\n// Actions\ntype FETCH_PLANNING_BLOCK_REQUEST = {\n type: 'FETCH_PLANNING_BLOCK_REQUEST';\n payload: PLANNING_BLOCK_PAYLOAD;\n};\ntype FETCH_PLANNING_BLOCK_SUCCESS = {\n type: 'FETCH_PLANNING_BLOCK_SUCCESS';\n payload: PLANNING_BLOCK_PAYLOAD & { plannings: Planning[] };\n};\ntype FETCH_PLANNING_BLOCK_ERROR = {\n type: 'FETCH_PLANNING_BLOCK_ERROR';\n payload: PLANNING_BLOCK_PAYLOAD;\n};\nexport type PlanningStateAction =\n | FETCH_PLANNING_BLOCK_REQUEST\n | FETCH_PLANNING_BLOCK_SUCCESS\n | FETCH_PLANNING_BLOCK_ERROR;\n\n// State\nenum PlanningBlockState {\n FETCHING = 'FETCHING',\n ERROR = 'ERROR',\n UPDATING = 'UPDATING',\n SUCCESS = 'SUCCESS',\n}\n\nexport type PlanningState = {\n [key: string]: {\n plannings: Planning[];\n state: PlanningBlockState;\n };\n};\n\nconst initialState: PlanningState = {};\n\nconst planningReducer: Reducer = (state = initialState, action) => {\n const key = action.payload\n ? `${action.payload.officeUuid}_${action.payload.year}_${action.payload.month}`\n : undefined;\n\n const exists = key && key in state;\n\n if (!key) return state;\n\n switch (action.type) {\n case 'FETCH_PLANNING_BLOCK_REQUEST':\n return {\n ...state,\n [key]: {\n state: exists ? PlanningBlockState.UPDATING : PlanningBlockState.FETCHING,\n plannings: exists ? state[key].plannings : [],\n },\n };\n case 'FETCH_PLANNING_BLOCK_SUCCESS':\n return {\n ...state,\n [key]: {\n state: PlanningBlockState.SUCCESS,\n plannings: action.payload.plannings,\n },\n };\n case 'FETCH_PLANNING_BLOCK_ERROR':\n return {\n ...state,\n [key]: {\n ...state[key],\n state: PlanningBlockState.ERROR,\n },\n };\n default:\n return state;\n }\n};\n\nexport { fetchPlanningBlock, makeReservation, deleteReservation } from './thunks';\nexport default planningReducer;\n","import styled, { css } from 'styled-components';\nimport { Label, Reel as _Reel } from '../ui';\nimport { Check } from '@styled-icons/material-outlined';\n\nexport const Reel = styled(_Reel)`\n align-items: center;\n margin: 0 -2rem;\n width: calc(100% + 4rem);\n padding-left: 2rem;\n padding-bottom: 1rem;\n\n &:after {\n content: '';\n flex: 0 0 2rem;\n }\n`;\n\nconst Pill = styled(Label)<{ selected: boolean }>`\n padding: 0.5rem 1rem;\n border: 2px solid ${(props) => props.theme.colors.border};\n\n color: ${(props) => props.theme.colors.label};\n font-weight: 500;\n border-radius: 0.75rem;\n cursor: pointer;\n display: flex;\n align-items: center;\n height: 2.25rem;\n\n svg {\n display: none;\n margin-right: 0.5rem;\n margin-left: -0.5rem;\n width: 1.25rem;\n color: inherit;\n }\n\n ${(props) =>\n props.selected &&\n css`\n background: ${(props) => props.theme.colors.label};\n color: ${(props) => props.theme.colors.onLabel};\n border-color: ${(props) => props.theme.colors.label};\n svg {\n display: block;\n }\n `}\n`;\n\nconst Badge = styled.span`\n position: relative;\n &:after {\n content: '';\n position: absolute;\n top: 0;\n left: 100%;\n width: 0.5rem;\n height: 0.5rem;\n border-radius: 50%;\n background-color: ${(props) => props.theme.colors.primary};\n }\n`;\n\ntype Props = {\n chips: {\n id: string;\n label: string;\n showBadge?: boolean;\n }[];\n selected: string[];\n invertSelected?: boolean;\n showIcon?: boolean;\n onSelect: (id: string) => void;\n renderReel?: boolean;\n};\n\nconst ChipsSelector = ({\n showIcon = false,\n chips,\n selected,\n onSelect,\n invertSelected = false,\n renderReel = true,\n}: Props) => {\n const chipsMap = chips.map((chip) => (\n onSelect(chip.id)}\n selected={invertSelected ? !selected.includes(chip.id) : selected.includes(chip.id)}\n >\n {showIcon && }\n {chip.showBadge ? {chip.label} : chip.label}\n \n ));\n if (!renderReel) {\n return <>{chipsMap};\n }\n\n return {chipsMap};\n};\n\nexport default ChipsSelector;\n","import React from 'react';\nimport { Location } from '../../global';\nimport ChipsSelector from '../../components/ChipsSelector';\n\ntype Props = {\n setSelectedLocation: (locationUuid: string) => void;\n selectedLocation: Location | undefined;\n locations: Location[];\n};\nconst LocationsFilter: React.FC = ({ selectedLocation, setSelectedLocation, locations }) => {\n return (\n ({ label: l.name, id: l.uuid }))}\n />\n );\n};\n\nexport default LocationsFilter;\n","import { ChevronBack, ChevronForward } from '@styled-icons/ionicons-outline';\nimport moment from 'moment';\nimport React from 'react';\nimport styled from 'styled-components';\nimport { Heading, IconButton } from '../../ui';\n\nconst Wrapper = styled.div`\n display: flex;\n align-items: center;\n margin-top: 1rem;\n\n h1 {\n width: 9rem;\n font-weight: 500;\n text-transform: capitalize;\n }\n`;\n\ntype Props = {\n nextMonth: () => void;\n prevMonth: () => void;\n currentYear: number;\n currentMonth: number;\n};\n\nconst MonthNavigator: React.FC = ({ nextMonth, prevMonth, currentMonth, currentYear }) => {\n const date = moment(`1/${currentMonth}/${currentYear}`, 'D/M/YYYY');\n return (\n \n {date.format(`MMMM YYYY`)}\n prevMonth()}>\n \n Ga een maand terug\n \n nextMonth()}>\n \n Ga een maand vooruit\n \n \n );\n};\n\nexport default MonthNavigator;\n","import { LayoutStateAction } from './';\n\nexport const setTitle = (title?: string): LayoutStateAction => ({\n payload: title,\n type: 'SET_LAYOUT_TITLE',\n});\n\nexport const setActionButton = (actionButton?: React.ReactNode): LayoutStateAction => ({\n payload: actionButton,\n type: 'SET_LAYOUT_ACTION_BUTTON',\n});\n\nexport const setBackButton = (backButton?: () => void): LayoutStateAction => ({\n payload: backButton,\n type: 'SET_LAYOUT_BACK_BUTTON',\n});\n\nexport const setScrollbarData = (data: moment.Moment[] | null | undefined): LayoutStateAction => ({\n payload: data,\n type: 'SET_SCROLLBAR_DATA',\n});\n","import { Reducer } from 'redux';\n\ntype SET_LAYOUT_TITLE = { type: 'SET_LAYOUT_TITLE'; payload: string | undefined };\ntype SET_LAYOUT_BACK_BUTTON = { type: 'SET_LAYOUT_BACK_BUTTON'; payload: (() => void) | undefined };\ntype SET_LAYOUT_ACTION_BUTTON = { type: 'SET_LAYOUT_ACTION_BUTTON'; payload: React.ReactNode | undefined };\ntype SET_SCROLLBAR_DATA = { type: 'SET_SCROLLBAR_DATA'; payload: moment.Moment[] | null | undefined };\n\nexport type LayoutStateAction =\n | SET_LAYOUT_TITLE\n | SET_LAYOUT_ACTION_BUTTON\n | SET_LAYOUT_BACK_BUTTON\n | SET_SCROLLBAR_DATA;\n\nexport type LayoutState = {\n title?: string | React.ReactNode;\n backButton?: () => void;\n actionButton?: React.ReactNode;\n scrollbarData?: null | moment.Moment[]\n};\n\nconst initialState: LayoutState = {\n title: undefined,\n actionButton: undefined,\n backButton: undefined,\n scrollbarData: undefined,\n};\n\nconst layoutReducer: Reducer = (state = initialState, action) => {\n switch (action.type) {\n case 'SET_LAYOUT_TITLE':\n return {\n ...state,\n title: action.payload,\n };\n case 'SET_LAYOUT_BACK_BUTTON':\n return {\n ...state,\n backButton: action.payload,\n };\n case 'SET_LAYOUT_ACTION_BUTTON':\n return {\n ...state,\n actionButton: action.payload,\n };\n case 'SET_SCROLLBAR_DATA':\n return {\n ...state,\n scrollbarData: action.payload,\n };\n default:\n return state;\n }\n};\n\nexport { setTitle, setActionButton, setBackButton, setScrollbarData } from './actions';\nexport default layoutReducer;\n","import moment, { Moment } from 'moment';\n\nfunction getNextWorkableDay(date?: Moment) {\n const m = date || moment();\n const d = m.day();\n\n // saturday\n if (d === 6) {\n return m.add(2, 'days');\n }\n\n if (d === 5) {\n return m.add(3, 'days');\n }\n\n return m.add(1, 'day');\n}\n\nexport default getNextWorkableDay;\n","import { groupBy } from 'lodash';\nimport moment, { Moment } from 'moment';\nimport React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory, useParams } from 'react-router-dom';\nimport Month from './Month';\nimport Offices from './Offices';\nimport { Planning, RootState } from '../../global';\nimport { fetchPlanningBlock } from '../../state/plannings';\nimport { PlanningPopupStateAction } from '../../state/planningPopup';\nimport { Container, IconButton, Heading } from '../../ui';\nimport { Add } from '@styled-icons/material-outlined';\nimport LocationsFilter from './LocationsFilter';\nimport MonthNavigator from './MonthNavigator';\nimport { setActionButton, setBackButton, setTitle } from '../../state/layout';\nimport getNextWorkableDay from '../../utils/getNextWorkableDay';\nimport styled from 'styled-components';\n\nconst TabsWrapper = styled.div`\n display: grid;\n`;\n\nconst Tab = styled.div<{ active: boolean; tabId: string }>`\n transition: 0.25s cubic-bezier(0.86, 0, 0.07, 1);\n opacity: ${(props) => (props.active ? 1 : 0)};\n transform: ${(props) =>\n props.active ? 'translate3d(0, 0, 0)' : `translate3d(${props.tabId === 'details' ? '20' : '-20'}px, 0, 0)`};\n grid-column: 1;\n grid-row: 1;\n align-self: stretch;\n pointer-events: ${(props) => (props.active ? 'initial' : 'none')};\n display: flex;\n flex-direction: column;\n`;\n\nconst Calendar: React.FC = () => {\n const today = moment().startOf('day');\n const dispatch = useDispatch();\n const planning = useSelector((state: RootState) => state.planning);\n const locations = useSelector((state: RootState) => state.locations.locations);\n const [selectedLocationUuid, setSelectedLocation] = React.useState(\n locations.length > 0 ? locations[0].uuid : undefined,\n );\n const selectedLocation = locations.find((l) => l.uuid === selectedLocationUuid);\n\n const history = useHistory();\n const params = useParams<{ month: string; year: string }>();\n\n const month = parseInt(params.month);\n const year = parseInt(params.year);\n\n const keys = (selectedLocation && selectedLocation.offices.map((o) => `${o.uuid}_${year}_${month}`)) || [];\n const plannings = keys.reduce((a, b) => (b in planning ? [...a, ...planning[b].plannings] : a), []);\n const planningDates = groupBy(plannings, 'date');\n\n const [selectedDate, setSelectedDate] = React.useState(() => today);\n const [officeViewActive, setOfficeViewActive] = React.useState(false);\n\n function nextMonth() {\n if (month === 12) {\n history.push(`/calendar/${year + 1}/${1}`);\n } else {\n history.push(`/calendar/${year}/${month + 1}`);\n }\n }\n\n function prevMonth() {\n if (month === 1) {\n history.push(`/calendar/${Math.max(year - 1, 1970)}/${12}`);\n } else {\n history.push(`/calendar/${year}/${month - 1}`);\n }\n }\n\n React.useEffect(() => {\n if (officeViewActive) {\n dispatch(setBackButton(() => setOfficeViewActive(false)));\n dispatch(setTitle(`Agenda ${selectedLocation?.name}`));\n // dispatch(setTitle(selectedDate.format('dddd DD MMMM yyyy')));\n } else {\n dispatch(setBackButton(undefined));\n dispatch(setTitle('Agenda'));\n }\n\n return () => {\n dispatch(setBackButton(undefined));\n };\n }, [officeViewActive, setOfficeViewActive, dispatch, selectedLocation]);\n\n React.useEffect(() => {\n selectedLocation &&\n selectedLocation.offices\n .filter((o) => o.isActive)\n .forEach((office) => dispatch(fetchPlanningBlock({ month, year, officeUuid: office.uuid })));\n }, [dispatch, selectedLocation, month, year]);\n\n React.useEffect(() => {\n dispatch(setTitle('Agenda'));\n dispatch(\n setActionButton(\n \n selectedLocation &&\n dispatch({\n type: 'OPEN_PLANNING_POPUP',\n payload: { date: getNextWorkableDay(), officeUuid: selectedLocation.offices[0].uuid },\n })\n }\n >\n \n Reservering toevoegen\n ,\n ),\n );\n }, [dispatch, selectedLocation]);\n\n const selectDate = (date: Moment) => {\n setSelectedDate(date);\n setOfficeViewActive(true);\n };\n\n const selectOffice = (officeUuid: string) => {\n dispatch({\n type: 'OPEN_PLANNING_POPUP',\n payload: { date: selectedDate, officeUuid },\n });\n };\n\n return (\n \n \n \n {locations.length > 1 && (\n \n )}\n \n \n o.isActive) : []}\n />\n \n \n \n \n {selectedDate.format('dddd DD MMMM yyyy')}\n \n \n \n \n \n );\n};\n\nexport default Calendar;\n","import { useState, useEffect } from 'react';\n\nfunction useWindowSize() {\n const [windowSize, setWindowSize] = useState({\n width: window.innerWidth,\n height: window.innerHeight,\n });\n\n useEffect(() => {\n function handleResize() {\n setWindowSize({\n width: window.innerWidth,\n height: window.innerHeight,\n });\n }\n\n window.addEventListener('resize', handleResize);\n\n handleResize();\n\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n return { ...windowSize, isMobileDevice: windowSize.width < 1024 };\n}\n\nexport default useWindowSize;\n","import { DefaultTheme } from 'styled-components';\n\nconst fonts = {\n heading: '\"Poppins\", sans-serif',\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif',\n};\n\nexport const lightTheme: DefaultTheme = {\n fonts,\n modifiers: {\n colorModifier: '',\n },\n colors: {\n black: '#000000',\n white: '#ffffff',\n\n primary: '#6c5dd3',\n onPrimary: '#ffffff',\n\n primaryDarker: '#352e8c',\n\n background: '#f7f7fd',\n\n cardBackground: '#ffffff',\n onCardBackground: '#11142d',\n onCardBackgroundEmphasized: '#6c5dd3',\n\n inputBackground: '#ffffff',\n inputBorder: '#808191',\n disabled: '#e4e4e4',\n disabledText: '#888996',\n border: '#e4e4e4',\n label: '#11142d',\n onLabel: '#ffffff',\n\n muted: '#808191',\n faded: '#b2b3bd',\n washed: '#e5e5e5',\n\n success: '#7fba7a',\n warning: '#ffce73',\n error: '#ff754c',\n\n timeLineColor: '#c1c3d6',\n },\n iosStyles: {\n cardBackground: '#ffffff',\n titleColor: '#000000',\n contentColor: '#000000',\n\n separatorColor: 'rgba(60, 60, 67, .29)',\n iconColor: 'rgba(60, 60, 67, .6)',\n iconBackground: 'rgba(118, 118, 128, .12)',\n\n handleBarColor: 'rgba(60, 60, 67, .3)',\n backdropBackground: 'rgba(0, 0, 0, .4)',\n\n titleSize: '20px',\n contentSize: '15px',\n },\n};\n\nexport const darkTheme: DefaultTheme = {\n fonts,\n modifiers: {\n colorModifier: 'saturate(0.7)',\n },\n colors: {\n black: '#ffffff',\n white: '#000000',\n\n primary: '#6861cc',\n onPrimary: '#ffffff',\n\n primaryDarker: '#5c5492',\n\n background: '#1c1c24',\n\n cardBackground: '#2c2c36',\n onCardBackground: '#ffffff',\n onCardBackgroundEmphasized: '#8e86ff',\n\n inputBackground: '#2c2c36',\n inputBorder: '#707077',\n\n disabled: '#383840',\n disabledText: '#5f5f6c',\n\n border: '#333333',\n\n label: '#b9b9c7',\n onLabel: '#000000',\n\n muted: '#b9b9c7',\n faded: '#9394a4',\n washed: '#1b1b1b',\n\n success: '#7fba7a',\n warning: '#ffce73',\n error: '#ff754c',\n\n timeLineColor: '#696969',\n },\n iosStyles: {\n // cardBackground: '#1C1C1E',\n cardBackground: 'rgba(28, 28, 30, .9)',\n titleColor: '#FFFFFF',\n contentColor: '#FFFFFF',\n\n separatorColor: 'rgba(84, 84, 88, .65)',\n iconColor: 'rgba(235, 235, 245, .6)',\n iconBackground: 'rgba(118, 118, 128, .24)',\n\n handleBarColor: 'rgba(235, 235, 245, .5)',\n backdropBackground: 'rgba(0, 0, 0, .28)',\n\n titleSize: '20px',\n contentSize: '15px',\n },\n};\n","import styled from 'styled-components';\nimport { darkTheme, lightTheme } from '../../ui/themes';\nimport { FormField } from '../../ui';\n\nexport enum Appearance {\n System = 'system',\n Dark = 'dark',\n Light = 'light',\n}\n\ntype Props = {\n onUpdate: (appearance: Appearance) => void;\n value: Appearance;\n};\n\nconst AppearanceSelectorWrapper = styled.div`\n display: flex;\n flex-direction: row;\n gap: 1rem;\n margin: 1rem 0;\n > div {\n flex: 1;\n }\n`;\n\nconst AppearanceLabel = styled.div`\n display: flex;\n aspect-ratio: 4 / 3;\n border: 2px solid ${(props) => props.theme.colors.border};\n border-radius: 1rem;\n overflow: hidden;\n position: relative;\n\n margin-bottom: 1rem;\n cursor: pointer;\n\n > div {\n flex: 1;\n position: relative;\n &:before {\n content: 'Aa';\n position: absolute;\n top: 2rem;\n left: MIN(3rem, 40%);\n width: 100%;\n height: 100%;\n border-radius: 1.5rem;\n padding: 1rem;\n box-shadow: 0 0.8px 2.1px rgba(0, 0, 0, 0.02), 0 2.7px 6.9px rgba(0, 0, 0, 0.03), 0 12px 31px rgba(0, 0, 0, 0.05);\n font-size: 1.2rem;\n z-index: 0;\n\n @media screen and (max-width: 680px) {\n left: MIN(2rem, 15%);\n width: 200%;\n top: 1rem;\n }\n }\n > .fakeOption {\n @media screen and (max-width: 680px) {\n visibility: hidden;\n }\n position: absolute;\n bottom: 2.5rem;\n font-size: 0.7rem;\n left: calc(MIN(3rem, 40%) + 1rem);\n display: block;\n user-select: none;\n &:before {\n content: '';\n display: block;\n position: absolute;\n top: calc(100% + 0.5rem);\n width: 1.25rem;\n height: 1.25rem;\n border-radius: 50%;\n border: 2px solid;\n background: radial-gradient(\n circle,\n ${lightTheme.colors.primary} 0%,\n ${lightTheme.colors.primary} 50%,\n rgba(0, 0, 0, 0) calc(50% + 1px),\n rgba(0, 0, 0, 0) 100%\n );\n }\n &:after {\n content: 'Ochtend';\n position: absolute;\n top: calc(100% + 0.5rem);\n left: 1.25rem;\n height: 1.25rem;\n display: flex;\n padding-left: 0.5rem;\n align-items: center;\n }\n }\n }\n\n > .light {\n background-color: ${lightTheme.colors.background};\n &:before {\n background: ${lightTheme.colors.cardBackground};\n color: ${lightTheme.colors.label};\n }\n > .fakeOption {\n color: ${lightTheme.colors.faded};\n &:before {\n border-color: ${lightTheme.colors.muted};\n }\n &:after {\n color: ${lightTheme.colors.label};\n }\n }\n }\n\n > .dark {\n background-color: ${darkTheme.colors.background};\n &:before {\n background: ${darkTheme.colors.cardBackground};\n color: ${darkTheme.colors.label};\n }\n > .fakeOption {\n color: ${darkTheme.colors.faded};\n &:before {\n border-color: ${darkTheme.colors.muted};\n }\n &:after {\n color: ${darkTheme.colors.label};\n }\n }\n }\n`;\n\nconst RadioInput = styled.input`\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n &:checked + label {\n ${AppearanceLabel} {\n &:before {\n content: '';\n z-index: 4;\n position: absolute;\n inset: -2px;\n border-radius: 1rem;\n border: 8px solid ${(props) => props.theme.colors.primary};\n }\n }\n }\n\n + label .label {\n /* font-size: 0.5em; */\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n @media screen and (max-width: 680px) {\n font-size: 0.75em;\n }\n }\n`;\n\nexport default function AppearanceSelector({ onUpdate, value }: Props) {\n return (\n \n
\n \n
\n onUpdate(Appearance.Light)}\n />\n \n
\n\n
\n onUpdate(Appearance.Dark)}\n />\n \n
\n
\n onUpdate(Appearance.System)}\n />\n \n
\n
\n
\n
\n );\n}\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\nimport { RootState } from '../global';\nimport {\n Avatar as _Avatar,\n Heading,\n Label,\n Modal,\n Button,\n IconButton,\n Drawer,\n FormField,\n Select,\n Form,\n Container as _Container,\n ElevatedCard,\n} from '../ui';\nimport { Edit, ExitToApp } from '@styled-icons/material-outlined';\nimport { updateUser } from '../state/users';\nimport useWindowSize from '../utils/useWindowSize';\nimport { setActionButton, setTitle } from '../state/layout';\nimport AppearanceSelector, { Appearance } from '../components/AppearanceSelector/AppearanceSelector';\n\nconst Avatar = styled(_Avatar)``;\n\nconst VersionNumber = styled(Label)`\n font-size: 0.75rem;\n opacity: 0.4;\n text-align: center;\n position: fixed;\n right: 0.5rem;\n bottom: 0.5rem;\n`;\n\nconst Card = styled(ElevatedCard)`\n gap: 1rem;\n padding: 2rem;\n`;\n\nconst SettingsHeader = styled.div`\n margin-bottom: 1rem;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n\n ${Heading} {\n margin-bottom: 1rem;\n font-weight: 500;\n font-size: 1.125rem;\n margin-top: 1rem;\n }\n\n ${Avatar} {\n margin-bottom: 1rem;\n }\n`;\n\nconst SettingsBody = styled.div`\n display: grid;\n gap: 1rem;\n margin-top: 2rem;\n margin-bottom: 2rem;\n`;\n\nconst SettingsCredits = styled.div`\n padding: 1rem;\n text-align: center;\n\n ${Heading} {\n color: ${(props) => props.theme.colors.primary};\n font-size: 2rem;\n margin-bottom: 0.5rem;\n }\n`;\n\nconst Container = styled(_Container)`\n min-height: calc(${window.innerHeight}px - 6rem);\n padding-bottom: 2rem;\n`;\n\nconst Settings: React.FC = () => {\n const { user, locations } = useSelector((state: RootState) => ({\n ...state.user,\n ...state.locations,\n }));\n\n const { company } = useSelector((state: RootState) => state.companies);\n const { appearance } = useSelector((state: RootState) => state.preferences);\n const { isMobileDevice } = useWindowSize();\n\n const dispatch = useDispatch();\n\n const [isOpen, setIsOpen] = React.useState(false);\n const preferredLocation = locations.find((l) => l.uuid === user?.preferredLocation?.uuid);\n const [selectedLocationUuid, setSelectedLocation] = React.useState(\n () => preferredLocation?.uuid || undefined,\n );\n\n const [selectedAppearance, setSelectedAppearance] = React.useState(() => appearance);\n\n // const selectedLocation = locations.find((l) => l.uuid === selectedLocationUuid);\n const hasMultipleLocations = locations.length > 1;\n\n React.useEffect(() => {\n dispatch(setTitle('Mijn instellingen'));\n dispatch(\n setActionButton(\n setIsOpen(true)}>\n \n Voorkeuren aanpassen\n ,\n ),\n );\n }, [dispatch, setIsOpen, hasMultipleLocations]);\n\n if (!user) return null;\n\n const handleSubmit = (event: React.FormEvent) => {\n event.preventDefault();\n if (selectedLocationUuid && selectedLocationUuid !== preferredLocation?.uuid) {\n dispatch(updateUser({ preferredLocationUuid: selectedLocationUuid }));\n }\n\n if (selectedAppearance && selectedAppearance !== appearance) {\n dispatch({ type: 'SET_APPEARANCE_PREFERENCE', payload: selectedAppearance });\n }\n\n setIsOpen(false);\n };\n\n const Element = isMobileDevice ? Drawer : Modal;\n\n return (\n <>\n setIsOpen(false)} title=\"Mijn Instellingen\">\n
\n {hasMultipleLocations ? (\n \n \n \n ) : null}\n setSelectedAppearance(a)} value={selectedAppearance} />\n \n Opslaan\n \n \n
\n \n \n {user.name}\n \n \n {company?.usesCredits && (\n \n {user.credits}\n \n \n )}\n {hasMultipleLocations && (\n \n Jouw voorkeurslocatie\n \n {preferredLocation?.name}\n \n \n )}\n (window.location.href = '/logout')} style={{ marginTop: 'auto' }}>\n \n Uitloggen\n \n \n v. {process.env.REACT_APP_GIT_SHA}\n \n );\n};\n\nexport default Settings;\n","import { ThunkAction } from 'redux-thunk';\nimport axios from 'axios';\nimport { Location, Office, RootState } from '../../global';\nimport { LocationsStateAction } from '.';\nimport { toast } from 'react-toastify';\n\ntype LocatiesResponse = {\n naam: string;\n uuid: string;\n isActief: boolean;\n ruimtes: {\n uuid: string;\n naam: string;\n plekken: number;\n isActief: boolean;\n }[];\n};\n\ntype LocationsThunk = ThunkAction;\n\ntype UpdateLocationProps = { name: string; uuid: string };\ntype CreateLocationProps = { name: string };\ntype DeleteLocationProps = { uuid: string };\ntype CreateOfficeProps = { name: string; locationUuid: string; seats: number };\n\nexport const fetchLocations = (): LocationsThunk => async (dispatch, getState) => {\n dispatch({ type: 'FETCH_LOCATIONS_REQUEST' });\n\n const response = await axios.get('/api/Locaties').catch((e) => {\n toast.error(e.response?.data || 'Er is iets fout gegaan tijdens het ophalen van de locaties.');\n dispatch({ type: 'FETCH_LOCATIONS_FAILED' });\n });\n\n if (response) {\n const locations: Location[] = response.data.map((locatie) => ({\n name: locatie.naam,\n uuid: locatie.uuid,\n isActive: locatie.isActief,\n offices: locatie.ruimtes.map((ruimte) => ({\n isActive: ruimte.isActief,\n locationUuid: locatie.uuid,\n name: ruimte.naam,\n seats: ruimte.plekken,\n uuid: ruimte.uuid,\n })),\n }));\n dispatch({ type: 'FETCH_LOCATIONS_SUCCESS', payload: locations });\n }\n};\n\nexport const createLocation =\n (location: CreateLocationProps): LocationsThunk =>\n async (dispatch, getState) => {\n const response = await axios.post(`/api/Locaties`, { naam: location.name, isActief: true }).catch((e) => {\n toast.error(e.response?.data || 'Er is iets fout gegaan tijdens het maken van de locatie.');\n });\n\n if (response) {\n toast.success('Locatie aangemaakt.');\n dispatch(fetchLocations());\n }\n };\n\nexport const updateLocation =\n (location: UpdateLocationProps): LocationsThunk =>\n async (dispatch, getState) => {\n const response = await axios\n .patch(`/api/Locaties/${location.uuid}`, { naam: location.name, isActief: true })\n .catch((e) => {\n toast.error(e.response?.data || 'Er is iets fout gegaan tijdens het updaten van de locatie.');\n });\n\n if (response) {\n toast.success('Locatie geupdated.');\n dispatch(fetchLocations());\n }\n };\n\nexport const deleteLocation =\n (location: DeleteLocationProps): LocationsThunk =>\n async (dispatch, getState) => {\n const response = await axios.delete(`/api/Locaties/${location.uuid}`).catch((e) => {\n toast.error(e.response?.data || 'Er is iets fout gegaan tijdens het updaten van de locatie.');\n });\n\n if (response) {\n toast.success('Locatie geupdated.');\n dispatch(fetchLocations());\n }\n };\n\nexport const createOffice =\n (office: CreateOfficeProps): LocationsThunk =>\n async (dispatch, getState) => {\n const response = await axios\n .post(`/api/Locaties/${office.locationUuid}/ruimtes`, { name: office.name, seats: office.seats })\n .catch((e) => {\n toast.error(e.response?.data || 'Er is iets fout gegaan tijdens het maken van het kantoor.');\n });\n\n if (response) {\n toast.success('Kantoor opgeslagen.');\n dispatch(fetchLocations());\n }\n };\n","import { Reducer } from 'redux';\nimport { Location } from '../../global';\n\ntype FETCH_LOCATIONS_REQUEST = { type: 'FETCH_LOCATIONS_REQUEST' };\ntype FETCH_LOCATIONS_SUCCESS = { type: 'FETCH_LOCATIONS_SUCCESS'; payload: Location[] };\ntype FETCH_LOCATIONS_FAILED = { type: 'FETCH_LOCATIONS_FAILED' };\n\nexport type LocationsStateAction = FETCH_LOCATIONS_REQUEST | FETCH_LOCATIONS_SUCCESS | FETCH_LOCATIONS_FAILED;\n\nexport type LocationsState = {\n loading: boolean;\n success: boolean;\n error: boolean;\n locations: Location[];\n};\n\nconst initialState: LocationsState = {\n loading: true,\n success: false,\n error: false,\n locations: [],\n};\n\nconst locationsReducer: Reducer = (state = initialState, action) => {\n switch (action.type) {\n case 'FETCH_LOCATIONS_REQUEST':\n return { ...state, loading: true, success: false, error: false };\n case 'FETCH_LOCATIONS_SUCCESS':\n return {\n ...state,\n loading: false,\n success: true,\n error: false,\n locations: action.payload,\n };\n case 'FETCH_LOCATIONS_FAILED':\n return { ...state, loading: false, success: false, error: true };\n default:\n return state;\n }\n};\n\nexport { fetchLocations, createLocation, updateLocation, deleteLocation, createOffice } from './thunks';\nexport default locationsReducer;\n","import { ThunkAction } from 'redux-thunk';\nimport axios from 'axios';\nimport { fetchLocations, LocationsStateAction } from '../locations';\nimport { RootState } from '../../global';\nimport { OfficesStateAction } from '.';\nimport { toast } from 'react-toastify';\n\ntype Thunk = ThunkAction;\n\ntype CreateOfficeProps = { name: string; seats: number; locationUuid: string };\ntype UpdateOfficeProps = { uuid: string; name: string; seats: number; locationUuid: string; isActive: boolean };\ntype DeleteOfficeProps = { uuid: string };\n\nexport const createOffice =\n ({ locationUuid, name, seats }: CreateOfficeProps): Thunk =>\n async (dispatch, getState) => {\n const response = await axios\n .post(`/api/Locaties/${locationUuid}/ruimtes`, {\n naam: name,\n plekken: seats,\n isActief: true,\n })\n .catch((e) => {\n toast.error(e.response?.data || 'Er is iets fout gegaan tijdens het maken van de ruimte.');\n });\n\n if (response) {\n toast.success('Ruimte aangemaakt.');\n dispatch(fetchLocations());\n }\n };\n\nexport const updateOffice =\n (office: UpdateOfficeProps): Thunk =>\n async (dispatch, getState) => {\n const response = await axios\n .patch(`/api/Ruimtes/${office.uuid}`, {\n naam: office.name,\n plekken: office.seats,\n locatieUuid: office.locationUuid,\n isActief: office.isActive,\n })\n .catch((e) => {\n toast.error(e.response?.data || 'Er is iets fout gegaan tijdens het updaten van de Ruimte.');\n });\n\n if (response) {\n toast.success('Ruimte geupdated.');\n dispatch(fetchLocations());\n }\n };\n\nexport const deleteOffice =\n (office: DeleteOfficeProps): Thunk =>\n async (dispatch, getState) => {\n const response = await axios.delete(`/api/Ruimtes/${office.uuid}`).catch((e) => {\n toast.error(e.response?.data || 'Er is iets fout gegaan tijdens het verwijderen van de ruimte.');\n });\n\n if (response) {\n toast.success('Ruimte verwijderd.');\n dispatch(fetchLocations());\n }\n };\n","import { Reducer } from 'redux';\n\ntype TOGGLE_OFFICE = { type: 'TOGGLE_OFFICE'; payload: string };\n\nexport type OfficesStateAction = TOGGLE_OFFICE;\n\nexport type OfficesState = {\n untoggled: string[];\n};\n\nconst initialState: OfficesState = {\n untoggled: JSON.parse(window.localStorage.getItem('untoggled-offices') || '[]'),\n};\n\nconst officesReducer: Reducer = (state = initialState, action) => {\n switch (action.type) {\n case 'TOGGLE_OFFICE':\n if (state.untoggled.includes(action.payload)) {\n return { ...state, untoggled: state.untoggled.filter((s) => s !== action.payload) };\n }\n return { ...state, untoggled: [...state.untoggled, action.payload] };\n default:\n return state;\n }\n};\n\nexport { createOffice, updateOffice, deleteOffice } from './thunks';\nexport default officesReducer;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Label, Button } from '../ui';\n\nconst Wrapper = styled.div`\n padding: 2rem;\n /* Border from https://kovart.github.io/dashed-border-generator/ */\n background-image: url(\"data:image/svg+xml,%3csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' rx='16' ry='16' stroke='%2311142D1F' stroke-width='4' stroke-dasharray='16' stroke-dashoffset='0' stroke-linecap='square'/%3e%3c/svg%3e\");\n border-radius: 16px; /* Important to do pixels here because of the dashed border exclusivly works with pixel values */\n\n display: flex;\n flex-direction: column;\n align-items: center;\n color: ${(props) => props.theme.colors.label};\n\n & > * + * {\n margin-top: 1rem;\n }\n\n ${Label} {\n max-width: 70ch;\n text-align: center;\n }\n\n ${Button.Primary} {\n height: 2.5rem;\n border-radius: 0.75rem;\n }\n\n svg {\n opacity: 0.15;\n width: 3.5rem;\n height: auto;\n }\n`;\n\ntype Props = {\n text: string;\n style?: React.CSSProperties;\n className?: string;\n action?: () => void;\n actionLabel?: string;\n icon?: React.ReactNode;\n};\n\nconst EmptyState: React.FC = ({ text, style, className, action, actionLabel, icon }) => {\n return (\n \n {icon && icon}\n \n {action && actionLabel && action()}>{actionLabel}}\n \n );\n};\n\nexport default EmptyState;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { useForm } from 'react-hook-form';\nimport { Office, RootState } from '../../global';\nimport { Button, FormField, Form, Input, Select } from '../../ui';\n\ntype OfficeFormInputs = {\n name: string;\n seats: string;\n locationUuid: string;\n};\n\ntype Props = {\n office?: Office;\n updateOffice?: (locationUuid: string, office: Pick) => void;\n createOffice?: (locationUuid: string, office: Pick) => void;\n};\n\nconst OfficeForm: React.FC = ({ office, updateOffice, createOffice }) => {\n const locations = useSelector((state: RootState) => state.locations.locations);\n const { handleSubmit, errors, register } = useForm({\n defaultValues: {\n locationUuid: office?.locationUuid || locations[0]?.uuid || '',\n name: office?.name || '',\n seats: office?.seats.toString() || '',\n },\n });\n\n const onSubmit = (data: OfficeFormInputs) => {\n if (office && updateOffice) {\n updateOffice(data.locationUuid, {\n name: data.name,\n seats: parseInt(data.seats),\n uuid: office.uuid,\n isActive: office.isActive,\n });\n } else if (createOffice) {\n createOffice(data.locationUuid, { name: data.name, seats: parseInt(data.seats) });\n }\n };\n\n return (\n
\n \n \n \n \n \n \n \n \n \n Opslaan\n
\n );\n};\n\nexport default OfficeForm;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Button } from '../ui';\nimport { Edit, Delete } from '@styled-icons/material-outlined';\n\nconst Menu = styled.div`\n padding: 0.25rem 0;\n display: flex;\n flex-direction: column;\n`;\n\nconst MenuItem = styled(Button.Minimal)`\n border-radius: 0;\n text-align: left;\n height: 2.5rem;\n font-size: 0.875rem;\n justify-content: flex-start;\n align-items: center;\n color: ${(props) => props.theme.colors.faded};\n\n svg {\n width: 1.25rem;\n height: 1.25rem;\n margin-right: 0.5rem;\n }\n`;\n\ntype Props = {\n edit: () => void;\n remove: () => void;\n};\n\nconst EditRemoveMenu: React.FC = ({ edit, remove }) => {\n return (\n \n edit()}>\n \n Bewerken\n \n remove()}>\n \n Verwijderen\n \n \n );\n};\n\nexport default EditRemoveMenu;\n","import React from 'react';\nimport EditRemoveMenu from '../../components/EditRemoveMenu';\nimport styled from 'styled-components';\nimport { Popover, OvalButton, Label, Switch } from '../../ui';\nimport { Person, MoreHoriz } from '@styled-icons/material-outlined';\n\ntype Props = {\n title: string;\n seats: number;\n edit: () => void;\n remove: () => void;\n isActive: boolean;\n setIsActive: (active: boolean) => void;\n};\n\nconst Styled = styled.div`\n margin: 0.5rem 0;\n display: flex;\n height: 2rem;\n align-items: center;\n\n .seats {\n display: flex;\n justify-content: space-between;\n align-items: center;\n /* min-width: 2.5rem; */\n margin-left: 1rem;\n\n svg {\n margin-right: 0.25rem;\n }\n }\n\n label {\n margin-left: auto;\n }\n`;\n\nconst LocationRow = ({ title, seats, edit, remove, isActive, setIsActive }: Props) => {\n return (\n \n \n
\n \n \n
\n setIsActive(e.target.checked)} />\n edit()} remove={() => remove()} />}>\n \n \n Meer opties\n \n \n
\n );\n};\n\nexport default LocationRow;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Location, Office } from '../../global';\nimport { Heading, Popover, ElevatedCard, OvalButton } from '../../ui';\nimport LocationRow from './LocationRow';\nimport EditRemoveMenu from './../../components/EditRemoveMenu';\nimport { MoreHoriz } from '@styled-icons/material-outlined';\nimport EmptyState from '../../components/EmptyState';\nimport { useDispatch } from 'react-redux';\nimport { updateOffice } from '../../state/offices';\n\nconst Card = styled(ElevatedCard)`\n display: grid;\n grid-auto-flow: row;\n padding: 2rem;\n position: relative;\n /* overflow: hidden; */\n\n h4 {\n font-weight: 500;\n font-size: 1.125rem;\n margin-bottom: 0.5rem;\n }\n\n &:not(:first-child) {\n margin-top: 1rem;\n }\n`;\n\ntype Props = {\n location: Location;\n editLocation: (location: Location) => void;\n editOffice: (office: Office) => void;\n removeLocation: (location: Location) => void;\n removeOffice: (office: Office) => void;\n openPopupWithTab: (tab: 'office' | 'location') => void;\n};\n\nconst LocationCard: React.FC = (props) => {\n const { location, editLocation, editOffice, removeLocation, removeOffice, openPopupWithTab } = props;\n const dispatch = useDispatch();\n\n const setIsActive = (office: Office, active: boolean) => {\n dispatch(updateOffice({ ...office, isActive: active }));\n };\n\n return (\n \n
\n {location.name}\n editLocation(location)} remove={() => removeLocation(location)} />}\n >\n \n \n Meer opties\n \n \n
\n\n {location.offices.length > 0 ? (\n location.offices.map((office, index) => (\n setIsActive(office, active)}\n edit={() => editOffice(office)}\n remove={() => removeOffice(office)}\n />\n ))\n ) : (\n openPopupWithTab('office')}\n />\n )}\n
\n );\n};\n\nexport default LocationCard;\n","import React from 'react';\nimport { useForm } from 'react-hook-form';\nimport { Button, FormField, Form, Input } from '../../ui';\nimport { Location } from '../../global';\n\ntype LocationFormInputs = {\n name: string;\n};\n\ntype Props = {\n location?: Location;\n createLocation?: (location: Pick) => void;\n updateLocation?: (location: Pick) => void;\n};\n\nconst LocationForm: React.FC = ({ location, createLocation, updateLocation }) => {\n const { handleSubmit, errors, register } = useForm({\n defaultValues: {\n name: location?.name || '',\n },\n });\n\n const onSubmit = (data: LocationFormInputs) => {\n if (location && updateLocation) {\n updateLocation({ ...data, uuid: location.uuid });\n } else if (createLocation) {\n createLocation(data);\n }\n };\n\n return (\n
\n \n \n \n Opslaan\n
\n );\n};\n\nexport default LocationForm;\n","import React, { useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Add, LocationOn } from '@styled-icons/material-outlined';\nimport { Location, Office, RootState } from '../../global';\nimport { createLocation, updateLocation, deleteLocation } from '../../state/locations';\nimport { updateOffice, deleteOffice, createOffice } from '../../state/offices';\nimport { IconButton, Drawer, Modal, Container } from '../../ui';\nimport ChipsSelector from './../../components/ChipsSelector';\nimport EmptyState from './../../components/EmptyState';\nimport OfficeForm from './OfficeForm';\nimport LocationCard from './LocationCard';\nimport LocationForm from './LocationForm';\nimport styled from 'styled-components';\nimport useWindowSize from '../../utils/useWindowSize';\nimport { setTitle, setActionButton } from '../../state/layout';\n\nconst TabsWrapper = styled.div`\n display: grid;\n`;\n\nconst Tab = styled.div<{ active: boolean; tabId: string }>`\n transition: 0.25s cubic-bezier(0.86, 0, 0.07, 1);\n opacity: ${(props) => (props.active ? 1 : 0)};\n transform: ${(props) =>\n props.active ? 'translate3d(0, 0, 0)' : `translate3d(${props.tabId === 'office' ? '20' : '-20'}px, 0, 0)`};\n grid-column: 1;\n grid-row: 1;\n align-self: stretch;\n pointer-events: ${(props) => (props.active ? 'initial' : 'none')};\n display: flex;\n flex-direction: column;\n`;\n\nconst Locations: React.FC = () => {\n const dispatch = useDispatch();\n const locations = useSelector((state: RootState) => state.locations.locations);\n\n const { isMobileDevice } = useWindowSize();\n\n const [isOpen, setIsOpen] = React.useState(false);\n const [locationToEdit, setLocationToEdit] = useState(undefined);\n const [officeToEdit, setOfficeToEdit] = useState(undefined);\n const [activeTab, setActiveTab] = useState('office');\n\n React.useEffect(() => {\n dispatch(setTitle('Locaties en Ruimtes'));\n dispatch(\n setActionButton(\n setIsOpen(true)}>\n \n Voeg een locatie of ruimte toe\n ,\n ),\n );\n }, [dispatch, setIsOpen]);\n\n const onCloseDrawer = () => {\n setIsOpen(false);\n setTimeout(() => {\n setLocationToEdit(undefined);\n setOfficeToEdit(undefined);\n }, 200);\n };\n\n const openPopupWithTab = (tab: 'office' | 'location') => {\n setActiveTab(tab);\n setIsOpen(true);\n };\n\n // Locations\n const editLocation = (location: Location) => {\n setLocationToEdit(location);\n setIsOpen(true);\n };\n\n const removeLocation = (location: Location) => {\n dispatch(deleteLocation({ uuid: location.uuid }));\n };\n\n const handleCreateLocation = (location: Pick) => {\n dispatch(createLocation(location));\n setIsOpen(false);\n };\n\n const handleUpdateLocation = (location: Pick) => {\n dispatch(updateLocation(location));\n setLocationToEdit(undefined);\n setIsOpen(false);\n };\n\n // Offices\n const editOffice = (office: Office) => {\n setOfficeToEdit(office);\n setIsOpen(true);\n };\n\n const removeOffice = (office: Office) => {\n dispatch(deleteOffice({ uuid: office.uuid }));\n };\n\n const handleCreateOffice = (selectedLocation: string, office: Pick) => {\n dispatch(\n createOffice({\n name: office.name,\n seats: office.seats,\n locationUuid: selectedLocation,\n }),\n );\n setIsOpen(false);\n };\n\n const handleUpdateOffice = (locationUuid: string, office: Pick) => {\n dispatch(\n updateOffice({\n name: office.name,\n uuid: office.uuid,\n seats: office.seats,\n locationUuid: locationUuid,\n isActive: office.isActive,\n }),\n );\n setOfficeToEdit(undefined);\n setIsOpen(false);\n };\n\n const title = () => {\n if (!locationToEdit && !officeToEdit) {\n return 'Nieuw';\n } else if (officeToEdit && !locationToEdit) {\n return officeToEdit.name ?? '';\n } else {\n return locationToEdit?.name ?? '';\n }\n };\n\n const tabs = [\n { label: 'Ruimte', id: 'office' },\n { label: 'Locatie', id: 'location' },\n ];\n\n const Element = isMobileDevice ? Drawer : Modal;\n\n return (\n <>\n onCloseDrawer()} title={title()}>\n {locationToEdit && }\n\n {officeToEdit && }\n\n {!locationToEdit && !officeToEdit && (\n <>\n
\n \n
\n\n \n \n \n \n\n \n \n \n \n \n )}\n
\n\n \n {locations.length > 0 ? (\n locations.map((loc, index) => (\n \n ))\n ) : (\n openPopupWithTab('location')}\n icon={}\n />\n )}\n \n \n );\n};\n\nexport default Locations;\n","import React from 'react';\nimport styled, { css } from 'styled-components';\nimport { useSpring, animated } from 'react-spring';\nimport { useDrag } from 'react-use-gesture';\nimport { findNearestNumberInArray, rubberBandIfOutOfBounds } from '../../utils/animation';\n\nconst Wrapper = styled(animated.div)`\n position: relative;\n z-index: 2;\n`;\n\nconst Loader = styled(animated.div)<{ isLoading: boolean }>`\n width: 100%;\n height: 60px;\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n\n &:after {\n content: '';\n width: 24px;\n height: 24px;\n border: 2px solid rgba(0, 0, 0, 0.2);\n border-top: 2px solid rgba(0, 0, 0, 1);\n border-radius: 50%;\n opacity: 0.2;\n transition: opacity 0.3s;\n }\n\n ${(props) =>\n props.isLoading &&\n css`\n &:after {\n opacity: 0.5;\n animation: spin 1.5s cubic-bezier(0.46, 0.09, 0.54, 0.9) infinite;\n }\n `}\n`;\n\nconst spring1 = {\n tension: 350,\n friction: 34,\n};\n\ntype Props = {\n shouldPullToRefresh?: () => boolean;\n onRefresh: () => void;\n refreshDuration?: number;\n};\n\nenum RefreshStates {\n idle = 'idle',\n refreshing = 'refreshing',\n}\n\nconst stops = [0, 60];\n\nconst PullToRefresh: React.FC = ({ children, onRefresh, refreshDuration = 1500 }) => {\n const wrapperRef = React.useRef(null);\n\n const [state, setState] = React.useState(RefreshStates.idle);\n\n React.useEffect(() => {\n const script = document.createElement('script');\n\n script.src = 'https://cdnjs.cloudflare.com/ajax/libs/inobounce/0.2.0/inobounce.js';\n script.async = true;\n\n document.body.appendChild(script);\n\n return () => {\n document.body.removeChild(script);\n };\n }, []);\n\n const [{ y }, set] = useSpring<{ y: number }>(() => ({ y: 0 }));\n\n const bind = useDrag(\n ({ delta: [, dy], last, event }) => {\n if (!wrapperRef.current) return;\n if (state === RefreshStates.refreshing || window.scrollY > 0) return;\n\n if (last) {\n const point = findNearestNumberInArray(y.getValue(), stops);\n\n if (point === stops[1]) {\n setState(RefreshStates.refreshing);\n onRefresh();\n setTimeout(() => {\n set({ y: 0, immediate: false, config: spring1 });\n setState(RefreshStates.idle);\n }, refreshDuration);\n }\n\n set({ y: point, immediate: false, config: spring1 });\n\n return;\n }\n\n const newY = rubberBandIfOutOfBounds(stops[0], stops[1], y.getValue() + dy, 0.08);\n\n set({ y: newY, immediate: true });\n },\n {\n domTarget: wrapperRef.current,\n filterTaps: true,\n },\n );\n\n return (\n <>\n `translate3d(0, ${v - 60}px, 0)`) }}\n />\n `translate3d(0, ${v}px, 0)`),\n }}\n ref={wrapperRef}\n id=\"reservations\"\n >\n {children}\n \n \n );\n};\n\nexport default PullToRefresh;\n","// const isInStandaloneMode = () =>\n// window.matchMedia('(display-mode: standalone)').matches ||\n// // @ts-ignore\n// window.navigator.standalone ||\n// document.referrer.includes('android-app://');\n\nconst isInStandaloneMode = () => false;\n\nexport default isInStandaloneMode;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Label } from '../ui';\n\nconst Wrapper = styled.div`\n padding: 2rem;\n /* Border from https://kovart.github.io/dashed-border-generator/ */\n background-image: url(\"data:image/svg+xml,%3csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' rx='16' ry='16' stroke='%2311142D1F' stroke-width='4' stroke-dasharray='16' stroke-dashoffset='0' stroke-linecap='square'/%3e%3c/svg%3e\");\n border-radius: 16px; /* Important to do pixels here because of the dashed border exclusivly works with pixel values */\n\n display: flex;\n flex-direction: column;\n align-items: center;\n color: ${(props) => props.theme.colors.label};\n\n ${Label} {\n max-width: 70ch;\n text-align: center;\n }\n\n svg {\n opacity: 0.15;\n width: 3.5rem;\n height: auto;\n margin-bottom: 1rem;\n }\n`;\n\ntype Props = {\n text: string;\n style?: React.CSSProperties;\n className?: string;\n};\n\nconst EmptyPlanning: React.FC = ({ text, style, className }) => {\n return (\n \n \n \n \n \n \n \n );\n};\n\nexport default EmptyPlanning;\n","import { ChevronBack, ChevronForward } from '@styled-icons/ionicons-outline';\nimport moment from 'moment';\nimport React from 'react';\nimport styled from 'styled-components';\nimport { Heading, IconButton } from '../../ui';\n\nconst Wrapper = styled.div`\n display: flex;\n align-items: center;\n margin-top: 1rem;\n\n h1 {\n width: fit-content;\n font-weight: 500;\n text-transform: capitalize;\n }\n div {\n width: 2.5rem;\n height: 2.5rem;\n padding: 0;\n display: flex;\n }\n`;\n\ntype Props = {\n nextYear: () => void;\n prevYear: () => void;\n currentYear: number|string;\n disablePrev: boolean\n disableNext: boolean\n};\n\nconst YearNavigator = ({ nextYear, prevYear, currentYear, disablePrev, disableNext } : Props) => {\n let date: moment.Moment | string\n if (typeof currentYear == \"string\"){\n date = currentYear\n }\n else date = moment(`${currentYear}`, 'YYYY');\n return (\n \n {typeof date == \"string\" ? currentYear : date.format(`YYYY`)}\n \n {disableNext &&
}\n {disablePrev &&
}\n \n
\n );\n};\n\nexport default YearNavigator;\n","import moment, {Moment} from 'moment';\nimport React, {useEffect, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {PlanningUser, Reservation, RootState} from '../../global';\nimport PullToRefresh from '../Plannings/PullToRefresh';\nimport {Container, Heading, IconButton} from '../../ui';\nimport {Add} from '@styled-icons/material-outlined';\nimport isInStandaloneMode from '../../utils/isInStandaloneMode';\nimport { PlanningPopupStateAction } from '../../state/planningPopup';\nimport { fetchReservations } from '../../state/reservations';\nimport ReservationCard from '../../components/ReservationCard/ReservationCard';\nimport styled from 'styled-components';\nimport {Dictionary, groupBy, uniqBy} from 'lodash';\nimport EmptyPlanning from '../../components/EmptyPlanning';\nimport {setActionButton, setTitle} from '../../state/layout';\nimport getNextWorkableDay from '../../utils/getNextWorkableDay';\nimport YearNavigator from \"./YearNavigator\";\n\nconst ReservationCards = styled.ul`\n display: grid;\n gap: 3rem;\n\n list-style: none;\n\n h2 {\n margin-bottom: 1.5rem;\n\n span {\n margin-left: 1ch;\n }\n }\n`;\n\nconst ReservationsWeek = styled.ul`\n display: grid;\n gap: 1.5rem;\n grid-template-columns: repeat(auto-fill, minmax(min(20rem, 100%), 1fr));\n`;\n\nconst Reservations: React.FC = () => {\n const {reservations, state} = useSelector((state: RootState) => state.reservations);\n const {locations} = useSelector((state: RootState) => state.locations);\n const {user} = useSelector((state: RootState) => state.user);\n const dispatch = useDispatch();\n const [showPastReservations, setShowPastReservations] = useState(false);\n const [disablePrev, setDisablePrev] = useState(false);\n const [disableNext, setDisableNext] = useState(false);\n const thisYear = moment().year();\n const [reservationsYear, setReservationsYear] = useState(thisYear);\n const location = locations.find((l) => l.uuid === user?.preferredLocation?.uuid) || locations[0];\n const hasMultipleLocations = locations.length > 1;\n const minReservationYear = Math.min(...reservations.map(reservation => moment(reservation.date).year()));\n const maxReservationYear = Math.max(...reservations.map(reservation => moment(reservation.date).year()));\n\n useEffect(() => {\n if (reservationsYear <= minReservationYear) {\n setDisablePrev(true)\n } else {\n setDisablePrev(false)\n setShowPastReservations(false)\n }\n\n if (reservationsYear >= thisYear) {\n setDisableNext(true)\n } else {\n setDisableNext(false)\n setShowPastReservations(true)\n }\n }, [reservationsYear, minReservationYear, maxReservationYear])\n\n React.useEffect(() => {\n if (user && ['IDLE'].includes(state)) {\n dispatch(fetchReservations({userUuid: user.uuid}));\n }\n }, [user, reservations, dispatch, state]);\n\n React.useEffect(() => {\n dispatch(setTitle('Mijn reserveringen'));\n dispatch(\n setActionButton(\n \n location &&\n location.offices.length > 0 &&\n dispatch({\n type: 'OPEN_PLANNING_POPUP',\n payload: {date: getNextWorkableDay(), officeUuid: location.offices[0].uuid},\n })\n }\n >\n \n Reservering toevoegen\n ,\n ),\n );\n }, [dispatch, location]);\n\n const handleOnSelect = (date: Moment, officeUuid: string) => {\n dispatch({\n type: 'OPEN_PLANNING_POPUP',\n payload: {date, officeUuid},\n });\n };\n\n const onRefresh = () => {\n if (user) {\n dispatch(fetchReservations({userUuid: user.uuid}, false));\n }\n };\n\n if (!user) return null;\n\n const getReservationsByYear = (reservations: Reservation[], includePast: boolean, year?: number): Dictionary => {\n const filteredReservations = reservations.reduce>((planningArray, planning) => {\n const date = moment(planning.date);\n const isPast = date.isBefore(moment(), 'day');\n const reservationYear = date.year();\n\n // Only includes past reservations by year\n if (year && includePast && isPast && reservationYear === year) {\n const weekNumber = date.format('YYYY_W');\n (planningArray[weekNumber] = planningArray[weekNumber] || []).push(planning);\n }\n\n // Only include Present and future reservations\n else if (!includePast && !isPast) {\n const weekNumber = date.format('YYYY_W');\n (planningArray[weekNumber] = planningArray[weekNumber] || []).push(planning);\n }\n\n return planningArray;\n }, {});\n\n // Sort By week from low to high\n const sortedReservations: Dictionary = {};\n Object.keys(filteredReservations).sort().forEach((key) => {\n sortedReservations[key] = filteredReservations[key];\n });\n\n return sortedReservations;\n }\n\n const nextYear = () => {\n setReservationsYear(reservationsYear + 1);\n }\n\n const prevYear = () => {\n setReservationsYear(reservationsYear - 1);\n }\n\n const reservationByPastOrPresent = (reservationsYear === thisYear ? getReservationsByYear(reservations, showPastReservations) : getReservationsByYear(reservations, showPastReservations, reservationsYear))\n const inner = () => (\n \n Historische Reserveringen\n = thisYear ? \"Toekomstig\" : reservationsYear }/>\n {state !== 'SUCCESS' ? null : Object.entries(reservationByPastOrPresent).length > 0 ? (\n \n {Object.entries(reservationByPastOrPresent).map(([key, reservations]) => {\n const dates = groupBy(reservations, 'date');\n const date = moment(reservations[0].date);\n return (\n
  • \n \n Week {date.format('W')}\n {!date.isSame(moment(), 'year') && {date.format('YYYY')}}\n \n \n {Object.entries(dates)\n .sort((a, b) => moment(a[0]).valueOf() - moment(b[0]).valueOf())\n .map(([dateString, reservation]) => {\n const date = moment(dateString);\n\n return Object.entries(groupBy(reservation, 'locationUuid')).map(([locationUuid, plannings]) => {\n const location = locations.find((l) => l.uuid === locationUuid);\n if (!location) return null;\n\n return Object.entries(groupBy(plannings, 'officeUuid')).map(([officeUuid, plannings]) => {\n const office = location.offices.find((o) => o.uuid === officeUuid);\n\n if (!office) return null;\n\n const slotsFilled = plannings.reduce((a, b) => a + b.signedInUsers.length, 0);\n const users = uniqBy(\n plannings.reduce((a, b) => [...a, ...b.signedInUsers], []),\n 'uuid',\n );\n\n const hasCurrentUserPerDayPart = plannings.reduce<{ 0: boolean; 1: boolean }>(\n (a, b) => {\n if (b.signedInUsers.findIndex((u) => u.uuid === user.uuid) !== -1) {\n return {...a, [b.dayPart]: true};\n }\n return a;\n },\n {0: false, 1: false},\n );\n\n const planningTitle =\n hasCurrentUserPerDayPart[0] === true && hasCurrentUserPerDayPart[1] === true\n ? 'Hele dag'\n : hasCurrentUserPerDayPart[0] === true\n ? '08:00 - 13:00'\n : hasCurrentUserPerDayPart[1] === true\n ? '13:00 - 18:00'\n : undefined;\n\n const subtitle = hasMultipleLocations\n ? `${office.name} (${locations.find((l) => l.uuid === office.locationUuid)?.name})`\n : `${office.name}`;\n\n return (\n handleOnSelect(date, reservation[0].officeUuid)}\n holidays={date.isDutchHoliday(null, false)}\n asListItem={true}\n />\n );\n });\n });\n })}\n \n
  • \n );\n })}\n
    \n ) : (\n \n )}\n
    \n );\n\n return <>{isInStandaloneMode() ? {inner()} : inner()};\n};\n\nexport default Reservations;\n","import React, { useCallback, useEffect } from 'react';\n\nexport const useInfiniteScroll = (\n scrollRef: React.MutableRefObject,\n onIntersect: () => void,\n) => {\n const observer = React.useRef(null);\n\n const scrollObserver = useCallback(\n (node) => {\n observer.current = new IntersectionObserver((entries) => {\n entries.forEach((en) => {\n if (en.intersectionRatio > 0) {\n onIntersect();\n }\n });\n });\n observer.current.observe(node);\n },\n [onIntersect],\n );\n\n useEffect(() => {\n if (scrollRef.current) {\n scrollObserver(scrollRef.current);\n\n return () => {\n observer.current?.disconnect();\n };\n }\n }, [scrollObserver, scrollRef]);\n};\n\nexport default useInfiniteScroll;\n","import { Dictionary, uniqBy } from 'lodash';\nimport moment, { Moment } from 'moment';\nimport '@devmen/moment-feestdagen';\nimport React from 'react';\nimport { useSelector } from 'react-redux';\nimport styled from 'styled-components';\nimport ReservationCard from '../../components/ReservationCard/ReservationCard';\nimport { Office, Planning, PlanningUser, RootState } from '../../global';\nimport { Heading } from '../../ui';\nimport { datesGroupByComponent, isWeekend } from '../../utils/calendar';\n\nconst ReservationCards = styled.ul`\n display: grid;\n gap: 3rem;\n margin-top: 1rem;\n\n list-style: none;\n\n h3 {\n margin-bottom: 1.5rem;\n\n span {\n margin-left: 1ch;\n }\n }\n`;\n\nconst ReservationsWeek = styled.ul`\n display: grid;\n gap: 1.5rem;\n grid-template-columns: repeat(auto-fill, minmax(min(20rem, 100%), 1fr));\n`;\n\ntype Props = {\n dates: Moment[];\n indexedPlannings: Dictionary;\n offices: Office[];\n onSelect: (date: Moment, officeUuid: string) => void;\n};\n\nconst ReservationList: React.FC = ({ dates, indexedPlannings, offices, onSelect }) => {\n const { user } = useSelector((state: RootState) => state.user);\n const { locations } = useSelector((state: RootState) => state.locations);\n const { filters } = useSelector((state: RootState) => state.planningFilters);\n\n if (!user) return null;\n\n const weeks = datesGroupByComponent(dates, 'YYYY_W');\n\n const renderWeek = (dates: Moment[]) => {\n let hasContent = false;\n const week = dates.map((date) => {\n if (isWeekend(date)) return null;\n\n return (\n \n {offices.map((office) => {\n // Not good, working on a better solution.\n const key = Object.keys(indexedPlannings).find((p) => moment(p).isSame(date, 'date'));\n const dayParts = (key ? indexedPlannings[key] : []).filter((d) => d.officeUuid === office.uuid);\n const slotsFilled = dayParts.reduce((a, b) => a + b.signedInUsers.length, 0);\n const users = uniqBy(\n dayParts.reduce((a, b) => [...a, ...b.signedInUsers], []),\n 'uuid',\n );\n const hasCurrentUser = users.findIndex((userMatch) => userMatch.uuid === user.uuid) !== -1;\n const hasCurrentUserPerDayPart = dayParts.reduce<{ 0: boolean; 1: boolean }>(\n (a, b) => {\n if (b.signedInUsers.findIndex((userMatch) => userMatch.uuid === user.uuid) !== -1) {\n return { ...a, [b.dayPart]: true };\n }\n return a;\n },\n { 0: false, 1: false },\n );\n\n if (filters?.hasOwnProperty('user')) {\n if (!users.some((user) => user.uuid === filters.user)) {\n return null;\n } else {\n hasContent = true;\n }\n } else {\n hasContent = true;\n }\n\n const planningTitle =\n hasCurrentUserPerDayPart[0] === true && hasCurrentUserPerDayPart[1] === true\n ? 'Hele dag'\n : hasCurrentUserPerDayPart[0] === true\n ? '08:00 - 13:00'\n : hasCurrentUserPerDayPart[1] === true\n ? '13:00 - 18:00'\n : undefined;\n\n const title = date.year() === moment().year() ? date.format('dd DD MMMM') : date.format('dd DD MMMM YYYY');\n\n const subtitle =\n locations.length > 1\n ? `${office.name} (${locations.find((l) => l.uuid === office.locationUuid)?.name})`\n : `${office.name}`;\n\n return (\n onSelect(date, office.uuid)}\n key={office.uuid}\n subtitle={subtitle}\n holidays={date.isDutchHoliday(null, false)}\n asListItem={true}\n />\n );\n })}\n \n );\n });\n\n return hasContent ? week : null;\n };\n\n return (\n \n {Object.entries(weeks).map(([key, dates]) => {\n const week = renderWeek(dates);\n if (!week) return null;\n\n return (\n \n \n Week {dates[0].format('W')}\n {!dates[0].isSame(moment(), 'year') && {dates[0].format('YYYY')}}\n \n {week}\n \n );\n })}\n \n );\n};\n\nexport default ReservationList;\n","import { useRef, useEffect } from 'react';\n\nexport function usePrevious(value: T) {\n // The ref object is a generic container whose current property is mutable ...\n // ... and can hold any value, similar to an instance property on a class\n const ref = useRef();\n\n // Store current value in ref\n useEffect(() => {\n ref.current = value;\n }, [value]); // Only re-run if value changes\n\n // Return previous value (happens before update in useEffect above)\n return ref.current;\n}\n\nexport default usePrevious;\n","import { sortBy } from 'lodash';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { RootState } from '../../global';\nimport { OfficesStateAction } from '../../state/offices';\nimport ChipsSelector from '../../components/ChipsSelector';\nimport { getPlanningLocation } from './index';\n\nconst OfficesFilter = () => {\n const dispatch = useDispatch();\n const { untoggled } = useSelector((state: RootState) => state.offices);\n\n const user = useSelector((state: RootState) => state.user.user);\n const locations = useSelector((state: RootState) => state.locations.locations);\n const location = getPlanningLocation(locations, user?.preferredLocation?.uuid);\n\n const handleOnOfficeClick = (officeUuid: string) => {\n dispatch({ type: 'TOGGLE_OFFICE', payload: officeUuid });\n };\n if (!location) return null;\n const offices = location.offices.filter((o) => o.isActive);\n return (\n ({ label: o.name, id: o.uuid }))}\n renderReel={false}\n />\n );\n};\n\nexport default OfficesFilter;\n","import { ReactNode, useEffect, useRef } from 'react';\nimport styled from 'styled-components';\n\ntype ScrollViewProps = {\n children: ReactNode;\n maxHeight?: string;\n height?: string;\n};\n\nconst ScrollableContainer = styled.div`\n position: relative;\n\n container: scrollview / inline-size;\n @container scrollview (max-width: 4500px) {\n > .scrollable {\n background: red;\n }\n }\n\n &:before,\n &:after {\n // overflow indicator (for bottom)\n content: '';\n position: absolute;\n background-image: linear-gradient(\n 0deg,\n ${(props) => props.theme.colors.cardBackground}ff,\n ${(props) => props.theme.colors.cardBackground}00\n );\n inset: calc(100% - 50px) 0 0 0;\n pointer-events: none;\n z-index: 10;\n opacity: 0;\n transition: opacity 0.3s ease-out;\n }\n\n &:before {\n // overflow indicator (for top)\n inset: 0 0 calc(100% - 50px) 0;\n background-image: linear-gradient(\n 180deg,\n ${(props) => props.theme.colors.cardBackground}ff,\n ${(props) => props.theme.colors.cardBackground}00\n );\n }\n\n &:not([data-scroll-top='0']):before {\n opacity: 1;\n }\n\n &:not([data-scroll-bottom='0']):after {\n opacity: 1;\n }\n\n > .scrollable {\n overflow-y: auto;\n }\n`;\n\nconst ScrollView = ({ children, maxHeight = '100%', height = '100%' }: ScrollViewProps) => {\n const parentRef = useRef(null);\n const scrollContainerRef = useRef(null);\n\n // Scrolloffset\n useEffect(() => {\n const onScroll = (e: any) => {\n parentRef.current?.setAttribute('data-scroll-top', e.target.scrollTop ?? 0);\n parentRef.current?.setAttribute(\n 'data-scroll-bottom',\n (scrollContainerRef.current?.scrollHeight ?? 0) - (e.target.scrollTop + e.target.clientHeight) + '',\n );\n };\n\n const scrollContainer = scrollContainerRef.current;\n if (scrollContainer) {\n scrollContainer.addEventListener('scroll', onScroll);\n }\n\n return () => {\n if (scrollContainer) {\n scrollContainer.removeEventListener('scroll', onScroll);\n }\n };\n }, [scrollContainerRef]);\n\n return (\n \n \n {children}\n \n \n );\n};\n\nexport default ScrollView;\n","import { useState, useCallback } from 'react';\nimport ReactDOM from 'react-dom';\nimport { usePopper } from 'react-popper';\nimport ScrollView from '../ScrollView/ScrollView';\nimport { FilterSearchable } from './Filter';\nimport { CSSTransition } from 'react-transition-group';\nimport styled from 'styled-components';\nimport { Input } from '../Input/Input';\nimport { Label } from '../Label/Label';\n\nconst portalRoot = document.getElementById('portal');\n\nconst FilterDropdownHeader = styled.div``;\nconst FilterDropdownBody = styled.div`\n margin-top: 0.75rem;\n`;\nconst FilterResultItem = styled.div`\n margin-block: 0.75rem;\n`;\n\nconst FilterDropdown = styled.div`\n background-color: ${(props) => props.theme.colors.cardBackground};\n padding: 1rem;\n box-shadow: 0 0.8px 2.1px rgba(0, 0, 0, 0.02), 0 2.7px 6.9px rgba(0, 0, 0, 0.03), 0 12px 31px rgba(0, 0, 0, 0.05);\n border-radius: 0.75rem;\n\n /* width: MIN(100%, 20rem); */\n width: 100%;\n\n opacity: 0;\n transform: translateY(-50px);\n transition: 0.15s ease;\n`;\n\nconst FilterUnderlay = styled.div`\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.4);\n opacity: 0;\n transition: 0.15s ease;\n`;\n\nconst FilterPortal = styled.div`\n display: flex;\n justify-content: center;\n position: fixed;\n left: 0;\n top: 0;\n width: 100%;\n height: 100vh;\n z-index: 1001;\n overflow-y: hidden;\n align-items: center;\n\n &.filter-popover-enter-done {\n ${FilterUnderlay} {\n opacity: 1;\n }\n\n ${FilterDropdown} {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n @media screen and (max-width: 695px) {\n > .popperContainer {\n width: calc(100% - 2rem);\n }\n }\n`;\n\nexport type FilterPopOverProps = {\n isActive: boolean;\n setIsActive: React.Dispatch>;\n unit: string;\n items: FilterSearchable[];\n handleSelectOption: (id: any) => void;\n referenceElement: any;\n};\n\nexport default function FilterPopOver({\n isActive,\n setIsActive,\n unit,\n items,\n handleSelectOption,\n referenceElement,\n}: FilterPopOverProps) {\n const [filteredItems, setFilteredItems] = useState(null);\n\n const filterItems = useCallback(\n (event: React.ChangeEvent) => {\n if (event.target.value.trim().length === 0) return setFilteredItems(null);\n\n const value = event.target.value.trim().toLowerCase().replace(/ /g, '');\n\n const filteredResults = items.filter((item) => {\n return item.value.toLowerCase().indexOf(value) > -1;\n });\n setFilteredItems(filteredResults);\n },\n [items],\n );\n\n const [popperElement, setPopperElement] = useState(null);\n const { styles, attributes } = usePopper(referenceElement, popperElement, {\n placement: 'bottom-start',\n modifiers: [\n {\n name: 'offset',\n options: {\n offset: [0, 10],\n },\n },\n ],\n });\n\n if (!portalRoot) return null;\n\n return ReactDOM.createPortal(\n \n \n setIsActive(false)} />\n setPopperElement(ref)}\n style={styles.popper}\n {...attributes.popper}\n >\n \n \n \n \n \n \n \n {(filteredItems ?? items).map((item: any, index: any) => (\n handleSelectOption(item.id)}>\n {item.children}\n \n ))}\n \n \n \n \n \n ,\n portalRoot,\n );\n}\n","import { ChevronDown, Close } from '@styled-icons/ionicons-outline';\nimport styled from 'styled-components';\nimport { ReactElement, useEffect, useState } from 'react';\nimport FilterPopOver from './FilterPopover';\n\nconst FilterToggle = styled.button`\n border: none;\n background: none;\n padding: 0;\n position: relative;\n`;\n\nconst FilterToggleBody = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n\n padding: 0.5rem 1rem;\n border: 2px solid ${(props) => props.theme.colors.border};\n\n font-family: ${(props) => props.theme.fonts.body};\n font-weight: 500;\n border-radius: 0.75rem;\n cursor: pointer;\n height: 2.25rem;\n color: ${(props) => props.theme.colors.label};\n\n &.hasValue {\n background: ${(props) => props.theme.colors.label};\n color: ${(props) => props.theme.colors.onLabel};\n border-color: ${(props) => props.theme.colors.label};\n }\n\n svg {\n margin-left: 2rem;\n width: 1.5rem;\n height: 1.5rem;\n * {\n stroke: ${(props) => props.theme.colors.label};\n }\n }\n\n &.hasValue {\n svg {\n * {\n stroke: ${(props) => props.theme.colors.onLabel};\n }\n }\n }\n`;\n\nexport type FilterSearchable = {\n children: Element | ReactElement | null;\n id: any;\n value: string;\n};\n\nexport type Props = {\n filterName?: string;\n unit?: string;\n items?: FilterSearchable[] | undefined;\n handleAppliedFilter?: (id: string | number | null) => void;\n selected?: string | number;\n};\n\nconst Filter = ({\n filterName = 'FilterName',\n unit = '',\n items = [],\n handleAppliedFilter = () => {},\n selected,\n}: Props) => {\n const [isActive, setIsActive] = useState(false);\n const [selectedOption, setSelectedOption] = useState(null);\n\n // Popper for positioning\n const [referenceElement, setReferenceElement] = useState(null);\n\n const handleSelectOption = (id: string | number) => {\n if (id) {\n setSelectedOption(id);\n }\n handleAppliedFilter(id ?? null);\n setIsActive(false);\n };\n\n useEffect(() => {\n if (selected) {\n setSelectedOption(selected);\n }\n }, [selected]);\n\n return (\n \n
    setReferenceElement(ref)}>\n setIsActive(!isActive)} className={selectedOption ? 'hasValue' : ''}>\n {selectedOption && items !== undefined\n ? items.find((search) => search.id === selectedOption)?.value\n : filterName}{' '}\n {selectedOption == null ? (\n \n ) : (\n {\n e.stopPropagation();\n setSelectedOption(null);\n handleAppliedFilter(null);\n }}\n />\n )}\n \n
    \n\n \n
    \n );\n};\n\nexport default Filter;\n","import { useEffect, useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\nimport { RootState, User } from '../../global';\nimport { fetchAllUsers } from '../../state/users';\nimport { Avatar } from '../../ui/Avatar/Avatar';\nimport Filter, { FilterSearchable } from '../../ui/Filter/Filter';\nimport { Label } from '../../ui/Label/Label';\n\nconst UserEntry = styled.div`\n display: flex;\n align-items: center;\n ${Label} {\n margin-left: 0.5rem;\n }\n\n &:hover {\n cursor: pointer;\n position: relative;\n z-index: 0;\n &:before {\n content: '';\n inset: 0;\n position: absolute;\n background-color: ${(props) => props.theme.colors.primary};\n opacity: 0.2;\n border-radius: 1rem;\n z-index: -1;\n }\n }\n`;\n\nconst UserFilter = () => {\n const dispatch = useDispatch();\n const { users, success } = useSelector((state: RootState) => state.users);\n const { user: loggedInUser } = useSelector((state: RootState) => state.user);\n const { filters } = useSelector((state: RootState) => state.planningFilters);\n\n useEffect(() => {\n if (success) return;\n dispatch(fetchAllUsers());\n return () => {};\n }, [dispatch, success]);\n\n const userIsCurrent = (user: User, loggedInUser: User | null) => {\n return !(user.uuid === loggedInUser?.uuid);\n };\n\n const setAppliedFilter = (id: string | number | null) => {\n if (id === null) {\n dispatch({ type: 'UNSET_FILTER_KEY', payload: { key: 'user' } });\n } else {\n dispatch({ type: 'UPDATE_FILTERS', payload: { filters: { ...filters, user: id } } });\n }\n };\n\n const filterUsers: FilterSearchable[] | undefined = useMemo(() => {\n const returnUsers = users?.filter((user) => userIsCurrent(user, loggedInUser));\n\n if (returnUsers === undefined) return [];\n\n return returnUsers?.map((user) => {\n return {\n id: user.uuid,\n value: user.name,\n children: (\n \n \n \n \n ),\n } as FilterSearchable;\n });\n }, [users, loggedInUser]);\n\n return (\n \n );\n};\n\nexport default UserFilter;\n","import { Reel } from '../../components/ChipsSelector';\nimport { Label } from '../../ui';\nimport OfficesFilter from './OfficesFilter';\nimport UserFilter from './UserFilter';\n\nconst PlanningFilters = () => {\n return (\n \n \n
    \n \n
    \n \n
    \n );\n};\n\nexport default PlanningFilters;\n","import moment, { Moment } from 'moment';\nimport React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Planning, RootState, Location } from '../../global';\nimport PullToRefresh from './PullToRefresh';\nimport EmptyPlanning from '../../components/EmptyPlanning';\nimport { Container, Label, IconButton } from '../../ui';\nimport { Add } from '@styled-icons/material-outlined';\nimport isInStandaloneMode from '../../utils/isInStandaloneMode';\nimport useInfiniteScroll from '../../utils/useInfiniteScroll';\nimport { groupBy, throttle } from 'lodash';\nimport { PlanningPopupStateAction } from '../../state/planningPopup';\nimport { fetchPlanningBlock } from '../../state/plannings';\nimport { generateDaysInMonth } from '../../utils/calendar';\nimport PlanningList from './PlanningList';\nimport usePrevious from '../../utils/usePrevious';\nimport styled from 'styled-components';\nimport { setTitle, setActionButton, setScrollbarData } from '../../state/layout';\nimport getNextWorkableDay from '../../utils/getNextWorkableDay';\nimport PlanningFilters from './PlanningFilters';\n\nconst LoadingIndicator = styled(Label)`\n width: 100%;\n text-align: center;\n padding: 2rem;\n`;\n\nexport function getPlanningLocation(locations: Location[], preferredLocationUuid: string | undefined) {\n if (locations.length === 1 || !preferredLocationUuid) {\n return locations[0];\n }\n return locations.find((l) => l.uuid === preferredLocationUuid);\n}\n\nconst Plannings: React.FC = () => {\n const planning = useSelector((state: RootState) => state.planning);\n const user = useSelector((state: RootState) => state.user.user);\n const locations = useSelector((state: RootState) => state.locations.locations);\n const { untoggled } = useSelector((state: RootState) => state.offices);\n const { filters } = useSelector((state: RootState) => state.planningFilters);\n\n const location = getPlanningLocation(locations, user?.preferredLocation?.uuid);\n const offices = location ? location.offices.filter((o) => o.isActive) : [];\n\n const selectedOffices = offices.filter((o) => !untoggled.includes(o.uuid));\n\n const dispatch = useDispatch();\n\n const loaderRef = React.createRef();\n\n const [showMonths, setShowMonths] = React.useState(12);\n const [count, setCount] = React.useState(0);\n const prevCount = usePrevious(count);\n\n const months = Array.apply(null, Array(showMonths));\n\n const dates = React.useMemo(() => {\n const today = moment();\n return months\n .reduce((a, b, index) => {\n const currentMonthAndYear = today.clone().add(index, 'month');\n return [...a, ...generateDaysInMonth(currentMonthAndYear.month() + 1, currentMonthAndYear.year())];\n }, [])\n .filter((x) => !x.isBefore(today, 'date'));\n }, [months]);\n\n const handleOnSelect = (date: Moment, officeUuid: string) => {\n dispatch({\n type: 'OPEN_PLANNING_POPUP',\n payload: { date, officeUuid },\n });\n };\n\n React.useEffect(() => {\n dispatch(setTitle('Reserveringen'));\n dispatch(\n setActionButton(\n \n selectedOffices.length > 0 &&\n dispatch({\n type: 'OPEN_PLANNING_POPUP',\n payload: { date: getNextWorkableDay(), officeUuid: selectedOffices[0].uuid },\n })\n }\n >\n \n Reservering toevoegen\n ,\n ),\n );\n }, [dispatch, selectedOffices]);\n\n const keys = React.useMemo(\n () =>\n months.reduce((a, b, index) => {\n const currentMonthAndYear = moment().add(index, 'month');\n const keys = selectedOffices.map(\n (office) => `${office.uuid}_${currentMonthAndYear.year()}_${currentMonthAndYear.month() + 1}`,\n );\n return [...a, ...keys];\n }, []),\n [months, selectedOffices],\n );\n\n React.useEffect(() => {\n keys.forEach((key) => {\n const [officeUuid, year, month] = key.split('_');\n dispatch(\n fetchPlanningBlock({\n month: parseInt(month),\n year: parseInt(year),\n officeUuid,\n }),\n );\n });\n }, [keys, dispatch]);\n\n const plannings = keys.reduce((a, b) => (b in planning ? [...a, ...planning[b].plannings] : a), []);\n const planningDates = groupBy(plannings, 'date');\n\n const onReachEnd = function () {\n if (Object.entries(filters).length === 0) {\n setShowMonths(showMonths + 1);\n } else {\n setShowMonths(12);\n }\n };\n\n React.useEffect(() => {\n dispatch(setScrollbarData(dates));\n\n return () => {\n dispatch(setScrollbarData(null));\n };\n }, [dates, dispatch]);\n\n React.useEffect(() => {\n const currentMonthAndYear = moment().add(showMonths - 1, 'month');\n selectedOffices.forEach((office) =>\n dispatch(\n fetchPlanningBlock(\n {\n month: currentMonthAndYear.month() + 1,\n year: currentMonthAndYear.year(),\n officeUuid: office.uuid,\n },\n prevCount === count,\n ),\n ),\n );\n }, [dispatch, selectedOffices, showMonths, count, prevCount, user]);\n\n const onRefresh = () => {\n if (showMonths === 1) setCount(count + 1);\n setShowMonths(1);\n };\n\n useInfiniteScroll(loaderRef, throttle(showMonths < 12 ? onReachEnd : () => {}, 2000));\n\n if (!location) return null;\n\n const inner = () => (\n \n \n {selectedOffices.length > 0 ? (\n \n ) : (\n 0 ? '1.5rem' : 0 }}\n text='Er zijn geen reserveringen. Reserveer jouw werkplek door rechtsbovenin het plus icoon te selecteren of in de agenda te kijken.'\n />\n )}\n \n {showMonths === 12 && Object.entries(filters).length === 0\n ? 'Dit is het einde, kom later terug om hier te reserveren!'\n : ''}\n {Object.entries(filters).length === 0\n ? ''\n : 'Voor de volgende 12 maanden zijn er niet meer reserveringen gevonden.'}\n \n \n );\n\n return <>{isInStandaloneMode() ? {inner()} : inner()};\n};\n\nexport default Plannings;\n","import axios from 'axios';\nimport { toast } from 'react-toastify';\nimport { ThunkAction } from 'redux-thunk';\nimport { CompanyStateAction } from '.';\nimport { Company, RootState } from '../../global';\n\ntype CompaniesResponse = {\n name: string;\n uuid: string;\n}[];\n\ntype CompanyResponse = {\n name: string;\n uuid: string;\n creditsPerUser: number;\n};\n\ntype CompanyThunk = ThunkAction;\n\nexport const fetchCompany = (): CompanyThunk => async (dispatch, getState) => {\n dispatch({ type: 'FETCH_COMPANY_REQUEST' });\n\n try {\n const response = await axios.get('/api/Companies');\n\n if (response && response.data.length > 0) {\n const res = await axios.get(`/api/Companies/${response.data[0].uuid}`);\n\n const company: Company = {\n name: res.data.name,\n uuid: res.data.uuid,\n creditsPerUser: res.data.creditsPerUser,\n usesCredits: res.data.creditsPerUser !== 365,\n };\n\n dispatch({ type: 'FETCH_COMPANY_SUCCESS', payload: company });\n }\n } catch (e: any) {\n toast.error(e.response?.data || 'Er is iets fout gegaan tijdens het ophalen van een organisatie.');\n dispatch({ type: 'FETCH_COMPANY_FAILED' });\n }\n};\n\ntype UpdateCompanyProps = {\n name: string;\n creditsPerUser: number;\n};\n\nexport const updateCompany =\n ({ name, creditsPerUser }: UpdateCompanyProps): CompanyThunk =>\n async (dispatch, getState) => {\n const company = getState().companies.company;\n\n if (!company) return;\n\n const response = await axios({\n url: `/api/Companies/${company.uuid}`,\n method: 'PATCH',\n data: { name, creditsPerUser },\n }).catch((e) => {\n toast.error(e.response?.data || 'Er is iets fout gegaan met het updaten van de bedrijfsinstellingen');\n });\n\n if (response) {\n toast.success('Bedrijfsinstellingen geupdated.');\n dispatch(fetchCompany());\n }\n };\n","import { Reducer } from 'redux';\nimport { Company } from '../../global';\n\ntype FETCH_COMPANY_REQUEST = { type: 'FETCH_COMPANY_REQUEST' };\ntype FETCH_COMPANY_SUCCESS = { type: 'FETCH_COMPANY_SUCCESS'; payload: Company };\ntype FETCH_COMPANY_FAILED = { type: 'FETCH_COMPANY_FAILED' };\n\nexport type CompanyStateAction = FETCH_COMPANY_REQUEST | FETCH_COMPANY_SUCCESS | FETCH_COMPANY_FAILED;\n\nexport type CompanyState = {\n loading: boolean;\n success: boolean;\n error: boolean;\n company: Company | null;\n};\n\nconst initialState: CompanyState = {\n loading: true,\n success: false,\n error: false,\n company: null,\n};\n\nconst companyReducer: Reducer = (state = initialState, action) => {\n switch (action.type) {\n case 'FETCH_COMPANY_REQUEST':\n return { ...state, loading: true, success: false, error: false };\n case 'FETCH_COMPANY_SUCCESS':\n return {\n ...state,\n loading: false,\n success: true,\n error: false,\n company: action.payload,\n };\n case 'FETCH_COMPANY_FAILED':\n return { ...state, loading: false, success: false, error: true };\n default:\n return state;\n }\n};\n\nexport { fetchCompany, updateCompany } from './thunks';\nexport default companyReducer;\n","import React from 'react';\nimport { SubmitHandler, useForm, Controller } from 'react-hook-form';\nimport { Button, FormField, Input, Form, Switch } from '../../ui';\n\nexport type EditFormData = {\n name: string;\n creditsPerUser: string;\n usesCredits: boolean;\n};\n\nconst EditForm: React.FC }> = ({\n name,\n creditsPerUser,\n usesCredits,\n onSubmit,\n}) => {\n const { handleSubmit, register, control, watch } = useForm({\n defaultValues: {\n name: name,\n creditsPerUser: creditsPerUser === '365' ? '2' : creditsPerUser,\n usesCredits: usesCredits,\n },\n });\n\n const usesCreditsToggled = watch('usesCredits');\n\n return (\n
    \n \n \n \n \n (\n \n onChange(e.target.checked)} checked={value} />\n \n )}\n />\n \n {usesCreditsToggled && (\n \n \n \n )}\n Opslaan\n
    \n );\n};\n\nexport default EditForm;\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\nimport { RootState } from '../../global';\nimport { ValueLabel, Button, IconButton, Drawer, Modal, ElevatedCard, Container } from '../../ui';\nimport { Edit } from '@styled-icons/material-outlined';\nimport useWindowSize from '../../utils/useWindowSize';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { CompanyStateAction, updateCompany } from '../../state/companies';\nimport CompanySettingsForm, { EditFormData } from './EditForm';\nimport { setTitle, setActionButton, LayoutStateAction } from '../../state/layout';\n\nconst SettingsBody = styled(ElevatedCard)`\n padding: 2rem;\n\n & > * + * {\n margin-top: 2rem;\n }\n\n ${Button.Primary} {\n width: 100%;\n }\n`;\n\nconst CompanySettings: React.FC = () => {\n const dispatch: ThunkDispatch = useDispatch();\n const { user } = useSelector((state: RootState) => state.user);\n const { company } = useSelector((state: RootState) => state.companies);\n const [isOpen, setIsOpen] = React.useState(false);\n const { isMobileDevice } = useWindowSize();\n\n const onSubmit = (data: EditFormData) => {\n dispatch(\n updateCompany({ name: data.name, creditsPerUser: data.usesCredits ? parseInt(data.creditsPerUser) : 365 }),\n );\n };\n\n React.useEffect(() => {\n dispatch(setTitle('Bedrijfsinstellingen'));\n dispatch(\n setActionButton(\n setIsOpen(true)}>\n \n Bedrijfsinstellingen bewerken\n ,\n ),\n );\n }, [dispatch, setIsOpen]);\n\n if (!user || !company) return null;\n\n const Element = isMobileDevice ? Drawer : Modal;\n\n return (\n <>\n setIsOpen(false)} title=\"Bedrijfsinstellingen\">\n \n \n\n \n \n \n {company.usesCredits && (\n \n )}\n \n \n \n );\n};\n\nexport default CompanySettings;\n","import React from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\n\nimport { RootState, User } from '../global';\nimport { Avatar as _Avatar, FormField, Input, Container, Heading, Label } from '../ui';\nimport { fetchAllUsers } from '../state/users';\nimport styled from 'styled-components';\nimport { ElevatedCard } from '../ui';\n\nimport { LocationOn, Search } from '@styled-icons/material-outlined';\nimport { sortBy } from 'lodash';\nimport ChipsSelector from '../components/ChipsSelector';\nimport { setTitle, setActionButton } from '../state/layout';\n\nconst Avatar = styled(_Avatar)`\n grid-row: span 2;\n`;\n\nconst UserCards = styled.div`\n display: grid;\n gap: 1.5rem;\n margin-top: 1.5rem;\n`;\n\nconst Card = styled(ElevatedCard)`\n display: grid;\n grid-template-columns: 3rem minmax(0, 1fr);\n gap: 1rem;\n padding: 2rem;\n overflow: hidden;\n\n ul {\n padding: 0;\n grid-column: 2;\n grid-row: 2;\n display: grid;\n gap: 0.5rem;\n margin: 0;\n }\n\n ${Heading} {\n grid-column: span 2;\n }\n`;\n\nconst UserCardLabel = styled(Label).attrs(() => ({\n as: 'li',\n type: 'muted',\n size: 'small',\n}))`\n display: flex;\n align-items: center;\n\n svg {\n height: 1.25rem;\n width: 1.25rem;\n margin-right: 0.5rem;\n color: ${(props) => props.theme.colors.label};\n }\n`;\n\nconst Credits = styled(Label)`\n font-weight: 600;\n width: 1.25rem;\n text-align: center;\n margin-right: 0.5rem;\n color: ${(props) => props.theme.colors.label};\n`;\n\nconst UserCard: React.FC<{ user: User; showCredits: boolean }> = ({ user, showCredits }) => {\n return (\n \n {user.name}\n \n
      \n \n {user.preferredLocation?.name || 'Nog geen voorkeurslocatie'}\n \n {showCredits && (\n \n {user.credits} credits\n \n )}\n
    \n
    \n );\n};\n\nconst Icon = styled(Search)`\n position: absolute;\n left: 1rem;\n top: 1rem;\n color: ${(props) => props.theme.colors.muted};\n\n & + input {\n padding-left: 3rem;\n }\n`;\n\nconst UserSettings: React.FC = () => {\n const dispatch = useDispatch();\n const locations = useSelector((state: RootState) => state.locations.locations);\n const { company } = useSelector((state: RootState) => state.companies);\n const { users } = useSelector((state: RootState) => state.users);\n const [selectedLocations, setSelectedLocations] = React.useState([]);\n\n const [searchValue, setSearchValue] = React.useState('');\n\n const filteredUsers = sortBy(\n (users || [])\n .filter((u) =>\n selectedLocations.length > 0 ? selectedLocations.includes(u.preferredLocation?.name || '') : true,\n )\n .filter((u) =>\n searchValue ? u.name.toUpperCase().replace(' ', '').includes(searchValue.toUpperCase().replace(' ', '')) : true,\n ),\n 'name',\n );\n\n const handleSelectLocation = (locationName: string) => {\n if (selectedLocations.includes(locationName)) {\n setSelectedLocations(selectedLocations.filter((l) => l !== locationName));\n } else {\n setSelectedLocations([...selectedLocations, locationName]);\n }\n };\n\n React.useEffect(() => {\n dispatch(fetchAllUsers());\n }, [dispatch]);\n\n React.useEffect(() => {\n dispatch(setTitle('Gebruikers'));\n dispatch(setActionButton(undefined));\n }, [dispatch]);\n\n return (\n \n ({ label: l.name, id: l.name }))}\n />\n \n \n setSearchValue(e.target.value)} />\n \n \n {filteredUsers.map((user) => (\n \n ))}\n \n \n );\n};\n\nexport default UserSettings;\n","import React from 'react';\nimport { Redirect } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\nimport styled from 'styled-components';\nimport { Microsoftoffice } from '@styled-icons/simple-icons';\nimport { Heading, Button } from '../ui';\nimport { RootState } from '../global';\n\nexport const Styled = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n touch-action: none;\n padding: 3rem 1rem;\n\n .logo {\n border-radius: 1rem;\n width: 6rem;\n height: auto;\n }\n\n h1 {\n margin: 0.25rem 0 3rem 0;\n font-weight: 600;\n font-size: 2.5rem;\n color: ${(props) => props.theme.colors.primary};\n }\n`;\n\nexport const Container = styled.div`\n padding: 2.5rem 2rem;\n margin: 1rem;\n max-width: 350px;\n width: 100%;\n display: flex;\n flex-direction: column;\n background-color: ${(props) => props.theme.colors.primary};\n border-radius: 24px;\n box-shadow: 0px 16px 0px -8pxrgb (135, 122, 219), 0px 30px 0px -16px rgb(178, 170, 232);\n -webkit-box-shadow: 0px 16px 0px -8px rgb(135, 122, 219), 0px 30px 0px -16px rgb(178, 170, 232);\n -moz-box-shadow: 0px 16px 0px -8px rgb(135, 122, 219), 0px 30px 0px -16px rgb(178, 170, 232);\n\n .title {\n width: 100%;\n font-family: ${(props) => props.theme.fonts.heading};\n text-align: center;\n color: white;\n margin-bottom: 1rem;\n font-size: 1.5rem;\n }\n\n .body {\n font-weight: 300;\n line-height: 1.5;\n width: 100%;\n text-align: center;\n font-size: 0.875rem;\n margin-bottom: 4rem;\n color: rgba(255, 255, 255, 0.7);\n }\n\n ${Heading} {\n font-weight: 600;\n color: ${(props) => props.theme.colors.primary};\n font-size: 3.5rem;\n }\n`;\n\nexport const LoginButton = styled(Button.Primary)`\n font-weight: 600;\n background: white;\n color: black;\n box-shadow: 0px 3px 12px -3px rgba(0, 0, 0, 0.75);\n\n svg {\n margin-right: 0.5rem;\n margin-left: -0.25rem;\n height: 1.5rem;\n }\n\n &:hover {\n background: rgba(255, 255, 255, 0.9);\n }\n\n &:disabled {\n box-shadow: 0px 3px 12px -3px rgba(0, 0, 0, 0);\n opacity: 0.5;\n }\n`;\n\nconst Intro: React.FC = () => {\n const { user } = useSelector((state: RootState) => state.user);\n\n if (user) {\n ;\n }\n\n return (\n \n \n \n \n \n \n Deskie\n \n Inloggen\n Log hier in met je Office 365 account door op de knop te tikken.\n (window.location.href = '/login/az')}>\n \n Inloggen met Office 365\n \n \n \n );\n};\n\nexport default Intro;\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { RootState } from '../global';\nimport { Heading, FormField, Select, Form } from '../ui';\nimport { updateUser, UserStateAction } from '../state/users';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { Styled, Container, LoginButton } from './Intro';\nimport { toast } from 'react-toastify';\n\nconst Onboarding: React.FC = () => {\n const { locations } = useSelector((state: RootState) => state.locations);\n\n const dispatch: ThunkDispatch = useDispatch();\n\n const [selectedLocationUuid, setSelectedLocation] = React.useState('');\n\n const handleSubmit = (event: React.FormEvent) => {\n event.preventDefault();\n\n if (selectedLocationUuid) {\n dispatch(updateUser({ preferredLocationUuid: selectedLocationUuid })).then(() => {\n toast.success('Voorkeurslocatie ingesteld.');\n });\n }\n };\n\n return (\n \n \n \n \n \n \n Deskie\n \n Welkom!\n \n Vul jouw voorkeurslocatie in om Deskie optimaal te kunnen gebruiken. Dit is later aan te passen in jouw\n instellingen.\n \n
    \n \n \n \n Opslaan\n
    \n
    \n
    \n );\n};\n\nexport default Onboarding;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Label } from '../ui';\nimport { Info } from '@styled-icons/material-outlined';\n\nconst Styled = styled.div`\n display: flex;\n\n svg {\n color: ${(props) => props.theme.colors.faded};\n height: 1rem;\n width: 1rem;\n margin-right: 0.5rem;\n flex-shrink: 0;\n margin-top: 0.125rem;\n }\n`;\n\ntype Props = {\n cost: number;\n userCredits: number;\n};\n\nconst ReservationCreditInfo: React.FC = ({ cost, userCredits }) => {\n const creditOrCredits = (amount: number) => (amount === 1 ? 'credit' : 'credits');\n return (\n \n \n \n \n );\n};\n\nexport default ReservationCreditInfo;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Label } from '../ui';\nimport { Info } from '@styled-icons/material-outlined';\n\nconst Styled = styled.div`\n display: flex;\n\n svg {\n color: ${(props) => props.theme.colors.muted};\n height: 1rem;\n width: 1rem;\n margin-right: 0.5rem;\n flex-shrink: 0;\n margin-top: 0.125rem;\n }\n`;\n\ntype Props = {\n text?: string;\n};\n\nconst ReservationInfo: React.FC = ({ text, children }) => {\n return (\n \n \n \n \n );\n};\n\nexport default ReservationInfo;\n","import { CalendarToday } from '@styled-icons/material-outlined/CalendarToday';\nimport moment from 'moment';\nimport { Moment } from 'moment';\nimport { useEffect, useState } from 'react';\nimport { toast } from 'react-toastify';\nimport styled from 'styled-components';\nimport { FormField } from '../../ui';\n\nconst InputWrapper = styled.div`\n width: 100%;\n display: flex;\n align-items: center;\n height: 3.5rem;\n padding: 0 0 0 1rem;\n font: inherit;\n border: 1px solid ${(props) => props.theme.colors.inputBorder};\n border-radius: 0.5rem;\n box-shadow: none;\n background: ${(props) => props.theme.colors.inputBackground};\n -webkit-appearance: none;\n cursor: pointer;\n input {\n color: ${(props) => props.theme.colors.label};\n font: inherit;\n background: transparent;\n }\n\n &:has(input:focus) {\n border-color: ${(props) => props.theme.colors.primary};\n box-shadow: 0px 0px 0px 1px ${(props) => props.theme.colors.primary};\n outline: 0;\n }\n`;\n\nconst ShadowInput = styled.input`\n width: 100%;\n border: none;\n &:focus {\n outline: none;\n }\n`;\n\nconst ShadowDateInputToggle = styled.span`\n display: inline-block;\n position: relative;\n width: 50px;\n height: 50px;\n padding: 10px 1rem 10px 10px;\n\n .toggleButton {\n height: 100%;\n display: flex;\n pointer-events: none;\n }\n\n input[type='date'] {\n position: absolute;\n opacity: 0;\n visibility: none;\n width: 50px;\n height: 50px;\n top: 0;\n left: 0;\n cursor: pointer;\n pointer-events: all;\n\n ::-webkit-calendar-picker-indicator {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 30px;\n height: 30px;\n margin: 0;\n padding: 0;\n cursor: pointer;\n }\n\n @-moz-document url-prefix() {\n padding: 10px;\n }\n }\n`;\n\ntype DateInputFieldProps = {\n message: string | undefined;\n label: string;\n dateChangeCallBack: any;\n value: Moment;\n};\n\nexport function DateInputField({ message, label, dateChangeCallBack, value }: DateInputFieldProps) {\n const [selectedDate, setSelectedDate] = useState(value);\n // const [oldDate, setOldDate] = useState(value);\n\n const [dateInput, setDateInput] = useState(value.format('YYYY-MM-DD'));\n const [textInput, setTextInput] = useState(value.format('DD-MM-YYYY'));\n\n const handleDateInputChanged = (e: any) => {\n const val: string = e.target.value;\n const parsedValue = moment(val, 'YYYY-MM-DD');\n\n if (!parsedValue.isValid()) {\n // Handle invalid date.\n toast.error(\"Ongeldige datum. Vul in als 'dd-mm-jjjj'\");\n setDateInput(selectedDate.format('YYYY-MM-DD'));\n return;\n }\n\n if (parsedValue.isBefore(moment(moment().format('DD-MM-YYYY'), 'DD-MM-YYYY'))) {\n // Handle invalid date.\n toast.error('De geselecteerde datum mag niet in het verleden liggen.');\n setDateInput(selectedDate.format('YYYY-MM-DD'));\n return;\n }\n\n setSelectedDate(parsedValue);\n };\n\n const handleTextInputChanged = (e: any, onBlur: boolean = false) => {\n const val: string = e.target.value;\n\n if (onBlur) {\n // Validate value.\n const parsedValue = moment(val, 'DD-MM-YYYY');\n\n if (!parsedValue.isValid()) {\n // Handle invalid date.\n toast.error(\"Ongeldige datum. Vul in als 'dd-mm-jjjj'\");\n setTextInput(selectedDate.format('DD-MM-YYYY'));\n return;\n }\n\n if (parsedValue.isBefore(moment(moment().format('DD-MM-YYYY'), 'DD-MM-YYYY'))) {\n // Handle invalid date.\n toast.error('De geselecteerde datum mag niet in het verleden liggen.');\n setTextInput(selectedDate.format('DD-MM-YYYY'));\n return;\n }\n\n setSelectedDate(parsedValue);\n } else {\n // Treat as free textinput to not interrupt user input.\n setTextInput(val);\n }\n };\n\n useEffect(() => {\n setDateInput(selectedDate.format('YYYY-MM-DD'));\n setTextInput(selectedDate.format('DD-MM-YYYY'));\n\n dateChangeCallBack(selectedDate.format('YYYY-MM-DD'));\n }, [selectedDate, dateChangeCallBack]);\n\n return (\n \n \n handleTextInputChanged(e, true)}\n tabIndex={0}\n />\n \n
    \n \n Datum selecteren\n
    \n \n
    \n
    \n
    \n );\n}\n","import styled from 'styled-components';\n\nexport const SimpleLink = styled.a`\n color: ${(props) => props.theme.colors.onCardBackgroundEmphasized};\n text-decoration: underline;\n cursor: pointer;\n transition: 0.2s ease-out;\n &:hover {\n color: ${(props) => props.theme.colors.primaryDarker};\n }\n`;\n","import React, { useCallback } from 'react';\nimport { useForm, Controller } from 'react-hook-form';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Location, Office, RootState, Planning, Guest } from '../../global';\nimport { makeReservation } from '../../state/plannings';\nimport { Form, FormField, Button, Radio, Select, Label } from '../../ui';\nimport { ProgressRing } from '../../ui';\nimport moment from 'moment';\nimport ReservationCreditInfo from '../ReservationCreditInfo';\nimport ReservationInfo from '../ReservationInfo';\nimport { PlanningPopupStateAction } from '../../state/planningPopup';\nimport styled from 'styled-components';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { DayPart } from '../../enums';\nimport { Occupancy } from '../../utils/useCalendarAvailability';\nimport { DateInputField } from '../DateInputField/DateInputField';\nimport { SimpleLink } from '../../ui/SimpleLink';\nimport { lightTheme } from '../../ui/themes';\n\nconst RadioContainer = styled.div`\n display: flex;\n flex-wrap: wrap;\n margin-left: -0.5rem;\n\n & > * {\n margin: 0.25rem 0.5rem;\n }\n`;\n\nconst Ring = styled.div`\n display: flex;\n align-items: center;\n align-self: center;\n justify-self: flex-end;\n margin-top: 0.75rem;\n`;\n\nconst FormFieldLocation = styled.div`\n display: grid;\n grid-template-columns: minmax(0, 1fr) 6rem;\n`;\n\ntype ReservationFormData = {\n dayPart: DayPart;\n date: string;\n office: string;\n};\n\ntype Props = {\n isDisabled?: boolean;\n office: Office;\n location?: Location;\n plannings: Planning[];\n unavailableDateParts?: Occupancy;\n occupancyErrorMessage: Function;\n setActiveTab: Function;\n};\n\nconst CreateReservationForm: React.FC = ({\n isDisabled = false,\n office,\n location,\n plannings,\n unavailableDateParts,\n occupancyErrorMessage,\n setActiveTab,\n}) => {\n const { date } = useSelector((state: RootState) => state.planningPopup);\n const { company } = useSelector((state: RootState) => state.companies);\n const { user } = useSelector((state: RootState) => state.user);\n const { locations } = useSelector((state: RootState) => state.locations);\n const dispatch: ThunkDispatch = useDispatch();\n const [isLoading, setIsLoading] = React.useState(false);\n const { planningPopup } = useSelector((state: RootState) => state);\n const [isComplete, setIsComplete] = React.useState(false);\n\n const [formDayPart, setFormDayPart] = React.useState();\n\n const handleDateChange = useCallback(\n (value: string) => {\n const date = moment(value);\n if (!date.isValid()) return;\n dispatch({ type: 'SET_SELECTED_DATE', payload: { date } });\n },\n [dispatch],\n );\n\n const { handleSubmit, errors, control, watch, setValue } = useForm({\n defaultValues: {\n dayPart: undefined,\n office: office.uuid,\n },\n });\n\n const { office: selectedOffice } = watch(['dayPart', 'office']);\n\n React.useEffect(() => {\n dispatch({ type: 'SET_SELECTED_OFFICE', payload: { officeUuid: selectedOffice } });\n }, [selectedOffice, dispatch]);\n\n React.useEffect(() => {\n setValue('office', office.uuid);\n }, [office, setValue]);\n\n React.useEffect(() => {\n setIsComplete(formDayPart !== undefined);\n }, [unavailableDateParts, formDayPart]);\n\n React.useEffect(() => {\n /**\n * Asserts the given dayParts (fullday, morning, midday) which\n * could already be booked.\n *\n * If there is an active booking, the default value of the\n * radiobuttons is set to the only remaining or most probable value.\n */\n if (unavailableDateParts) {\n if (unavailableDateParts.scheduleClear) {\n // If there are no reservations yet, select FullDay\n setFormDayPart(DayPart.FullDay);\n } else {\n if (unavailableDateParts.morning === null) {\n // If there is no reservation for 'Morning', select morning\n setFormDayPart(DayPart.Morning);\n } else if (unavailableDateParts.midday === null) {\n // If there is no reservation for 'Midday', select midday\n setFormDayPart(DayPart.Midday);\n } else {\n // Otherwise, disable all radiobuttons. The user is unable to create a reservation\n setFormDayPart(undefined);\n }\n }\n }\n }, [unavailableDateParts, setFormDayPart]);\n\n if (!user) return null;\n\n const slots = office.seats * (formDayPart === DayPart.FullDay ? 2 : 1);\n\n const slotsFilled = plannings.reduce((a, b) => {\n if (b.dayPart === formDayPart || formDayPart === DayPart.FullDay) {\n return a + b.signedInUsers.length;\n }\n return a;\n }, 0);\n\n const enoughLeftForFullDay = slots - slotsFilled < 2 && formDayPart === DayPart.FullDay;\n\n const cantMakeReservation = enoughLeftForFullDay || slots === slotsFilled;\n\n const hasMultipleLocations = locations.length > 1;\n\n const companyUsesCredits = user && company?.usesCredits;\n\n const hasEnoughCredits = companyUsesCredits ? user.credits > 0 : true;\n\n // Check if the number of guests exceeds the available space. Subtract one to account for the 'owner'\n\n const tooManyGuests =\n planningPopup.guests.filter((item) => item.name.length > 0).length > slots / 2 - slotsFilled / 2 - 1;\n\n // Check if there are any duplicate guests entered.\n const duplicateGuests = (function () {\n const values = planningPopup.guests.map((item) => item.email);\n return new Set(values).size !== values.length;\n })();\n\n const guestEmailInvalid = planningPopup.guests.some((item) => {\n if (item.email === '') return false;\n return !item.email.match(/.+@.+\\..+/);\n });\n\n const onSubmit = (data: ReservationFormData) => {\n if (data.office && formDayPart !== undefined) {\n setIsLoading(true);\n dispatch(\n makeReservation({\n date: date,\n officeUuid: data.office,\n dayPart: formDayPart,\n guests: planningPopup.guests.filter((item) => item.name.length > 0 && item.email.length > 0),\n }),\n )\n .catch((e) => console.error(e))\n .finally(() => {\n setIsLoading(false);\n });\n }\n };\n\n return (\n
    \n \n \n \n (\n \n )}\n />\n \n \n \n \n \n \n\n \n \n {\n setFormDayPart(DayPart.Morning);\n }}\n name={'dayPart'}\n label={'Ochtend'}\n value={DayPart.Morning}\n checked={formDayPart === DayPart.Morning}\n />\n\n {\n setFormDayPart(DayPart.Midday);\n }}\n name={'dayPart'}\n label={'Middag'}\n value={DayPart.Midday}\n checked={formDayPart === DayPart.Midday}\n />\n\n {\n setFormDayPart(DayPart.FullDay);\n }}\n name={'dayPart'}\n label={'Hele dag'}\n value={DayPart.FullDay}\n checked={formDayPart === DayPart.FullDay}\n />\n \n \n\n {cantMakeReservation ? (\n
    \n \n
    \n ) : companyUsesCredits ? (\n
    \n \n
    \n ) : null}\n\n {unavailableDateParts?.scheduleClear === false ? : null}\n\n item.name.length > 0).length})`}>\n {planningPopup.guests.filter((item) => item.name.length > 0).length === 0 ? (\n \n Je hebt nog geen gasten toegevoegd.{' '}\n {\n setActiveTab('reservation_guests');\n }}\n >\n Gasten toevoegen.\n \n \n ) : (\n <>\n

    \n {(function () {\n const renderName = (item: Guest, index: number, guests: string | any[]) => {\n return `${item.name}${index === guests.length - 2 ? ' en ' : index >= guests.length - 1 ? '' : ', '}`;\n };\n\n const guests = planningPopup.guests.filter((item) => item.name.length > 0);\n\n const list = guests.map((item, index) => {\n const emailValid = item.email.match(/.+@.+\\..+/);\n if (index + 1 > slots / 2 - slotsFilled / 2 - 1 || !emailValid) {\n return (\n \n {renderName(item, index, guests)}\n \n );\n }\n return {renderName(item, index, guests)};\n });\n\n return list;\n })()}\n

    \n {planningPopup.guests.filter((item) => item.name.length > 0).length > slots / 2 - slotsFilled / 2 - 1 ? (\n \n Je hebt meer gasten ingevoerd dan dat er vrije plekken zijn!{' '}\n {\n setActiveTab('reservation_guests');\n }}\n >\n Gasten beheren.\n \n \n ) : null}\n {guestEmailInvalid ? (\n \n Er is bij een of meer gasten een ongeldig emailadres opgegeven!{' '}\n {\n setActiveTab('reservation_guests');\n }}\n >\n Gasten beheren.\n \n \n ) : null}\n \n )}\n
    \n\n \n Reserveren\n \n \n );\n};\n\nexport default CreateReservationForm;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { ValueLabel, Label } from '../ui';\nimport { ProgressRing } from '../ui';\n\nconst Wrapper = styled.div`\n display: grid;\n grid-template-columns: minmax(0, 1fr) 4.5rem;\n align-items: center;\n`;\n\nconst Ring = styled.div`\n display: flex;\n align-items: center;\n justify-self: flex-end;\n\n ${Label} {\n white-space: nowrap;\n }\n`;\n\ntype Props = {\n value: string;\n label: string;\n progress: number;\n ringLabel: string;\n};\n\nconst ValueLabelWithRing: React.FC = ({ value, label, progress, ringLabel }) => {\n return (\n \n \n \n \n \n \n \n );\n};\n\nexport default ValueLabelWithRing;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Location, Office } from '../global';\nimport { ValueLabel } from '../ui';\nimport ValueLabelWithRing from './ValueLabelWithRing';\nimport { DayPart } from '../enums';\n\ntype Props = {\n office: Office;\n location: Location;\n slotsFilled: number;\n slots: number;\n dayPart?: DayPart;\n hasMultipleLocations: boolean;\n};\n\nconst Wrapper = styled.div`\n display: grid;\n gap: 1.5rem;\n margin-bottom: 2rem;\n`;\n\nconst dayPartTitle = (dayPart: DayPart) => {\n switch (dayPart) {\n case DayPart.Morning:\n return 'Ochtend (van 08:00 tot 13:00)';\n case DayPart.Midday:\n return 'Middag (van 13:00 tot 18:00)';\n case DayPart.FullDay:\n return 'Hele dag';\n default:\n return '';\n }\n};\n\nconst ReservationOverview: React.FC = ({\n office,\n location,\n slotsFilled,\n slots,\n dayPart = DayPart.FullDay,\n hasMultipleLocations,\n}) => {\n return (\n \n \n \n \n );\n};\n\nexport default ReservationOverview;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport styled from 'styled-components';\nimport { PlanningUser, RootState } from '../global';\nimport { Avatar, Label } from '../ui';\nimport useWindowSize from '../utils/useWindowSize';\n\ntype Props = {\n morning: PlanningUser[];\n midday: PlanningUser[];\n fullday: PlanningUser[];\n active: boolean;\n};\n\nconst Attendees = styled.div<{ active: boolean; isMobileDevice: boolean }>`\n display: flex;\n flex-direction: column;\n margin-top: 2rem;\n overflow-y: auto;\n max-height: 65vh;\n height: ${(props) => (props.active ? '100%' : '0')};\n\n .container {\n display: flex;\n flex-direction: column;\n\n & + .container {\n margin-top: 1.5rem;\n }\n\n & > ${Label} {\n margin-bottom: 0.5rem;\n }\n }\n\n ul {\n display: grid;\n gap: 0.5rem;\n grid-template-columns: ${(props) => (props.isMobileDevice ? '1fr' : '1fr 1fr')};\n }\n\n li {\n display: flex;\n align-items: center;\n\n ${Label} {\n margin-left: 0.5rem;\n }\n\n &.highlighted {\n ${Label} {\n color: ${(props) => props.theme.colors.primary};\n }\n }\n }\n`;\n\nconst AttendeesList: React.FC = ({ active, morning, midday, fullday }) => {\n const currentUser = useSelector((state: RootState) => state.user.user);\n const { isMobileDevice } = useWindowSize();\n\n const renderList = (users: PlanningUser[], title: string) => {\n if (users.length === 0) return null;\n\n return (\n
    \n \n
      \n {users.map((user, index) => (\n
    • \n \n \n
    • \n ))}\n
    \n
    \n );\n };\n\n return (\n \n {renderList(morning, 'Ochtend')}\n {renderList(midday, 'Middag')}\n {renderList(fullday, 'Hele dag')}\n \n );\n};\n\nexport default AttendeesList;\n","import { Trash } from '@styled-icons/ionicons-outline';\nimport React, { useEffect, useState } from 'react';\nimport { toast } from 'react-toastify';\nimport styled from 'styled-components';\nimport { IconButton } from '../../ui/Button/Button';\nimport { FormField } from '../../ui/Form/Form';\nimport { Input } from '../../ui/Input/Input';\nimport { Guest } from '../../global';\n\nconst Wrap = styled.div`\n &.overflow *:not(button, svg, path) {\n border-color: ${(props) => props.theme.colors.error};\n color: ${(props) => props.theme.colors.error};\n &::placeholder {\n color: ${(props) => props.theme.colors.error};\n }\n }\n`;\n\nconst Strong = styled.strong`\n font-weight: bold;\n`;\n\nconst DoubleFormField = styled.div`\n width: 100%;\n input {\n &:first-of-type {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n }\n &:last-of-type {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-top-width: 0;\n }\n }\n`;\n\nconst AlignFieldButton = styled.div`\n display: flex;\n align-items: center;\n justify-content: stretch;\n button {\n margin-left: 1rem;\n aspect-ratio: 1 / 1;\n }\n`;\n\ntype Props = {\n inputGuest: Guest;\n allowDelete?: boolean;\n allowGuestReservation?: boolean; // Indicates if there are more guests than spots.\n handleUpdateGuest: (a: Guest) => void;\n handleDeleteGuest: () => void;\n emailIsDuplicate?: boolean;\n};\n\nconst GuestInput: React.FC = ({\n inputGuest,\n allowDelete = true,\n allowGuestReservation = true,\n handleUpdateGuest,\n handleDeleteGuest,\n emailIsDuplicate = false,\n}) => {\n const [guest, setGuest] = useState(inputGuest);\n const [emailIsInvalid, setEmailIsInvalid] = useState(false);\n\n useEffect(() => {\n setGuest(inputGuest);\n }, [inputGuest]);\n\n const deleteGuestHandler = () => {\n if (guest.name.length > 0 || guest.email.length > 0) {\n if (window.confirm('Weet je zeker dat je deze gast wil verwijderen?')) {\n handleDeleteGuest();\n }\n return;\n }\n handleDeleteGuest();\n };\n\n const addCapitalizationToFullName = (name: string) => {\n const nameArray = name.toLowerCase().split(' ');\n // List of name prefixes that should not be capitalized. Source: https://nl.wikipedia.org/wiki/Tussenvoegsel\n const ignorePrefixes = [\n 'aan',\n 'af',\n 'bij',\n 'de',\n 'den',\n 'der',\n \"d'\",\n 'het',\n \"'t\",\n 'in',\n 'onder',\n 'op',\n 'over',\n \"'s\",\n \"'t\",\n 'te',\n 'ten',\n 'ter',\n 'tot',\n 'uit',\n 'uijt',\n 'van',\n 'ver',\n 'voor',\n ];\n const capitalizedArray = nameArray.map((namePart) => {\n if (ignorePrefixes.includes(namePart.toLowerCase())) {\n return namePart;\n }\n return namePart.charAt(0).toUpperCase() + namePart.slice(1);\n });\n\n return capitalizedArray.join(' ');\n };\n\n return (\n {\n handleUpdateGuest({ ...guest, name: addCapitalizationToFullName(guest.name) });\n }}\n className={allowGuestReservation && !emailIsDuplicate && !emailIsInvalid ? '' : 'overflow'}\n >\n \n Naam + email\n {!allowGuestReservation ? (\n <>\n {' '}\n | Let op: Deze locatie is vol op dit tijdstip.\n \n ) : (\n ''\n )}\n {emailIsDuplicate ? (\n <>\n {' '}\n | Let op: Dit emailadres is al opgegeven\n \n ) : (\n ''\n )}\n {emailIsInvalid ? (\n <>\n {' '}\n | Let op: Dit emailadres is ongeldig\n \n ) : (\n ''\n )}\n \n }\n style={{ width: '100%', marginBlock: '1rem' }}\n >\n \n \n {\n setGuest({ ...guest, name: e.target.value });\n }}\n />\n setEmailIsInvalid(guest.email.length > 0 && !guest.email.match(/.+@.+\\..+/))}\n onChange={(e) => {\n setGuest({ ...guest, email: e.target.value });\n }}\n />\n \n toast.error('Je kan het laaste gastveld niet verwijderen.')\n }\n >\n \n Verwijder gast\n \n \n \n \n );\n};\n\nexport default GuestInput;\n","import axios from 'axios';\nimport { ThunkAction } from 'redux-thunk';\nimport { GuestSuggestion, PlanningPopupStateAction } from '.';\nimport { RootState } from '../../global';\n\ntype PlanningPopupThunk = ThunkAction<\n R,\n RootState,\n unknown,\n PlanningPopupStateAction | PlanningPopupStateAction\n>;\n\nlet isFetching: string[] = [];\n\nexport const fetchGuestSuggestions = (): PlanningPopupThunk> => async (dispatch) => {\n const url = `/api/Gasten/suggesties`;\n\n if (isFetching.includes(url)) return;\n\n isFetching.push(url);\n\n try {\n const suggestions = await axios.get(url);\n const formattedData: GuestSuggestion[] = suggestions.data.map((item: any) => {\n return {\n uuid: item.uuid,\n name: item.naam,\n email: item.emailadres,\n numberOfInvites: item.aantalKeerUitgenodigd,\n };\n });\n dispatch({\n type: 'SET_GUEST_SUGGESTIONS',\n payload: { guestSuggestions: formattedData },\n });\n\n isFetching = isFetching.filter((u) => u !== url);\n } catch (e: any) {\n // Do nothing... If we can't fetch suggestions, we simply don't show them.\n console.error('Niet gelukt om suggesties op te halen.');\n }\n\n return;\n};\n","import { Sparkles } from '@styled-icons/ionicons-outline/Sparkles';\nimport { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\nimport { RootState } from '../../global';\nimport { GuestSuggestion } from '../../state/planningPopup';\nimport { fetchGuestSuggestions } from '../../state/planningPopup/thunks';\nimport { SimpleLink } from '../../ui/SimpleLink';\n\nconst GuestSuggestionContainer = styled.div`\n display: flex;\n flex-direction: row;\n\n padding: 1.5rem;\n margin-block: 1rem;\n background-color: rgba(0, 0, 0, 0.05);\n width: 100%;\n border-radius: 0.75rem;\n\n .icon {\n width: 3rem;\n }\n\n .list {\n display: inline-flex;\n flex-wrap: wrap;\n flex-direction: row;\n align-items: center;\n }\n\n svg {\n width: 1.5em;\n height: 1.5em;\n shape-rendering: geometricPrecision;\n color: ${(props) => props.theme.colors.primary};\n }\n\n span {\n margin-right: 0.5em;\n line-height: 1.5;\n }\n`;\n\nconst GuestSuggestions: React.FC = () => {\n const [links, setLinks] = useState([]);\n const dispatch = useDispatch();\n\n const { planningPopup } = useSelector((state: RootState) => state);\n\n useEffect(() => {\n const handleQuickAdd = (item: GuestSuggestion) => {\n const emptyIndex = planningPopup.guests.findIndex((item) => item.email === '' && item.name === '');\n\n if (emptyIndex === null || emptyIndex < 0) {\n dispatch({\n type: 'SET_GUESTS',\n payload: { guests: [...planningPopup.guests, { name: item.name, email: item.email }] },\n });\n } else {\n const copy = planningPopup.guests;\n copy[emptyIndex] = { name: item.name, email: item.email };\n\n dispatch({\n type: 'SET_GUESTS',\n payload: { guests: copy },\n });\n }\n };\n\n const getLinks = () => {\n let suggestions = planningPopup.guestSuggestions;\n const currentGuests = planningPopup.guests;\n\n suggestions = suggestions.sort((a, b) => b.numberOfInvites - a.numberOfInvites);\n\n let filteredSuggestions = suggestions\n .filter((suggestedGuest) => {\n return !currentGuests.some((enteredGuest) => enteredGuest.email === suggestedGuest.email);\n })\n .slice(0, 6);\n\n const links = filteredSuggestions.map((item, index) => {\n return (\n \n handleQuickAdd(item)}>\n {item.name}\n \n {index < filteredSuggestions.length - 1 ? ', ' : ''}\n \n );\n });\n\n setLinks(links);\n };\n\n getLinks();\n }, [dispatch, planningPopup]);\n\n useEffect(() => {\n dispatch(fetchGuestSuggestions());\n }, [dispatch]);\n\n if (links.length === 0) {\n return null;\n }\n\n return (\n \n
    \n \n
    \n
    \n Snel gasten toevoegen... {links}\n
    \n
    \n );\n};\n\nexport { GuestSuggestions };\n","import { Add } from '@styled-icons/ionicons-outline';\nimport { useCallback, useEffect, useRef } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\nimport { Guest, Office, Planning, RootState } from '../../global';\nimport { Button } from '../../ui';\nimport useWindowSize from '../../utils/useWindowSize';\nimport ReservationInfo from '../ReservationInfo';\nimport GuestInput from './GuestInput';\nimport { GuestSuggestions } from './GuestSuggestions';\nimport { hexToRgb } from '../../utils/hexToRGB';\n\nconst Guests = styled.div<{ active: boolean; isMobileDevice: boolean }>`\n overflow-y: auto;\n max-height: 65vh;\n height: ${(props) => (props.active ? '100%' : '0')};\n position: relative;\n padding-bottom: 50px;\n\n &:before,\n &:after {\n // overflow indicator (for bottom)\n content: '';\n position: fixed;\n background-image: linear-gradient(\n 0deg,\n rgba(${(props) => hexToRgb(props.theme.colors.cardBackground)}, 1),\n rgba(${(props) => hexToRgb(props.theme.colors.cardBackground)}, 0)\n );\n inset: calc(100% - 50px) 0 0 0;\n pointer-events: none;\n }\n\n &:before {\n // overflow indicator (for top)\n inset: 0 0 calc(100% - 50px) 0;\n opacity: 0;\n transition: opacity 0.3s ease-out;\n background-image: linear-gradient(\n 180deg,\n rgba(${(props) => hexToRgb(props.theme.colors.cardBackground)}, 1),\n rgba(${(props) => hexToRgb(props.theme.colors.cardBackground)}, 0)\n );\n }\n\n &:not([data-scroll='0']):before {\n opacity: 1;\n }\n`;\n\ntype Props = {\n active: boolean;\n freeSpots?: number;\n plannings: Planning[];\n office: Office;\n};\n\nconst GuestTab = ({ active, plannings, office, freeSpots = 0 }: Props) => {\n const dispatch = useDispatch();\n const { planningPopup } = useSelector((state: RootState) => state);\n const scrollContainerRef = useRef(null);\n\n const { isMobileDevice } = useWindowSize();\n\n // Deduct one free spot, for it is assigned to the organiser.\n const maxGuests = freeSpots - 1;\n\n const updateGuest = (index: number, guest: Guest) => {\n const modifiable = [...planningPopup.guests];\n modifiable.splice(index, 1, guest);\n dispatch({ type: 'SET_GUESTS', payload: { guests: modifiable } });\n };\n\n const deleteGuest = (index: number) => {\n const modifiable = [...planningPopup.guests];\n modifiable.splice(index, 1);\n dispatch({ type: 'SET_GUESTS', payload: { guests: modifiable } });\n };\n\n const addNewField = useCallback(() => {\n dispatch({ type: 'SET_GUESTS', payload: { guests: [...planningPopup.guests, { name: '', email: '' }] } });\n }, [dispatch, planningPopup.guests]);\n\n useEffect(() => {\n if (planningPopup.guests.length < 1) {\n addNewField();\n }\n }, [addNewField, planningPopup.guests]);\n\n // Scrolloffset\n useEffect(() => {\n const onScroll = (e: any) => {\n scrollContainerRef.current?.setAttribute('data-scroll', e.target.scrollTop ?? 0);\n };\n\n const scrollContainer = scrollContainerRef.current;\n if (scrollContainer) {\n scrollContainer.addEventListener('scroll', onScroll);\n }\n\n return () => {\n if (scrollContainer) {\n scrollContainer.removeEventListener('scroll', onScroll);\n }\n };\n }, [scrollContainerRef]);\n\n if (maxGuests <= 0) {\n return ;\n }\n\n return (\n \n \n \n
    \n {planningPopup.guests.map((item, index) => {\n return (\n = maxGuests)}\n allowDelete={!(index === 0 && planningPopup.guests.length <= 1)}\n handleUpdateGuest={(updatedGuest: Guest) => updateGuest(index, updatedGuest)}\n handleDeleteGuest={() => deleteGuest(index)}\n emailIsDuplicate={\n planningPopup.guests.reduce(\n (count, guest) => (guest.email === item.email && item.email !== '' ? count + 1 : count),\n 0,\n ) > 1\n }\n />\n );\n })}\n
    \n = maxGuests}>\n {' '}\n Nog een gast toevoegen\n \n
    \n );\n};\n\nexport default GuestTab;\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { deleteReservation, fetchPlanningBlock } from '../state/plannings';\nimport { Location, Office, Planning, PlanningUser, RootState } from '../global';\nimport { Button, Drawer, Modal } from '../ui';\nimport CreateReservationForm from './CreateReservationForm/CreateReservationForm';\nimport ReservationOverview from './ReservationOverview';\nimport AttendeesList from './AttendeesList';\nimport useWindowSize from '../utils/useWindowSize';\nimport ChipsSelector from './ChipsSelector';\nimport styled from 'styled-components';\nimport ValueLabelWithRing from './ValueLabelWithRing';\nimport moment from 'moment';\nimport { DayPart } from '../enums';\nimport GuestTab from './GuestInput/GuestTab';\nimport { useCalendarAvailability } from '../utils/useCalendarAvailability';\n\nexport const TabsWrapper = styled.div`\n display: grid;\n`;\n\nexport const Tab = styled.div<{ active: boolean; tabId: string }>`\n transition: 0.25s cubic-bezier(0.86, 0, 0.07, 1);\n opacity: ${(props) => (props.active ? 1 : 0)};\n transform: ${(props) =>\n props.active ? 'translate3d(0, 0, 0)' : `translate3d(${props.tabId === 'details' ? '20' : '-20'}px, 0, 0)`};\n grid-column: 1;\n grid-row: 1;\n align-self: stretch;\n pointer-events: ${(props) => (props.active ? 'initial' : 'none')};\n display: flex;\n flex-direction: column;\n`;\n\nconst DatePopup: React.FC = () => {\n const dispatch = useDispatch();\n\n const { isMobileDevice } = useWindowSize();\n\n const { user, planningPopup, planning, locations } = useSelector((state: RootState) => state);\n\n const { date, officeUuid } = planningPopup;\n const { occupancy, getOccupiedMessage } = useCalendarAvailability();\n\n const office = locations.locations.reduce(\n (a, b) => (a ? a : b.offices.find((o) => o.uuid === officeUuid)),\n undefined,\n );\n\n const location = locations.locations.reduce(\n (a, b) => (a ? a : b.offices.findIndex((o) => o.uuid === officeUuid) !== -1 ? b : undefined),\n undefined,\n );\n\n const key = `${office?.uuid}_${date.year()}_${date.month() + 1}`;\n const allPlannings = planning[key]?.plannings || [];\n const isFetching = planning[key]?.state === 'FETCHING';\n const plannings = allPlannings.filter((p) => moment(p.date).isSame(date, 'date'));\n\n const hasMultipleLocations = locations.locations.length > 1;\n\n React.useEffect(() => {\n if (!planning[key] && officeUuid) {\n dispatch(\n fetchPlanningBlock({\n month: date.month() + 1,\n year: date.year(),\n officeUuid: officeUuid,\n }),\n );\n }\n }, [key, planning, officeUuid, date, dispatch]);\n\n const assertAvailability = (inputPlanning: Planning[]) => {\n const morningAll = inputPlanning.find((t) => t.dayPart === DayPart.Morning)?.signedInUsers || [];\n const middayAll = inputPlanning.find((t) => t.dayPart === DayPart.Midday)?.signedInUsers || [];\n\n const fullDay = morningAll.filter((user: PlanningUser) => middayAll.findIndex((u) => u.uuid === user.uuid) !== -1);\n const morning = morningAll.filter((user: PlanningUser) => fullDay.findIndex((u) => u.uuid === user.uuid) === -1);\n const midday = middayAll.filter((user: PlanningUser) => fullDay.findIndex((u) => u.uuid === user.uuid) === -1);\n\n return { morningAll, middayAll, fullDay, morning, midday };\n };\n\n const { fullDay, morning, midday } = assertAvailability(plannings);\n let dayCompleted: boolean;\n\n if (plannings.find((t) => t.dayPart === DayPart.Midday)?.isCompleted) {\n dayCompleted = true;\n } else dayCompleted = plannings.find((t) => t.dayPart === DayPart.Morning)?.isCompleted || false;\n\n const userDayPart = fullDay.find((u) => u.uuid === user.user?.uuid)\n ? DayPart.FullDay\n : morning.find((u) => u.uuid === user.user?.uuid)\n ? DayPart.Morning\n : midday.find((u) => u.uuid === user.user?.uuid)\n ? DayPart.Midday\n : undefined;\n\n const hasUser = typeof userDayPart !== 'undefined';\n\n const slots = (office?.seats || 0) * 2;\n const slotsFilled = plannings.reduce((a, b) => a + b.signedInUsers.length, 0);\n\n const [activeTab, setActiveTab] = React.useState('reservation');\n\n const closePopup = () => {\n dispatch({ type: 'CLOSE_PLANNING_POPUP' });\n setTimeout(() => {\n setActiveTab('reservation');\n }, 200);\n };\n\n const handleDeleteReservation = (dayPart: DayPart | undefined) => {\n if (officeUuid && user.user && typeof dayPart !== 'undefined') {\n dispatch(deleteReservation({ date, officeUuid, dayPart: dayPart }));\n }\n };\n\n const tabs = [\n { label: 'Reservering', id: 'reservation' },\n { label: 'Gasten', id: 'reservation_guests' },\n { label: 'Aanwezig', id: 'details' },\n ];\n\n const Element = isMobileDevice ? Drawer : Modal;\n\n return (\n (\n
    \n \n
    \n )}\n >\n \n {office && !isFetching && location && (\n <>\n \n <>\n {hasUser && !dayCompleted ? (\n <>\n \n handleDeleteReservation(userDayPart)}\n style={{ width: '100%', marginTop: 'auto' }}\n >\n Verwijderen\n \n \n ) : (\n \n )}\n \n \n \n \n \n \n \n \n \n \n )}\n \n \n );\n};\n\nexport default DatePopup;\n","import { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Planning, RootState } from '../global';\nimport moment from 'moment';\nimport { fetchReservations } from '../state/reservations';\nimport { DayPart } from '../enums';\nimport { useHistory } from 'react-router-dom';\nimport { SimpleLink } from '../ui/SimpleLink';\n\n/**\n * This hook fetches all bookings (for all locations) for a user on\n * a given date. The date is derived from the Redux store. It\n * excludes all bookings made for the currently selected office.\n *\n * Also returns a method (getOccupiedMessage) that returns a string\n * that can be used to give feedback to the user as to why some\n * options may be unavailable.\n */\n\nexport interface Occupancy {\n scheduleClear: boolean;\n morning: Planning | null;\n midday: Planning | null;\n}\n\nexport const useCalendarAvailability = () => {\n const dispatch = useDispatch();\n const history = useHistory();\n\n // Date to check for.\n const [occupancy, setOccupancy] = useState();\n\n // All active reservations by user.\n const { reservations, state } = useSelector((state: RootState) => state.reservations);\n const { user } = useSelector((state: RootState) => state.user);\n const {\n planningPopup: { date, officeUuid },\n } = useSelector((state: RootState) => state);\n\n // Fetch reservations if not available.\n useEffect(() => {\n if (user && ['IDLE'].includes(state)) {\n dispatch(fetchReservations({ userUuid: user.uuid }));\n }\n }, [user, reservations, dispatch, state]);\n\n // Check for all reservations by user for selectedDate.\n useEffect(() => {\n // Assert if selectedDate is valid\n if (!date.isValid()) {\n return;\n }\n\n // Find reservations with date.\n const formattedSelectedDate = date.format('DD-MM-Y');\n const reservationsOnDate = reservations.filter(\n (planningItem) =>\n formattedSelectedDate === moment(planningItem.date).format('DD-MM-Y') && planningItem.officeUuid !== officeUuid,\n );\n\n const morning = reservationsOnDate.filter((reservation) => reservation.dayPart === DayPart.Morning);\n const midday = reservationsOnDate.filter((reservation) => reservation.dayPart === DayPart.Midday);\n\n // Return an object with the occupancy for morning, midday and fullDay.\n setOccupancy({\n scheduleClear: morning.length === 0 && midday.length === 0,\n morning: morning.length > 0 ? (morning.shift() as Planning) : null,\n midday: midday.length > 0 ? (midday.shift() as Planning) : null,\n });\n }, [date, reservations, officeUuid]);\n\n const getOccupiedMessage = () => {\n if (occupancy?.scheduleClear ?? true) return null;\n\n const locations: string[] = [];\n const timeIndications: string[] = [];\n\n if (occupancy?.morning !== null) {\n locations.push(`${occupancy?.morning.locationName} in ${occupancy?.morning.officeName}`);\n timeIndications.push(`'s ochtends`);\n }\n if (occupancy?.midday !== null) {\n locations.push(`${occupancy?.midday.locationName} in ${occupancy?.midday.officeName}`);\n timeIndications.push(`'s middags`);\n }\n\n const link = (\n {\n history.push('/reservations');\n dispatch({ type: 'CLOSE_PLANNING_POPUP' });\n }}\n >\n mijn reserveringen\n \n );\n\n return (\n <>\n {locations.length > 0\n ? `Op deze datum heb je ${timeIndications[0]} al een reservering bij ${locations[0]}.\n ${locations.length > 1 ? `en ${timeIndications[1]} bij ${locations[1]}.` : ``}`\n : ``}{' '}\n Ga naar {link} om je reserveringen te beheren.\n \n );\n };\n\n return { occupancy, getOccupiedMessage };\n};\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport styled from 'styled-components';\n\nconst Wrapper = styled(Link)`\n display: flex;\n align-items: center;\n text-decoration: none;\n font-family: ${(props) => props.theme.fonts.heading};\n color: ${(props) => props.theme.colors.primary};\n font-size: 1.5rem;\n font-weight: 600;\n transform: translateY(-3px);\n`;\n\nconst Logo: React.FC = () => {\n return (\n \n \n \n \n \n \n

    Deskie

    \n
    \n );\n};\n\nexport default Logo;\n","import React from 'react';\nimport { Seperator, IconButton, Heading } from '../ui';\nimport styled from 'styled-components';\nimport { Menu, Close, ArrowBack } from '@styled-icons/material-outlined';\nimport useWindowSize from '../utils/useWindowSize';\nimport Logo from './../components/Logo';\nimport { useSelector } from 'react-redux';\nimport { RootState } from '../global';\n\ntype Props = {\n isOpen: boolean;\n title?: string;\n onMenuToggle: () => void;\n actionButton?: () => React.ReactNode;\n};\n\nconst Styled = styled.div`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n padding: 2rem 1rem;\n height: 6rem;\n @media screen and (max-width: 680px) {\n height: 4rem;\n }\n width: 100%;\n\n span {\n font-family: Poppins;\n font-size: 1.2rem;\n font-weight: 500;\n margin-left: 1rem;\n color: ${(props) => props.theme.colors.onCardBackground};\n }\n`;\n\nconst LogoWrapper = styled.div`\n margin-left: 1rem;\n\n a {\n margin-top: 0.25rem;\n }\n`;\n\nconst NavigationBar: React.FC = ({ isOpen, onMenuToggle }) => {\n const { title, actionButton, backButton } = useSelector((state: RootState) => state.layout);\n\n const { isMobileDevice } = useWindowSize();\n\n return (\n <>\n \n {!backButton && isMobileDevice && (\n \n {isOpen ? : }\n {isOpen ? (\n Sluit menu\n ) : (\n Open menu\n )}\n \n )}\n\n {isOpen && isMobileDevice && (\n \n \n \n )}\n {backButton && (\n backButton()}>\n \n Vorige\n \n )}\n\n {!isOpen && title && {title}}\n
    {actionButton && actionButton}
    \n \n \n \n );\n};\n\nexport default NavigationBar;\n","import styled, { useTheme } from 'styled-components';\n\ntype ChipContainerProps = {\n color?: string;\n textColor?: string;\n};\n\nconst ChipContainer = styled.div`\n height: 1.5rem;\n padding-inline: 0.75rem;\n align-items: center;\n margin: 0.25rem;\n background-color: ${(props) => props.color ?? props.theme.colors.primary};\n display: inline-flex;\n border-radius: 100px;\n color: ${(props) => props.textColor ?? 'white'};\n font-size: 0.9rem;\n`;\n\ntype Props = {\n title: string;\n color?: string;\n textColor?: string;\n icon?: JSX.Element;\n};\n\nexport default function Chip({ title, color = undefined, textColor = undefined, icon = undefined }: Props) {\n const theme = useTheme();\n return (\n \n {icon ?? null}\n {title}\n \n );\n}\n","import styled from 'styled-components';\nimport { Heading, Label } from '../../ui';\nimport Chip from '../../ui/Chip/Chip';\nimport { Moment } from 'moment';\n\nconst ReleaseNoteContainer = styled.div`\n padding-left: 2rem;\n padding-right: 2rem;\n position: relative;\n padding-bottom: 2rem;\n line-height: 1.2;\n &:before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n margin: 0.5rem;\n width: 1rem;\n height: 1rem;\n border-radius: 1.5rem;\n background: ${(props) => props.theme.colors.faded};\n opacity: 0.5;\n }\n &:after {\n content: '';\n position: absolute;\n top: 1.5rem;\n left: calc(1rem - 1px);\n width: 2px;\n height: calc(100% - 3rem);\n background: ${(props) => props.theme.colors.faded};\n opacity: 0.5;\n }\n .topRow {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n .titleVersion {\n display: flex;\n align-items: center;\n h3 {\n margin-bottom: 0;\n margin-left: 0.5rem;\n }\n }\n .description {\n margin-top: 1rem;\n }\n\n h4 {\n font-size: 1rem;\n margin-top: 1.5rem;\n margin-bottom: 0.5rem;\n }\n\n ul {\n li {\n margin-bottom: 0.25rem;\n padding-left: 1rem;\n position: relative;\n &:before {\n content: '- ';\n position: absolute;\n top: 0;\n left: 0;\n padding-right: 0.5rem;\n }\n }\n }\n`;\n\ntype Props = {\n version: string;\n date: Moment;\n title: string;\n description: string;\n notes?: string[];\n bugfixes?: string[];\n};\n\nexport default function ReleaseNote({ version, date, title, description, notes, bugfixes }: Props) {\n return (\n \n
    \n
    \n \n {title}\n
    \n \n
    \n {description && description.length > 0 &&
    {description}
    }\n {notes && notes.length > 0 && (\n
    \n Updates\n
      \n {notes.map((note, index) => (\n
    • {note}
    • \n ))}\n
    \n
    \n )}\n {bugfixes && bugfixes.length > 0 && (\n
    \n Bugfixes\n
      \n {bugfixes.map((bugfix, index) => (\n
    • {bugfix}
    • \n ))}\n
    \n
    \n )}\n
    \n );\n}\n","import moment from 'moment';\n\nexport const releaseNotes = [\n {\n version: '2.0.0',\n date: moment('2023-03-01'),\n title: 'Deskie 2.0',\n description: '',\n notes: [\n 'Deskie wordt doorontwikkeld en verwacht vele nieuwe functies.',\n 'Visuele feedback toegevoegd wanneer een gebruiker een reservering probeert toe te voegen op een dag(-deel) waar dit niet mogelijk is.',\n 'Controle tussen verschillende kantoren én locaties toegevoegd om visuele feedback te kunnen geven.',\n ],\n bugfixes: [\n 'Nederlandse weergave van datums in invulvelden.',\n 'Reserveerformulier niet langer uitgeschakeld bij veranderen datum.',\n ],\n },\n {\n version: '2.1.0',\n date: moment('2023-03-14'),\n title: 'Welcome to our office!',\n description: '',\n notes: [\n 'Mogelijkheid om gasten uit te nodigen voor een reservering. Nodig gasten uit van buiten de organisatie door hun e-mailadres in te vullen. Gasten kun je uitnodigen binnen het reserveeformulier, klik op de knop \"Gasten toevoegen\" om te beginnen.',\n 'Slimme suggesties voor gasten. Wanneer je gasten uitnodigt, geeft Deskie je suggesties om een gast nog eens uit te nodigen.',\n ],\n bugfixes: [\n 'Ook als je al een reservering hebt voor de volgende werkdag, is het mogelijk om met het plusje rechtsbovenin een reservering toe te voegen.',\n 'Hoogte van pop-ups consistenter gemaakt.',\n ],\n },\n {\n version: '2.2.0',\n date: moment('2023-05-01'),\n title: 'Lights out!',\n description: '',\n notes: [\n \"Donkere modus toegevoegd. Je kunt de donkere modus aan- en uitzetten door op 'Mijn instellingen' te klikken en vervolgens rechtsboven op het potlood te drukken.\",\n 'Changelog toegevoegd. Je kunt nu teruglezen wat de nieuwste updates van Deskie zijn en ze direct uitproberen!',\n ],\n bugfixes: ['Verbeteringen aan de toegangkelijkheid van de website.'],\n },\n {\n version: '2.3.0',\n date: moment('2023-05-26'),\n title: 'Time flies!',\n description: '',\n notes: [\n 'Op de planningpagina vind je nu aan de rechterkant een tijdlijn. Zo kun je makkelijk navigeren naar een moment in de toekomst.',\n 'Deskie vraagt nu of je de website als app wil installeren.',\n 'Feestdagen worden nu weergeven in het overzicht.',\n ],\n bugfixes: ['Kalender update, jouw kalender geeft nu een beter overzicht van je aanwezigheid.'],\n },\n];\n","import React, { useEffect, useState } from 'react';\nimport { Modal, Drawer, Heading } from '../ui';\nimport { Email, Phone } from '@styled-icons/material-outlined';\nimport styled from 'styled-components';\nimport useWindowSize from '../utils/useWindowSize';\nimport { Tab, TabsWrapper } from './DatePopup';\nimport ChipsSelector from './ChipsSelector';\nimport ReleaseNote from './ReleaseNote/ReleaseNote';\nimport ScrollView from '../ui/ScrollView/ScrollView';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { releaseNotes } from '../releaseNotes';\nimport { RootState } from '../global';\n\ntype HelpProps = {\n isOpen: boolean;\n onCancel: () => void;\n};\n\nconst Content = styled.div`\n line-height: 1.5;\n font-size: 0.875rem;\n width: 100%;\n\n h3 {\n margin-bottom: 0.25rem;\n }\n\n ul {\n margin-top: 0.75rem;\n width: 100%;\n }\n\n li {\n display: flex;\n align-items: center;\n width: 100%;\n\n a {\n text-decoration: none;\n padding: 0.25rem 0.375rem 0.375rem 0.375rem;\n border-radius: 0.5rem;\n width: 100%;\n display: flex;\n align-items: center;\n\n svg {\n color: ${(props) => props.theme.colors.label};\n }\n\n &:hover {\n background: ${(props) => props.theme.colors.background};\n }\n\n span {\n color: ${(props) => props.theme.colors.primary};\n text-decoration: underline;\n }\n\n .note {\n text-decoration: none;\n color: ${(props) => props.theme.colors.muted};\n margin-left: 0.5rem;\n font-size: 0.75rem;\n }\n }\n\n svg {\n width: 1rem;\n color: ${(props) => props.theme.colors.muted};\n margin-right: 0.75rem;\n }\n }\n`;\n\nfunction Help({ isOpen, onCancel }: HelpProps) {\n const dispatch = useDispatch();\n const { isMobileDevice } = useWindowSize();\n const [activeTab, setActiveTab] = React.useState('help');\n const [showReleaseNoteBadge, setShowReleaseNoteBadge] = useState(false);\n const { lastReadUpdate } = useSelector((state: RootState) => state.preferences);\n\n const Element = isMobileDevice ? Drawer : Modal;\n const tabs = [\n { label: 'Help', id: 'help' },\n { label: \"What's new\", id: 'release_notes', showBadge: showReleaseNoteBadge },\n ];\n\n useEffect(() => {\n const lastReleaseNote = releaseNotes.sort((a, b) => {\n if (a.date.isBefore(b.date)) {\n return 1;\n }\n if (a.date.isAfter(b.date)) {\n return -1;\n }\n return 0;\n });\n\n if (activeTab === 'release_notes') {\n dispatch({ type: 'SET_LAST_READ_UPDATE', payload: lastReleaseNote[0].version });\n }\n\n setShowReleaseNoteBadge(lastReleaseNote[0].version !== lastReadUpdate);\n }, [activeTab, dispatch, lastReadUpdate]);\n\n return (\n (\n
    \n \n
    \n )}\n >\n \n \n \n Service Deskie\n

    Wij zijn bereikbaar op de volgende kanalen voor hulp en/of feedback:

    \n \n
    \n \n \n {releaseNotes\n .sort((a, b) => {\n if (a.date.isBefore(b.date)) {\n return 1;\n }\n if (a.date.isAfter(b.date)) {\n return -1;\n }\n return 0;\n })\n .map((releaseNote, index) => (\n \n ))}\n \n \n
    \n
    \n \n );\n}\n\nexport default Help;\n","import { Moment } from 'moment';\nimport React, { useState, useEffect, useRef, useMemo } from 'react';\nimport styled from 'styled-components';\nimport moment from 'moment';\n\nconst Container = styled.div`\n display: grid;\n height: 100%;\n grid-template: auto / 1fr 44px;\n overflow: hidden;\n position: relative;\n`;\n\nconst Content = styled.div`\n height: 100%;\n -ms-overflow-style: none;\n overflow: auto;\n padding: 0 1rem;\n scrollbar-width: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n`;\n\nconst ScrollBar = styled.div`\n padding: 1rem;\n`;\n\nconst ScrollTrack = styled.div<{ thumbOnly: boolean }>`\n cursor: pointer;\n position: absolute;\n top: 10px;\n bottom: 10px;\n width: 10px;\n\n ${(props) => props.thumbOnly && `pointer-events: none;`}\n`;\n\nconst ScrollThumb = styled.div`\n transform: translate(-50%, -50%);\n cursor: grab;\n pointer-events: all;\n\n border-radius: 12px;\n border: 3px solid ${(props) => props.theme.colors.primary};\n position: absolute;\n left: 50%;\n width: 14px;\n height: 14px;\n\n z-index: 10;\n`;\n\nconst MonthTab = styled.div`\n pointer-events: all;\n cursor: pointer;\n position: absolute;\n right: calc(50% - 2px);\n width: 16px;\n height: 4px;\n border-radius: 2px;\n background-color: ${(props) => props.theme.colors.timeLineColor};\n z-index: 1;\n &:before {\n content: attr(title);\n color: ${(props) => props.theme.colors.timeLineColor};\n position: absolute;\n right: calc(100% + 4px);\n top: 50%;\n font-size: 0.8rem;\n transform: translateY(-50%);\n width: 200%;\n text-align: right;\n }\n`;\n\nconst WeekTab = styled.div`\n pointer-events: all;\n cursor: pointer;\n position: absolute;\n opacity: 0.3;\n right: 50%;\n transform: translate(2px, -50%);\n width: 4px;\n height: 4px;\n border-radius: 2px;\n background-color: ${(props) => props.theme.colors.timeLineColor};\n z-index: 2;\n &:hover {\n width: 16px;\n opacity: 1;\n &:before {\n opacity: 1;\n }\n }\n\n &:before {\n content: attr(title);\n font-size: 0.8rem;\n opacity: 0;\n position: absolute;\n right: calc(100% + 4px);\n top: 50%;\n transform: translateY(-50%);\n white-space: nowrap;\n text-align: right;\n color: ${(props) => props.theme.colors.timeLineColor};\n background-color: ${(props) => props.theme.colors.background};\n }\n &:after {\n content: '';\n position: absolute;\n top: 50%;\n right: 50%;\n transform: translate(6px, -50%);\n width: 30px;\n height: 1.9vh;\n }\n`;\n\ntype Props = {\n dates?: Moment[];\n children: React.ReactNode;\n className?: string;\n startDate?: Moment;\n};\n\nconst TimeLineScrollBar = ({ children, className, dates, startDate = moment(), ...props }: Props) => {\n // Logic\n const [scrollOffsetPercentage, setScrollOffsetPercentage] = useState(0);\n const [dragging, setDragging] = useState(false);\n\n // Refs\n const scrollTrackRef = useRef(null);\n const scrollThumbRef = useRef(null);\n const contentRef = useRef(null);\n\n // Setters\n const setCurrentScrollOffsetPercentage = () => {\n const { scrollTop, scrollHeight, clientHeight } = contentRef.current!;\n const scrollOffset = scrollHeight - clientHeight + window.innerHeight;\n\n const scrollOffsetPercentage = (scrollTop / scrollOffset) * 100;\n setScrollOffsetPercentage(scrollOffsetPercentage);\n };\n\n const getWeekNumber = (date: Date) => {\n const oneJan = new Date(date.getFullYear(), 0, 1);\n const weekNumber = Math.ceil(((date.getTime() - oneJan.getTime()) / 86400000 + oneJan.getDay() + 1) / 7);\n return weekNumber;\n };\n\n // Handlers\n useEffect(setCurrentScrollOffsetPercentage, [contentRef.current?.scrollTop]);\n useEffect(setCurrentScrollOffsetPercentage, [contentRef.current?.scrollTop]);\n\n const handleThumbPosition = () => {\n if (!scrollTrackRef.current || !scrollThumbRef.current) return;\n scrollThumbRef.current.style.top = `${scrollOffsetPercentage}%`;\n };\n\n const handleDragStart = (e: React.MouseEvent | MouseEvent) => {\n setDragging(true);\n };\n\n const handleDragEnd = (e: React.MouseEvent | MouseEvent) => {\n setDragging(false);\n };\n\n useEffect(() => {\n document.addEventListener('mouseup', handleDragEnd);\n\n return () => {\n document.removeEventListener('mouseup', handleDragEnd);\n };\n });\n\n const handleThumbDrag = (e: React.DragEvent) => {\n if (!scrollTrackRef.current || !contentRef.current || !dragging) return;\n\n const { top, height } = scrollTrackRef.current.getBoundingClientRect();\n const relativeCursorPosition = e.clientY - top;\n\n const targetOffsetPercentage = (relativeCursorPosition / height) * 100;\n\n const screenHeightCorrection = window.innerHeight / contentRef.current.scrollHeight;\n\n // Set new scroll percentage and make sure it's within 0 and 100\n setScrollOffsetPercentage(Math.min(Math.max(targetOffsetPercentage, 0), 100 - screenHeightCorrection * 100));\n\n contentRef.current.scrollTo({\n top: (targetOffsetPercentage / 100) * contentRef.current.scrollHeight,\n });\n\n handleThumbPosition();\n };\n\n const handleScroll = (e: React.UIEvent) => {\n setCurrentScrollOffsetPercentage();\n handleThumbPosition();\n };\n\n const handleTrackClick = (e: React.MouseEvent) => {\n if (!scrollTrackRef.current || !contentRef.current || dragging) return;\n\n const target = e.target as HTMLDivElement;\n const relativeClickPosition = e.clientY - target.getBoundingClientRect().top;\n const targetOffsetPercentage = (relativeClickPosition / target.offsetHeight) * 100;\n setScrollOffsetPercentage(targetOffsetPercentage);\n\n contentRef.current.scrollTo({\n top: (targetOffsetPercentage / 100) * contentRef.current.scrollHeight,\n behavior: 'smooth',\n });\n };\n\n const weeks = useMemo(() => {\n const startDateObj = startDate.startOf('week');\n const startYear = parseInt(startDateObj.format('YYYY'));\n const startMonth = parseInt(startDateObj.format('MM')) - 1;\n\n const filteredWeeks: { [key: string]: number } = {};\n Array.from({ length: 52 }, (_, i) => {\n const weekDate = new Date(startYear, startMonth, i * 7 + 1);\n\n if (weekDate < startDateObj.toDate()) return null;\n\n const weekNumber = getWeekNumber(weekDate);\n\n filteredWeeks[`${weekDate.getFullYear()}_${weekNumber}`] = weekNumber;\n return weekNumber;\n }).filter((week) => week !== null);\n\n return filteredWeeks;\n }, [startDate]);\n\n const months = useMemo(() => {\n const startDateObj = startDate.startOf('month');\n const startYear = parseInt(startDateObj.format('YYYY'));\n const startMonth = parseInt(startDateObj.format('MM')) - 1;\n\n const filteredMonths: { [key: string]: string } = {};\n Array.from({ length: 12 }, (_, i) => {\n const monthDate = new Date(startYear, startMonth + i, 1);\n\n if (monthDate < startDateObj.toDate()) return null;\n\n const monthNumber = monthDate.getMonth();\n\n filteredMonths[`${monthDate.getFullYear()}_${monthNumber + 1}`] = monthDate.toLocaleString('nl-NL', {\n month: 'short',\n });\n return monthNumber;\n }).filter((month) => month !== null);\n\n return filteredMonths;\n }, [startDate]);\n\n const monthTabs = useMemo(() => {\n let monthIndex = 0;\n return Object.entries(months ?? {}).map(([key, month]) => {\n const heading = document.querySelector(`[data-month=\"${key}\"]`) as HTMLElement;\n if (heading === null) {\n console.log(heading, key, month);\n return null;\n }\n\n const offsetPercentage = (heading.offsetTop / (contentRef?.current?.scrollHeight ?? 1)) * 100;\n\n monthIndex++;\n return (\n \n );\n });\n }, [months]);\n\n const weekTabs = useMemo(() => {\n return Object.entries(weeks ?? {}).map(([key, week]) => {\n const heading = document.querySelector(`[data-week=\"${key}\"]`) as HTMLElement;\n if (heading === null) return null;\n\n const offsetPercentage = (heading.offsetTop / (contentRef?.current?.scrollHeight ?? 1)) * 100;\n\n return (\n {\n heading.scrollIntoView({ behavior: 'smooth' });\n }}\n style={{ top: `calc(${offsetPercentage}%)` }}\n />\n );\n });\n }, [weeks]);\n\n return (\n \n \n {children}\n \n {contentRef.current?.scrollHeight === contentRef.current?.clientHeight ? null : (\n \n \n \n \n {monthTabs}\n {weekTabs}\n \n \n )}\n \n );\n};\n\nexport default TimeLineScrollBar;\n","import { useSelector } from 'react-redux';\nimport { RootState } from '../../global';\nimport TimeLineScrollBar from './TimeLineScrollBar';\nimport useWindowSize from '../../utils/useWindowSize';\n\ntype Props = {\n children: React.ReactNode;\n showTimeline?: boolean;\n};\n\nexport default function CustomScrollBar({ children, showTimeline = false }: Props) {\n const { isMobileDevice } = useWindowSize();\n\n const {\n layout: { scrollbarData },\n } = useSelector((state: RootState) => state);\n\n if (scrollbarData && scrollbarData.length > 0 && !isMobileDevice) {\n return {children};\n }\n\n return <>{children};\n}\n","import React, { useEffect, useState } from 'react';\nimport { RootState } from '../global';\nimport { useSelector } from 'react-redux';\nimport { useHistory, NavLink, useLocation } from 'react-router-dom';\nimport NavigationBar from './../components/NavigationBar';\nimport { Button, Avatar, Label } from '../ui';\nimport {\n EventAvailable,\n Face,\n CalendarToday,\n Settings,\n Business,\n LocationOn,\n Group,\n HelpOutline,\n} from '@styled-icons/material-outlined';\nimport styled, { css } from 'styled-components';\nimport useWindowSize from '../utils/useWindowSize';\nimport isInStandaloneMode from '../utils/isInStandaloneMode';\nimport Logo from '../components/Logo';\nimport Help from '../components/Help';\nimport { releaseNotes } from '../releaseNotes';\nimport CustomScrollBar from '../components/CustomScrollBar/CustomScrollBar';\n\nconst Styled = styled.div`\n display: grid;\n grid-template-columns: 100%;\n grid-template-rows: 6rem 1fr;\n width: 100%;\n min-height: 100vh;\n overflow-x: hidden;\n\n ${isInStandaloneMode() &&\n css`\n height: 100vh;\n overflow-y: scroll;\n overflow-x: hidden;\n -webkit-overflow-scrolling: touch;\n touch-action: none;\n `}\n\n header {\n grid-column: 1 / span 2;\n z-index: 10;\n }\n\n aside {\n position: absolute;\n top: 6rem;\n left: 0;\n width: 70vw;\n height: calc(100vh - 6rem);\n }\n\n @media screen and (min-width: 1024px) {\n grid-template-columns: min(70vw, 16em) minmax(0, 1fr);\n\n aside {\n top: 0;\n position: fixed;\n width: min(70vw, 16em);\n height: 100%;\n overflow-y: auto;\n grid-row: 1 / span 2;\n grid-column: 1;\n }\n header {\n height: 6rem;\n grid-column: 2;\n }\n\n main {\n grid-column: 2;\n flex: 1;\n height: calc(100vh - 6rem);\n overflow-y: hidden;\n }\n }\n`;\n\nconst LogoWrapper = styled.div`\n height: 4rem;\n display: flex;\n align-items: center;\n margin-bottom: 2rem;\n padding-left: 0.75rem;\n`;\n\nconst SideBar = styled.div<{ open: boolean }>`\n height: calc(100vh - 6rem);\n display: flex;\n transform: ${(p) => (p.open ? 'translateX(0)' : 'translateX(-100%)')};\n transition: transform 0.3s cubic-bezier(0.45, 0, 0.21, 1);\n width: 100%;\n display: flex;\n flex-direction: column;\n padding: 1rem;\n border-right: 1px solid ${(props) => props.theme.colors.border};\n li {\n width: 100%;\n padding: 0.5rem 0;\n }\n\n @media screen and (min-width: 1024px) {\n height: 100vh;\n }\n`;\n\nconst ChildWrapper = styled.div<{ open: boolean }>`\n overflow-x: hidden;\n width: 100%;\n transform: ${(p) => (p.open ? 'translateX(70vw)' : 'translateX(0)')};\n transition: transform 0.3s cubic-bezier(0.45, 0, 0.21, 1);\n height: 100%;\n`;\n\nconst Footer = styled(Button.Minimal)`\n margin-bottom: 0.5rem;\n margin-top: auto;\n justify-content: flex-start;\n text-align: left;\n\n img {\n width: 3rem;\n height: 3rem;\n border-radius: 8px;\n background-color: gray;\n }\n\n & > div:last-child {\n display: flex;\n flex-direction: column;\n justify-content: space-around;\n margin-left: 1rem;\n }\n`;\n\nconst SettingsLink = styled(NavLink)`\n display: flex;\n align-items: center;\n padding: 0.5rem 1.25rem;\n width: 100%;\n height: 3.5rem;\n justify-content: flex-start;\n border-radius: 0.75rem;\n color: ${(props) => props.theme.colors.muted};\n text-decoration: none;\n cursor: pointer;\n white-space: nowrap;\n\n ${Label} {\n font-weight: 500;\n color: inherit;\n }\n\n svg {\n color: inherit;\n margin-right: 1rem;\n margin-left: -0.25rem;\n width: 1.25rem;\n height: 1.25rem;\n }\n\n &.active {\n background-color: ${(props) => props.theme.colors.primary};\n color: ${(props) => props.theme.colors.onPrimary};\n\n &:hover {\n background-color: ${(props) => props.theme.colors.primary};\n }\n }\n`;\n\ntype Tab = {\n name: string;\n pathName: string;\n icon: typeof EventAvailable;\n};\n\nconst menuTabs: Tab[] = [\n {\n name: 'Planningen',\n icon: EventAvailable,\n pathName: '/plannings',\n },\n {\n name: 'Mijn Reserveringen',\n icon: Face,\n pathName: '/reservations',\n },\n {\n name: 'Agenda',\n icon: CalendarToday,\n pathName: '/calendar',\n },\n {\n name: 'Mijn Instellingen',\n icon: Settings,\n pathName: '/settings',\n },\n];\n\nconst adminMenuTabs: Tab[] = [\n {\n name: 'Bedrijfsinstellingen',\n icon: Business,\n pathName: '/manage/companysettings',\n },\n {\n name: 'Locaties en Ruimtes',\n icon: LocationOn,\n pathName: '/manage/locations',\n },\n {\n name: 'Gebruikers',\n icon: Group,\n pathName: '/manage/usersettings',\n },\n];\n\nconst Layout: React.FC = ({ children }) => {\n const history = useHistory();\n const location = useLocation();\n const { user } = useSelector((state: RootState) => state);\n const { company } = useSelector((state: RootState) => state.companies);\n const { lastReadUpdate } = useSelector((state: RootState) => state.preferences);\n\n const [isHelpActive, setIsHelpActive] = useState(false);\n\n const { isMobileDevice } = useWindowSize();\n\n const [drawerOpen, setDrawerOpen] = useState(() => !isMobileDevice);\n const [showReleaseNoteBadge, setShowReleaseNoteBadge] = useState(false);\n\n const handleMenuToggle = () => {\n if (isMobileDevice) {\n setDrawerOpen((d) => !d);\n }\n };\n\n useEffect(() => {\n const lastReleaseNote = releaseNotes.sort((a, b) => {\n if (a.date.isBefore(b.date)) {\n return 1;\n }\n if (a.date.isAfter(b.date)) {\n return -1;\n }\n return 0;\n })[0];\n\n setShowReleaseNoteBadge(lastReleaseNote.version !== lastReadUpdate);\n }, [lastReadUpdate]);\n\n React.useEffect(() => {\n if (isMobileDevice) {\n setDrawerOpen(false);\n }\n }, [location.pathname, isMobileDevice]);\n\n const handleOnBackgroundClick = (event: React.MouseEvent) => {\n if (drawerOpen && isMobileDevice) {\n event.preventDefault();\n setDrawerOpen(false);\n }\n };\n\n // Set's the page title\n React.useEffect(() => {\n const baseName = 'Deskie';\n const allTabs = [...menuTabs, ...adminMenuTabs];\n const currentTab = allTabs.find((tab) => location.pathname.startsWith(tab.pathName));\n if (currentTab) {\n document.title = `${currentTab.name} | ${baseName}`;\n } else {\n document.title = baseName;\n }\n }, [location.pathname]);\n\n if (!user.user) return null;\n\n const renderTabsList = (tabs: Tab[]) => {\n return (\n <>\n {tabs.map((tab) => {\n const Icon = tab.icon;\n return (\n \n \n \n \n );\n })}\n \n );\n };\n\n // TODO: https://stackblitz.com/edit/react-ts-frji5h?file=components%2Fscrollbar%2Findex.tsx\n\n return (\n <>\n \n
    \n \n
    \n \n
    \n \n {children}\n \n
    \n
    \n setIsHelpActive(false)} />\n \n );\n};\n\nexport default Layout;\n","import React from 'react';\nimport moment from 'moment';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Route, Redirect, Switch } from 'react-router-dom';\nimport ProtectedRoute from './ProtectedRoute';\n\n// Types\nimport { RootState } from '../global';\n\n// Pages\nimport Calendar from './Calendar';\nimport Settings from './Settings';\nimport Locations from './Manager/Locations';\nimport Reservations from './Reservations';\nimport Plannings from './Plannings';\nimport CompanySettings from './CompanySettings';\nimport UserSettings from './UserSettings';\nimport Onboarding from './Onboarding';\n\n// Components\nimport DatePopup from '../components/DatePopup';\n\n// Actions\nimport { fetchLocations } from '../state/locations';\nimport { fetchCompany } from '../state/companies';\nimport Layout from './Layout';\n\nconst App: React.FC = () => {\n const dispatch = useDispatch();\n const user = useSelector((state: RootState) => state.user);\n const untoggled = useSelector((state: RootState) => state.offices.untoggled);\n const locations = useSelector((state: RootState) => state.locations);\n\n React.useEffect(() => {\n localStorage.setItem('untoggled-offices', JSON.stringify(untoggled));\n }, [untoggled]);\n\n React.useEffect(() => {\n dispatch(fetchCompany());\n dispatch(fetchLocations());\n }, [dispatch]);\n\n if ((user.loading && user.user === null) || (locations.loading && locations.locations.length === 0)) {\n return null;\n }\n\n if (user.user?.preferredLocation?.uuid === undefined && locations.locations.length > 1) {\n return ;\n }\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    404
    \n
    \n
    \n
    \n \n );\n};\n\nexport default App;\n","import { Reducer } from 'redux';\n\ntype FETCH_AUTH_REQUEST = { type: 'FETCH_AUTH_REQUEST' };\ntype FETCH_AUTH_SUCCESS = { type: 'FETCH_AUTH_SUCCESS' };\ntype FETCH_AUTH_FAILED = { type: 'FETCH_AUTH_FAILED' };\n\nexport type AuthStateAction = FETCH_AUTH_REQUEST | FETCH_AUTH_SUCCESS | FETCH_AUTH_FAILED;\n\nexport type AuthState = {\n isLoggedIn: boolean;\n loading: boolean;\n};\n\nconst initialState: AuthState = {\n isLoggedIn: false,\n loading: true,\n};\n\nconst authReducer: Reducer = (state = initialState, action) => {\n switch (action.type) {\n case 'FETCH_AUTH_REQUEST':\n return { ...state, loading: true };\n case 'FETCH_AUTH_SUCCESS':\n return {\n loading: false,\n isLoggedIn: true,\n };\n case 'FETCH_AUTH_FAILED':\n return {\n loading: false,\n isLoggedIn: false,\n };\n default:\n return state;\n }\n};\n\nexport { fetchLoginState } from './thunks';\nexport default authReducer;\n","import { Reducer } from 'redux';\nimport moment, { Moment } from 'moment';\nimport { Guest } from '../../global';\n\nexport interface GuestSuggestion {\n uuid: string;\n name: string;\n email: string;\n numberOfInvites: number;\n}\n\ntype OPEN_PLANNING_POPUP = {\n type: 'OPEN_PLANNING_POPUP';\n payload: { date: Moment; officeUuid: string };\n};\ntype CLOSE_PLANNING_POPUP = { type: 'CLOSE_PLANNING_POPUP' };\ntype SET_SELECTED_DATE = { type: 'SET_SELECTED_DATE'; payload: { date: Moment } };\ntype SET_SELECTED_OFFICE = { type: 'SET_SELECTED_OFFICE'; payload: { officeUuid: string } };\ntype SET_GUESTS = { type: 'SET_GUESTS'; payload: { guests: Guest[] } };\ntype SET_GUEST_SUGGESTIONS = { type: 'SET_GUEST_SUGGESTIONS'; payload: { guestSuggestions: GuestSuggestion[] } };\n\nexport type PlanningPopupStateAction =\n | OPEN_PLANNING_POPUP\n | CLOSE_PLANNING_POPUP\n | SET_SELECTED_DATE\n | SET_SELECTED_OFFICE\n | SET_GUESTS\n | SET_GUEST_SUGGESTIONS;\n\nexport type PlanningPopupState = {\n date: Moment;\n officeUuid: string | null;\n active: boolean;\n guests: Guest[];\n guestSuggestions: GuestSuggestion[];\n};\n\nconst initialState: PlanningPopupState = {\n date: moment(),\n officeUuid: null,\n active: false,\n guests: [],\n guestSuggestions: [],\n};\n\nconst planningPopupReducer: Reducer = (state = initialState, action) => {\n switch (action.type) {\n case 'SET_SELECTED_DATE':\n return {\n ...state,\n date: action.payload.date,\n };\n case 'SET_SELECTED_OFFICE':\n return {\n ...state,\n officeUuid: action.payload.officeUuid,\n };\n case 'OPEN_PLANNING_POPUP':\n return {\n ...state,\n active: true,\n date: action.payload.date,\n officeUuid: action.payload.officeUuid,\n };\n case 'CLOSE_PLANNING_POPUP':\n return {\n ...state,\n active: false,\n };\n case 'SET_GUESTS':\n return {\n ...state,\n guests: action.payload.guests,\n };\n case 'SET_GUEST_SUGGESTIONS':\n return {\n ...state,\n guestSuggestions: action.payload.guestSuggestions,\n };\n default:\n return state;\n }\n};\n\nexport default planningPopupReducer;\n","import { Reducer } from 'redux';\nimport { User } from '../../global';\n\ntype FETCH_USERS_REQUEST = { type: 'FETCH_USERS_REQUEST' };\ntype FETCH_USERS_SUCCESS = { type: 'FETCH_USERS_SUCCESS'; payload: User[] };\ntype FETCH_USERS_FAILED = { type: 'FETCH_USERS_FAILED' };\n\nexport type AllUsersState = {\n users: User[] | null;\n loading: boolean;\n success: boolean;\n error: boolean;\n};\n\nexport type AllUserStateAction = FETCH_USERS_REQUEST | FETCH_USERS_SUCCESS | FETCH_USERS_FAILED;\n\nexport const initialState: AllUsersState = {\n users: null,\n loading: true,\n success: false,\n error: false,\n};\n\nconst allUsersReducer: Reducer = (state = initialState, action) => {\n switch (action.type) {\n case 'FETCH_USERS_REQUEST':\n return { ...state, success: false, loading: true, error: false };\n case 'FETCH_USERS_SUCCESS':\n return {\n ...state,\n success: true,\n loading: false,\n error: false,\n users: action.payload,\n };\n case 'FETCH_USERS_FAILED':\n return {\n ...state,\n success: false,\n error: true,\n loading: false,\n users: null,\n };\n default:\n return state;\n }\n};\n\nexport { fetchAllUsers } from './thunks';\nexport default allUsersReducer;\n","import { Reducer } from 'redux';\n\ntype UPDATE_FILTERS = { type: 'UPDATE_FILTERS'; payload: { filters: PlanningFilters } };\ntype CLEAR_FILTERS = { type: 'CLEAR_FILTERS' };\ntype UNSET_FILTER_KEY = { type: 'UNSET_FILTER_KEY'; payload: { key: string } };\n\nexport type PlanningFilters = {\n [key: string]: string | number | undefined;\n};\n\nexport type PlanningFiltersStateAction = UPDATE_FILTERS | CLEAR_FILTERS | UNSET_FILTER_KEY;\n\nexport type PlanningFiltersState = {\n filters: PlanningFilters;\n};\n\nconst initialState: PlanningFiltersState = {\n filters: {},\n};\n\nconst planningFiltersReducer: Reducer = (\n state = initialState,\n action,\n) => {\n switch (action.type) {\n case 'UPDATE_FILTERS':\n return {\n ...state,\n filters: {\n ...state.filters,\n ...action.payload.filters,\n },\n };\n case 'CLEAR_FILTERS':\n return {\n ...state,\n filters: {},\n };\n case 'UNSET_FILTER_KEY':\n const filtersCopy = { ...state.filters };\n delete filtersCopy[action.payload.key];\n return {\n ...state,\n filters: { ...filtersCopy },\n };\n default:\n return state;\n }\n};\n\nexport default planningFiltersReducer;\n","import { Reducer } from 'redux';\nimport { Appearance } from '../../components/AppearanceSelector/AppearanceSelector';\n\ntype SET_APPEARANCE_PREFERENCE = { type: 'SET_APPEARANCE_PREFERENCE'; payload: Appearance };\ntype SET_LAST_READ_UPDATE = { type: 'SET_LAST_READ_UPDATE'; payload: string };\n\nexport type PreferencesStateAction = SET_APPEARANCE_PREFERENCE | SET_LAST_READ_UPDATE;\n\nexport type PreferencesState = {\n appearance: Appearance;\n lastReadUpdate: string;\n};\n\nconst initialState: PreferencesState = {\n appearance: (window.localStorage.getItem('app-appearance') || 'system') as Appearance,\n lastReadUpdate: window.localStorage.getItem('last-read-update') || '',\n};\n\nconst preferencesReducer: Reducer = (state = initialState, action) => {\n switch (action.type) {\n case 'SET_APPEARANCE_PREFERENCE':\n window.localStorage.setItem('app-appearance', action.payload.toString());\n\n return { ...state, appearance: action.payload };\n case 'SET_LAST_READ_UPDATE':\n window.localStorage.setItem('last-read-update', action.payload);\n\n return { ...state, lastReadUpdate: action.payload };\n default:\n return state;\n }\n};\n\nexport default preferencesReducer;\n","import { combineReducers } from 'redux';\nimport usersReducer from './users';\nimport authReducer from './authentication';\nimport locationsReducer from './locations';\nimport companiesReducer from './companies';\nimport planningPopupReducer from './planningPopup';\nimport officesReducer from './offices';\nimport allUsersReducer from './users/allUsersReducer';\nimport reservationsReducer from './reservations';\nimport planningReducer from './plannings';\nimport layoutReducer from './layout';\nimport planningFiltersReducer from './planningFilters';\nimport preferencesReducer from './preferences';\n\nconst rootReducer = combineReducers({\n auth: authReducer,\n user: usersReducer,\n locations: locationsReducer,\n offices: officesReducer,\n planningPopup: planningPopupReducer,\n planningFilters: planningFiltersReducer,\n users: allUsersReducer,\n reservations: reservationsReducer,\n planning: planningReducer,\n companies: companiesReducer,\n layout: layoutReducer,\n preferences: preferencesReducer,\n});\n\nexport default rootReducer;\n","import { createStore, applyMiddleware } from 'redux';\nimport thunk from 'redux-thunk';\nimport rootReducer from './rootReducer';\n\nexport default createStore(rootReducer, applyMiddleware(thunk));\n","import { PropsWithChildren, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory, useLocation } from 'react-router-dom';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { RootState } from '../global';\nimport { fetchUser, UserStateAction } from '../state/users';\n\nfunction UserProvider({ children }: PropsWithChildren<{}>) {\n const history = useHistory();\n const location = useLocation();\n const dispatch: ThunkDispatch = useDispatch();\n const { user, loading } = useSelector((state: RootState) => state.user);\n\n useEffect(() => {\n dispatch(fetchUser()).catch((e) => {\n if (e.status === 404) {\n return history.push(`/welcome${location.pathname !== '/' ? `?pathname=${location.pathname}` : ''}`);\n }\n if (e.status === 401) {\n return history.push('/login');\n }\n });\n }, [dispatch, history, location]);\n\n if (!user && loading) {\n return null;\n }\n\n if (user) {\n return <>{children};\n }\n\n return null;\n}\n\nexport default UserProvider;\n","import { PropsWithChildren, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { RootState } from '../global';\nimport { fetchLoginState } from '../state/authentication';\nimport Intro from '../containers/Intro';\n\nfunction AuthProvider({ children }: PropsWithChildren<{}>) {\n const dispatch = useDispatch();\n const { isLoggedIn, loading } = useSelector((state: RootState) => state.auth);\n\n useEffect(() => {\n dispatch(fetchLoginState());\n }, [dispatch]);\n\n if (!isLoggedIn && !loading) {\n return ;\n }\n\n if (isLoggedIn) {\n return <>{children};\n }\n\n return null;\n}\n\nexport default AuthProvider;\n","import axios from 'axios';\nimport { ThunkAction } from 'redux-thunk';\nimport { AuthStateAction } from '.';\nimport { RootState } from '../../global';\n\ntype AuthThunk = ThunkAction;\n\nexport const fetchLoginState = (): AuthThunk => async (dispatch) => {\n dispatch({ type: 'FETCH_AUTH_REQUEST' });\n\n try {\n const state = await axios.get('/login-state');\n if (state.status === 200) {\n dispatch({ type: 'FETCH_AUTH_SUCCESS' });\n }\n } catch (e: any) {\n dispatch({ type: 'FETCH_AUTH_FAILED' });\n }\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Button, Heading } from '../ui';\n\nconst Wrapper = styled.div`\n position: fixed;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n width: 100%;\n height: 100%;\n background: ${(props) => props.theme.colors.background};\n display: flex;\n justify-content: center;\n`;\n\nconst Container = styled.div`\n max-width: 100%;\n width: 32em;\n margin-left: auto;\n margin-right: auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 2rem;\n margin-bottom: 4rem;\n\n h1 {\n margin-bottom: 2rem;\n font-size: 2rem;\n }\n\n p {\n font-size: 0.875rem;\n color: ${(props) => props.theme.colors.muted};\n line-height: 1.5;\n }\n\n button {\n min-width: 12rem;\n margin-top: 2rem;\n }\n`;\n\nconst Error: React.FC<{\n title: string;\n message: string | React.ReactNode;\n action?: () => void;\n actionLabel?: string;\n}> = ({ title, message, action, actionLabel }) => {\n return (\n \n \n {title}\n {typeof message === 'string' ?

    {message}

    : { message }}\n {actionLabel && action && action()}>{actionLabel}}\n
    \n
    \n );\n};\n\nexport default Error;\n","import React, { ReactElement, useRef } from 'react';\nimport { ApplicationInsights } from '@microsoft/applicationinsights-web';\nimport { AppInsightsErrorBoundary, AppInsightsContext, ReactPlugin } from '@microsoft/applicationinsights-react-js';\nimport Error from '../components/Error';\nimport { useHistory } from 'react-router-dom';\n\nconst { instrumentationKey } = (window as any)['appConfig'];\n\nfunction AppInsightsProvider({ children }: { children: ReactElement }) {\n const isDevelopment = process.env.NODE_ENV === 'development';\n\n const history = useHistory();\n\n const reactPlugin = useRef(new ReactPlugin());\n\n const appInsights = useRef(\n isDevelopment\n ? null\n : new ApplicationInsights({\n config: {\n instrumentationKey: instrumentationKey,\n maxBatchInterval: 0,\n disableFetchTracking: false,\n extensions: [reactPlugin.current],\n extensionConfig: {\n [reactPlugin.current.identifier]: { history: history },\n },\n },\n }),\n );\n\n React.useEffect(() => {\n appInsights.current?.loadAppInsights();\n }, []);\n\n if (isDevelopment) {\n return <>{children};\n }\n\n return (\n \n \n {children}\n \n \n );\n}\n\nexport { AppInsightsProvider };\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Check } from '@styled-icons/material-outlined';\nimport { Button, Radio } from '../ui';\n\nexport type PricingPlanProps = {\n title: string;\n bullets?: string[];\n cost?: string;\n text?: string;\n isHighlighted?: boolean;\n isTryable?: boolean;\n onClick: () => void;\n isSelectable?: boolean;\n isSelected?: boolean;\n showNote?: boolean;\n};\n\nconst StyledPricingPlan = styled.div<{ isHighlighted: boolean }>`\n display: flex;\n flex-direction: column;\n cursor: pointer;\n\n .plan-highlight {\n height: 4.5rem;\n color: #fff;\n background-color: ${(props) => props.theme.colors.primary};\n border-radius: 1.5rem 1.5rem 0 0;\n font-size: 0.875rem;\n display: flex;\n justify-content: center;\n align-items: center;\n padding-bottom: 2rem;\n margin-bottom: -2rem;\n }\n\n .plan-inner {\n margin-top: ${(props) => (props.isHighlighted ? '0' : '2.5rem')};\n display: flex;\n flex-direction: column;\n padding: 2rem;\n background-color: white;\n border-radius: 1.5rem;\n height: 100%;\n min-height: 20rem;\n box-shadow: 0 0.8px 2.1px rgba(0, 0, 0, 0.02), 0 2.7px 6.9px rgba(0, 0, 0, 0.03), 0 12px 31px rgba(0, 0, 0, 0.05);\n\n .plan-title {\n font-family: 'Poppins', sans-serif;\n font-weight: 500;\n font-size: 1.25rem;\n margin: 0;\n }\n\n .plan-bullets {\n padding: 0;\n margin: 0;\n\n li {\n display: flex;\n align-items: center;\n margin: 1rem 0rem;\n color: ${(props) => props.theme.colors.muted};\n font-size: 0.875rem;\n\n svg {\n color: ${(props) => props.theme.colors.black};\n height: 1.5rem;\n width: 1.5rem;\n margin-right: 1rem;\n }\n }\n }\n\n .plan-footer {\n margin-top: auto;\n display: flex;\n flex-direction: column;\n }\n\n .plan-cost {\n color: ${(props) => props.theme.colors.primary};\n font-family: 'Poppins', sans-serif;\n text-align: center;\n margin: 2rem 0rem;\n font-weight: 500;\n font-size: 1.125rem;\n }\n\n .plan-note {\n color: ${(props) => props.theme.colors.muted};\n font-size: 0.75rem;\n text-align: center;\n margin-top: -1.5rem;\n height: 0;\n margin-bottom: 2rem;\n }\n\n .plan-text {\n color: ${(props) => props.theme.colors.muted};\n font-size: 0.875rem;\n line-height: 1.5;\n margin: 1rem 0rem;\n }\n }\n`;\n\nfunction PricingPlan({\n isSelectable = false,\n isSelected = false,\n title,\n bullets,\n text,\n cost,\n isHighlighted = false,\n isTryable = true,\n showNote = false,\n onClick,\n}: PricingPlanProps) {\n const props = isSelectable ? { onClick: onClick, isSelected: isSelected } : {};\n return (\n \n {isHighlighted &&
    Eerste maand gratis
    }\n
    \n

    \n {isSelectable ? (\n onClick()} />\n ) : (\n title\n )}\n

    \n {bullets && (\n
      \n {bullets.map((item, index) => (\n
    • \n \n {item}\n
    • \n ))}\n
    \n )}\n\n {text && {text}}\n\n
    \n {cost && {cost}}\n {showNote && Per gebruiker (excl. BTW)}\n {!isSelectable && (\n <>\n {isTryable ? (\n \n Aan de slag\n \n ) : (\n \n Contact\n \n )}\n \n )}\n
    \n
    \n
    \n );\n}\n\nexport default PricingPlan;\n","import { useState, FormEvent } from 'react';\nimport { Container, Heading, Input, Form, FormField, Button, ElevatedCard, Steps, Switch } from '../ui';\nimport Logo from './Logo';\nimport PricingPlan from './PricingPlan';\nimport styled from 'styled-components';\nimport { useForm, Controller } from 'react-hook-form';\nimport { PricingPlan as PricingPlanType } from '../global';\nimport { CreateTenantProps } from '../state/tenants/thunks';\nimport { Check } from '@styled-icons/material-outlined';\n\ntype TenantCreatorProps = {\n companyName?: string;\n contactPerson?: string;\n pricingPlan?: string;\n onCreateTenant: (props: CreateTenantProps) => void;\n};\n\ntype TenantFormData = {\n companyName: string;\n contactPerson: string;\n street: string;\n postalCode: string;\n city: string;\n chamberOfCommerceNumber: string;\n vatNumber?: string;\n invoicingEmail: string;\n pricingPlan: PricingPlanType;\n};\n\nconst StyledTenantCreator = styled.div`\n padding-bottom: 2rem;\n\n .container {\n width: min(64rem, 100%);\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n }\n\n .steps {\n margin-top: 2rem;\n margin-bottom: 4rem;\n width: min(20rem, 100%);\n }\n\n .pricing {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(min(250px, 100%), 1fr));\n gap: 2rem;\n }\n\n .yearly {\n width: 100%;\n display: flex;\n justify-content: center;\n margin-bottom: 2rem;\n margin-top: -2rem;\n }\n .summary {\n & > * + * {\n margin-top: 2rem;\n }\n }\n\n .summary-plan {\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n strong {\n font-weight: 600;\n }\n\n & > *:last-child {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n\n & > span {\n color: ${(props) => props.theme.colors.muted};\n font-size: 0.75rem;\n margin-top: 0.5rem;\n }\n }\n\n @media screen and (max-width: 560px) {\n flex-direction: column;\n align-items: flex-start;\n\n & > *:last-child {\n margin-top: 1.5rem;\n color: ${(props) => props.theme.colors.primary};\n align-items: flex-start;\n }\n }\n }\n\n .summary-banner {\n color: ${(props) => props.theme.colors.primary};\n font-weight: 500;\n display: flex;\n margin-top: 2rem;\n align-items: center;\n\n svg {\n width: 1.25rem;\n margin-right: 0.5rem;\n }\n }\n\n .summary-footer {\n margin: 2rem 0 0;\n }\n\n .formField--combined {\n display: grid;\n grid-template-columns: minmax(0, 1fr) minmax(0, 2fr);\n gap: 1.5rem;\n\n @media screen and (max-width: 680px) {\n grid-template-columns: 1fr;\n gap: 0;\n }\n }\n`;\n\nconst Header = styled.header`\n padding: 2rem 1.5rem;\n position: relative;\n border-bottom: 1px solid ${(props) => props.theme.colors.border};\n display: flex;\n justify-content: center;\n\n .logo {\n position: absolute;\n left: 1.5rem;\n }\n\n @media screen and (max-width: 680px) {\n .logo {\n display: none;\n }\n }\n`;\n\nconst Card = styled(ElevatedCard)`\n width: min(40rem, 100%);\n margin-left: auto;\n margin-right: auto;\n padding: 2rem;\n`;\n\nconst ButtonGroup = styled.div`\n display: flex;\n width: 100%;\n align-items: center;\n justify-content: flex-start;\n margin-top: 2rem;\n margin-left: auto;\n margin-right: auto;\n\n button {\n min-width: 10rem;\n }\n\n ${Button.Primary} {\n margin-left: auto;\n }\n\n ${Button.Minimal} {\n border-color: ${(props) => props.theme.colors.primary};\n color: ${(props) => props.theme.colors.primary};\n margin-right: auto;\n }\n\n @media screen and (max-width: 560px) {\n flex-direction: column-reverse;\n\n & > * + * {\n margin-bottom: 1rem;\n }\n\n button {\n width: 100%;\n }\n }\n`;\n\nconst title = ['Kies jouw Deskie abonnement', 'Vul je betaalgegevens in', 'Overzicht'];\n\n/* TODO Place this somewhere else: */\nconst plans = {\n Free: {\n title: 'Starter',\n cost: 'Gratis',\n costYearly: 'Gratis',\n users: '0 - 10 gebruikers',\n bullets: [],\n },\n Premium: {\n title: 'Professional',\n cost: '€ 2,99 per maand',\n costYearly: '€ 1,99 per maand',\n users: 'Vanaf 10 gebruikers',\n bullets: [],\n },\n Business: {\n title: 'Enterprise',\n cost: '',\n costYearly: '',\n text: 'Meer dan 500 gebruikers? Neem contact op met Deskie Support.',\n users: '500+ gebruikers',\n bullets: [],\n },\n};\n\nfunction TenantCreator({ pricingPlan, companyName, contactPerson, onCreateTenant }: TenantCreatorProps) {\n const [isLoading, setIsLoading] = useState(false);\n const [yearly, setYearly] = useState(true);\n const [step, setStep] = useState(1);\n\n const _step = step > 3 ? 3 : step < 2 ? 1 : step;\n\n const { register, handleSubmit, errors, control, watch } = useForm({\n defaultValues: {\n companyName: companyName,\n contactPerson: contactPerson,\n pricingPlan: pricingPlan === 'Free' ? 'Free' : pricingPlan === 'Business' ? 'Business' : 'Premium',\n },\n });\n\n const fields = watch(['pricingPlan']);\n\n const handleNext = () => {\n setStep(_step + 1);\n };\n\n const handlePrevious = () => {\n setStep(_step - 1);\n };\n\n const onSubmit = (data: TenantFormData) => {\n if (_step === 3) {\n setIsLoading(true);\n onCreateTenant({\n name: data.companyName,\n pricingPlan: data.pricingPlan,\n details: {\n address: {\n city: data.city,\n street: data.street,\n postalCode: data.postalCode,\n },\n vatNumber: data.vatNumber,\n chamberOfCommerceNumber: data.chamberOfCommerceNumber,\n invoicePeriod: yearly ? 'Year' : 'Month',\n invoicingEmail: data.invoicingEmail,\n contactPerson: data.contactPerson,\n },\n });\n } else {\n handleNext();\n }\n };\n\n const handleSubmitBeforeLastStep = (e: FormEvent) => {\n e.preventDefault();\n window.scrollTo({\n top: 0,\n left: 0,\n behavior: 'auto',\n });\n handleNext();\n };\n\n return (\n \n
    \n \n {title[_step - 1]}\n
    \n \n \n
    1 ? handleSubmit(onSubmit) : handleSubmitBeforeLastStep} isLoading={isLoading}>\n
    \n
    \n setYearly(e.target.checked)}\n label=\"Ik betaal jaarlijks\"\n />\n
    \n (\n
    \n {Object.entries(plans).map(([key, plan], index) => (\n (key === 'Business' ? (window.location.href = '/contact') : onChange(key))}\n isTryable={key !== 'Business'}\n />\n ))}\n
    \n )}\n />\n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n \n \n \n \n \n \n
    \n \n \n \n \n \n \n
    \n\n
    \n \n Samenvatting\n {fields.pricingPlan !== 'Free' && (\n
    \n \n Eerste 30 dagen gratis uitproberen\n
    \n )}\n
    \n \n {plans[fields.pricingPlan].title} ({plans[fields.pricingPlan].users})\n \n \n {yearly ? plans[fields.pricingPlan].costYearly : plans[fields.pricingPlan].cost}\n {fields.pricingPlan !== 'Free' && Per gebruiker (excl. BTW)}\n \n
    \n\n {fields.pricingPlan !== 'Free' && (\n
    \n setYearly(e.target.checked)}\n label=\"Ik betaal jaarlijks\"\n />\n
    \n )}\n
    \n
    \n 1 ? 'min(40rem, 100%)' : '100%' }}>\n {_step > 1 && (\n \n Vorige\n \n )}\n {_step === 3 ? 'Bevestig abonnement' : 'Volgende'}\n \n
    \n
    \n
    \n );\n}\n\nexport default TenantCreator;\n","/**\n * These are not \"real\" thunks because the tenants are not set in the global state,\n * these function do not dispatch other actions.\n */\n\nimport axios from 'axios';\nimport { Tenant, PricingPlan, InvoicePeriod } from '../../global';\n\nexport const getTenant = () => {\n return axios.get('/api/Tenants/me').catch((e) => Promise.reject(e.response));\n};\n\nexport type CreateTenantProps = {\n name: string;\n pricingPlan: PricingPlan;\n details: {\n address: {\n street: string;\n postalCode: string;\n city: string;\n };\n chamberOfCommerceNumber: string;\n vatNumber?: string;\n invoicingEmail: string;\n contactPerson?: string;\n purchaseOrderNumber?: string;\n invoicePeriod: InvoicePeriod;\n };\n};\n\nexport const createTenant = (props: CreateTenantProps) => {\n return axios({ method: 'POST', url: '/api/Tenants', data: props }).catch((e) => Promise.reject(e.response));\n};\n","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useHistory, useLocation } from 'react-router-dom';\nimport { ThunkDispatch } from 'redux-thunk';\nimport TenantCreator from '../components/TenantCreator';\nimport { RootState } from '../global';\nimport { createTenant, getTenant } from '../state/tenants';\nimport type { CreateTenantProps } from '../state/tenants/thunks';\nimport { createUser, fetchUser, UserStateAction } from '../state/users';\n\nfunction Welcome() {\n const history = useHistory();\n const location = useLocation();\n const dispatch: ThunkDispatch = useDispatch();\n const [newTenant, setNewTenant] = useState(false);\n\n const query = useMemo(() => new URLSearchParams(window.location.search), []);\n\n const redirect = useCallback(() => {\n const path = new URLSearchParams(location.search).get('pathname') || '/plannings';\n history.push(path);\n }, [history, location]);\n\n const handleCreateAndFetchUser = useCallback(async () => {\n await dispatch(createUser());\n await dispatch(fetchUser());\n }, [dispatch]);\n\n const onCreateTenant = async (props: CreateTenantProps) => {\n try {\n await createTenant(props);\n await handleCreateAndFetchUser();\n redirect();\n } catch (e: any) {\n throw Error(e);\n }\n };\n\n useEffect(() => {\n const init = async () => {\n try {\n await getTenant();\n await handleCreateAndFetchUser();\n redirect();\n } catch (e: any) {\n // User create function response is 403 forbidden so the user probably exists already\n if (e.status === 403) {\n redirect();\n }\n if (e.status === 404) {\n setNewTenant(true);\n }\n }\n };\n\n init();\n }, [dispatch, handleCreateAndFetchUser, redirect]);\n\n if (newTenant) {\n return (\n \n );\n }\n\n return null;\n}\n\nexport default Welcome;\n","import { useState, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport { ThemeProvider } from 'styled-components';\nimport { RootState } from '../global';\nimport { lightTheme, darkTheme } from '../ui/themes';\n\ntype Props = {\n children: React.ReactNode;\n};\n\nexport default function CustomThemeProvider({ children }: Props) {\n const [theme, setTheme] = useState(lightTheme);\n const { appearance } = useSelector((state: RootState) => state.preferences);\n\n useEffect(() => {\n const colorSchemePreference = window.matchMedia('(prefers-color-scheme: dark)');\n\n const setThemeBasedOnSystemPreference = () => {\n switch (appearance) {\n case 'dark':\n setTheme(darkTheme);\n break;\n case 'light':\n setTheme(lightTheme);\n break;\n case 'system':\n setTheme(colorSchemePreference.matches ? darkTheme : lightTheme);\n break;\n }\n };\n\n colorSchemePreference.addEventListener('change', setThemeBasedOnSystemPreference);\n setThemeBasedOnSystemPreference();\n return () => {\n colorSchemePreference.removeEventListener('change', setThemeBasedOnSystemPreference);\n };\n }, [appearance]);\n\n return {children};\n}\n","import { useEffect, useState } from 'react';\nimport useWindowSize from '../../utils/useWindowSize';\nimport { Button, Drawer, Modal } from '../../ui';\nimport styled from 'styled-components';\n\ntype Props = {\n children: React.ReactNode;\n allowShow: boolean;\n onUpdatePreference: (value: string) => void;\n};\n\nconst ButtonRow = styled.div`\n display: flex;\n flex-direction: column;\n margin-top: 2rem;\n`;\n\nexport default function AndroidInstallProvider({ children, allowShow, onUpdatePreference }: Props) {\n const { isMobileDevice } = useWindowSize();\n const [isVisible, setIsVisible] = useState(false);\n const [deferredPrompt, setDeferredPrompt] = useState(null);\n\n let Element = isMobileDevice ? Drawer : Modal;\n\n useEffect(() => {\n // Initialize deferredPrompt for use later to show browser install prompt.\n window.addEventListener('beforeinstallprompt', (e) => {\n // Prevent the mini-infobar from appearing on mobile\n e.preventDefault();\n // Stash the event so it can be triggered later.\n setDeferredPrompt(e);\n // Update UI notify the user they can install the PWA\n setIsVisible(true);\n });\n }, []);\n\n useEffect(() => {\n window.addEventListener('appinstalled', () => {\n // Hide the app-provided install promotion\n hideInstallPromotion();\n // Clear the deferredPrompt so it can be garbage collected\n setDeferredPrompt(null);\n // Optionally, send analytics event to indicate successful install\n });\n }, []);\n\n const hideInstallPromotion = () => {\n // Hide modal or drawer\n setIsVisible(false);\n };\n\n const handleInstallPWA = async () => {\n // Hide the app provided install promotion\n hideInstallPromotion();\n // Show the install prompt\n deferredPrompt.prompt();\n // Wait for the user to respond to the prompt\n await deferredPrompt.userChoice;\n // Optionally, send analytics event with outcome of user choice\n // We've used the prompt, and can't use it again, throw it away\n setDeferredPrompt(null);\n };\n\n const handleHideForever = () => {\n hideInstallPromotion();\n onUpdatePreference('false');\n };\n\n if (!allowShow) return <>{children};\n return (\n <>\n \n

    Met de app kun je eenvoudig vanaf jouw beginscherm reserveringen maken en inzien.

    \n \n Installeer de app\n Nee, bedankt\n \n
    \n {children}\n \n );\n}\n","import { Title } from '@styled-icons/material-outlined';\nimport { clamp } from 'lodash';\nimport { title } from 'process';\nimport { useMemo, useRef, useEffect } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useSpring, animated } from 'react-spring';\nimport { useDrag } from 'react-use-gesture';\nimport styled from 'styled-components';\nimport { projection, findNearestNumberInArray, rubberBandIfOutOfBounds } from '../../utils/animation';\n\ntype NativeDrawerProps = {\n children: React.ReactNode;\n isOpen: boolean;\n onCancel?: () => void;\n};\n\nconst portalRoot = document.getElementById('portal');\n\nconst spring1 = {\n tension: 350,\n friction: 34,\n};\n\nconst spring2 = {\n tension: 175,\n friction: 25,\n};\n\nconst Backdrop = styled.div`\n position: fixed;\n inset: 0;\n background-color: ${(props) => props.theme.iosStyles.backdropBackground};\n opacity: 0;\n transition: opacity 0.2s ease-in;\n`;\n\nconst Wrapper = styled.div`\n position: fixed;\n display: flex;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n z-index: 1001;\n overflow-y: hidden;\n pointer-events: none;\n`;\n\nconst Inner = styled.div`\n width: 100%;\n\n border-radius: 10px 10px 0 0;\n background-color: ${(props) => props.theme.iosStyles.cardBackground};\n backdrop-filter: blur(50px);\n\n position: fixed;\n bottom: 0;\n\n &:before {\n content: '';\n z-index: 1;\n position: absolute;\n top: 6px;\n left: 50%;\n transform: translateX(-50%);\n\n width: 36px;\n height: 5px;\n border-radius: 3px;\n\n background-color: ${(props) => props.theme.iosStyles.handleBarColor};\n }\n\n * {\n font-family: -apple-system, system-ui, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n }\n`;\n\nexport default function IosNativeDrawer({ children, isOpen, onCancel }: NativeDrawerProps) {\n const stops = useMemo(() => [0, window.innerHeight], []);\n const drawerRef = useRef(null);\n const [{ y }, setY] = useSpring<{ y: number }>(() => ({\n y: stops[1],\n }));\n\n const [{ scrollY }, setScrollY] = useSpring<{ scrollY: number }>(() => ({\n scrollY: 0,\n onFrame: (props: any) => {\n if (drawerRef.current) drawerRef.current.scrollTop = props.scrollY;\n },\n }));\n\n useEffect(() => {\n setY({\n y: isOpen ? stops[0] : stops[1],\n immediate: false,\n config: spring2,\n });\n }, [isOpen, setY, stops]);\n\n const threshold = 10;\n\n const bind = useDrag(\n ({ vxvy: [, velocityY], delta: [, deltaY], movement: [movementX, movementY], last, memo, event }) => {\n if (!drawerRef.current) return;\n\n if (!memo) {\n const isIntentionalGesture = Math.abs(movementY) > threshold && Math.abs(movementY) > Math.abs(movementX);\n\n if (!isIntentionalGesture) return;\n memo = y.getValue() - movementY;\n }\n\n const isScrollable = drawerRef.current.scrollHeight > drawerRef.current.clientHeight;\n const maxScrollTop = drawerRef.current.scrollHeight - drawerRef.current.clientHeight;\n\n if (last) {\n const projectedEndpoint = y.getValue() + projection(velocityY);\n const projectedScrollEndpoint = scrollY.getValue() + projection(velocityY) * -1;\n\n if (projectedScrollEndpoint < -2000 || scrollY.getValue() === 0) {\n const point = findNearestNumberInArray(projectedEndpoint, stops);\n\n setScrollY({\n scrollY: 0,\n immediate: false,\n config: spring1,\n });\n\n if (point > 0 && onCancel) {\n onCancel();\n } else {\n setY({\n y: point,\n immediate: false,\n config: spring1,\n });\n }\n } else {\n setScrollY({\n scrollY: clamp(0, maxScrollTop, projectedScrollEndpoint),\n immediate: false,\n config: spring2,\n });\n }\n\n return;\n }\n\n if (isScrollable && (deltaY < 0 || drawerRef.current.scrollTop > 0)) {\n const scrollTop = clamp(0, maxScrollTop, deltaY * -1 + scrollY.getValue());\n setScrollY({\n scrollY: scrollTop,\n immediate: true,\n });\n return;\n }\n\n const newY = rubberBandIfOutOfBounds(stops[0], stops[1], movementY + memo, 0.08);\n\n setY({\n y: newY,\n immediate: true,\n });\n\n return memo;\n },\n {},\n );\n\n if (!portalRoot) return null;\n\n return ReactDOM.createPortal(\n \n \n `translate3D(0, ${y}px, 0)`),\n }}\n >\n {children}\n \n ,\n portalRoot,\n );\n}\n","import styled from 'styled-components';\n\ntype Props = {\n title: string;\n buttonIcon?: string | Element | React.ReactNode;\n onButtonPress?: () => void;\n};\n\nconst IosDrawerHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 13px 16px;\n`;\n\nconst IosDrawerHeaderTitle = styled.div`\n font-weight: 500;\n font-size: ${(props) => props.theme.iosStyles.titleSize};\n color: ${(props) => props.theme.iosStyles.titleColor};\n`;\n\nconst IosDrawerHeaderButton = styled.div`\n width: 30px;\n height: 30px;\n background-color: ${(props) => props.theme.iosStyles.iconBackground};\n color: ${(props) => props.theme.iosStyles.iconBackground};\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n border-radius: 15px;\n pointer-events: all;\n\n svg {\n width: 12px;\n height: 12px;\n }\n`;\n\nexport default function IosNativeDrawerHeader({ title, buttonIcon, onButtonPress }: Props) {\n return (\n \n {title}\n {buttonIcon && {buttonIcon}}\n \n );\n}\n","import styled from 'styled-components';\n\nconst IosDrawerContentBlock = styled.div`\n padding: 16px;\n\n p {\n font-size: ${(props) => props.theme.iosStyles.contentSize};\n line-height: 17px;\n color: ${(props) => props.theme.iosStyles.contentColor};\n margin: 0;\n padding: 0;\n }\n`;\n\ntype Props = {\n children: string | JSX.Element;\n};\n\nexport default function IosNativeDrawerContent({ children }: Props) {\n return (\n \n

    {children}

    \n
    \n );\n}\n","import styled from 'styled-components';\n\nconst IosNativeDrawerSeparator = styled.div`\n height: 1px;\n width: 100%;\n background-color: rgba(0, 0, 0, 0.1);\n`;\n\nexport default IosNativeDrawerSeparator;\n","import styled from 'styled-components';\n\ntype Props = {\n icon: string | Element | React.ReactNode;\n text: string;\n};\n\nconst IosRow = styled.div`\n display: flex;\n padding: 16px;\n justify-content: space-between;\n align-items: center;\n`;\nconst IosIcon = styled.div`\n width: 60px;\n height: 60px;\n border-radius: 12px;\n background-color: ${(props) => props.theme.iosStyles.iconBackground};\n margin-right: 18px;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n padding: 6px;\n\n > svg {\n width: 100%;\n height: 100%;\n }\n`;\nconst IosText = styled.div`\n flex: 1;\n`;\n\nexport default function IosNativeDrawerStep({ icon, text }: Props) {\n return (\n \n {icon}\n {text}\n \n );\n}\n","import { useEffect, useState } from 'react';\nimport IosNativeDrawer from '../../ui/IosNativeDrawer/IosNativeDrawer';\nimport IosNativeDrawerHeader from '../IosNativeComponents/IosNativeDrawerHeader';\nimport IosNativeDrawerContent from '../IosNativeComponents/IosNativeDrawerContent';\nimport IosNativeDrawerSeparator from '../IosNativeComponents/IosNativeDrawerSeparator';\nimport IosNativeDrawerStep from '../IosNativeComponents/IosNativeDrawerStep';\nimport { useTheme } from 'styled-components';\n\ntype Props = {\n children: React.ReactNode;\n allowShow: boolean;\n onUpdatePreference: (value: string) => void;\n};\n\nexport default function IosInstallProvider({ children, allowShow, onUpdatePreference }: Props) {\n const [isVisible, setIsVisible] = useState(false);\n const theme = useTheme();\n\n useEffect(() => {\n setTimeout(() => {\n setIsVisible(true);\n }, 500);\n }, []);\n\n const closeAndAskShowAgain = () => {\n onUpdatePreference('false');\n setIsVisible(false);\n };\n\n if (!allowShow) return <>{children};\n\n return (\n <>\n setIsVisible(false)}>\n \n \n \n }\n onButtonPress={closeAndAskShowAgain}\n />\n \n \n Deze website heeft app-functionaliteit. Voeg het toe aan je startscherm om het op volledig scherm en offline\n te gebruiken. Als je de Safari browser gebruikt, volg je de volgende stappen:\n \n \n \n \n \n \n }\n />\n \n \n \n \n }\n />\n \n {children}\n \n );\n}\n","import { useSelector } from 'react-redux';\nimport AndroidInstallProvider from './AndroidInstallProvider';\nimport IosInstallProvider from './IosInstallProvider';\nimport { RootState } from '../../global';\n\ntype Props = {\n children: React.ReactNode;\n};\n\nexport default function PwaInstallProvider({ children }: Props) {\n const { user } = useSelector((state: RootState) => state.user);\n\n const checkPlatform = () => {\n const ua = navigator.userAgent.toLowerCase();\n const isAndroid = ua.indexOf('android') > -1;\n const isIos = ua.indexOf('iphone') > -1 || ua.indexOf('ipad') > -1;\n const isMobile = isAndroid || isIos;\n return { isAndroid, isIos, isMobile };\n };\n\n // Checks if the PWA is already installed\n const checkStandalone = () => {\n const isStandalone = window.matchMedia('(display-mode: standalone)').matches;\n return isStandalone;\n };\n\n const setShowPreference = (value = 'false') => {\n localStorage.setItem('showPwaInstall', value);\n };\n\n const getAllowShow = () => {\n const showPreference = localStorage.getItem('showPwaInstall');\n return !(showPreference === 'false');\n };\n\n const platform = checkPlatform();\n\n // Don't present PWA prompt on desktop, or if already installed\n if (checkStandalone() || !checkPlatform().isMobile || !getAllowShow()) {\n return <>{children};\n }\n\n if (platform.isAndroid) {\n return (\n \n {children}\n \n );\n }\n\n if (platform.isIos) {\n return (\n \n {children}\n \n );\n }\n\n return <>{children};\n}\n","import ReactDOM from 'react-dom';\nimport 'react-toastify/dist/ReactToastify.css';\nimport * as serviceWorker from './serviceWorkerRegistration';\nimport moment from 'moment';\nimport axios from 'axios';\nimport 'moment/locale/nl';\nimport App from './containers/App';\nimport store from './state/store';\nimport { Provider } from 'react-redux';\nimport { ToastContainer, Slide } from 'react-toastify';\nimport 'react-toastify/dist/ReactToastify.css';\nimport { GlobalStyle } from './ui';\nimport { BrowserRouter as Router, Switch, Route } from 'react-router-dom';\nimport UserProvider from './utils/userProvider';\nimport AuthProvider from './utils/authProvider';\nimport 'moment/locale/nl';\nimport { AppInsightsProvider } from './utils/appInsights';\nimport Intro from './containers/Intro';\nimport Welcome from './containers/Welcome';\nimport CustomThemeProvider from './components/CustomThemeProvider';\nimport PwaInstallProvider from './components/PwaInstallProvider/PwaInstallProvider';\n\nconst { apiUrl } = (window as any)['appConfig'];\n\naxios.defaults.baseURL = apiUrl;\nmoment.locale('nl');\n\nReactDOM.render(\n // \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ,\n // ,\n document.getElementById('root'),\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.register();\n"],"sourceRoot":""}