{"version":3,"sources":["assets/images/warning-fleet.svg","assets/images/xls-file-add.svg","assets/images/xls-file-dropping.svg","assets/images/xls-file-empty.svg","assets/images/xls-file-checked.svg","assets/images/warning-fleet-orange.svg","assets/images/product-ticket.svg","assets/images/clock-filled.svg","assets/images/available-spots.svg","assets/images/available-spots-red.svg","assets/images/logo.png","typography/fonts/Futura-Book.woff2","typography/fonts/Futura-Demi.woff2","assets/images/ticket.svg","assets/images/location-marker.svg","assets/images/season-ticket.svg","assets/images/vehicle.svg","assets/images/xls-file-loading.svg","assets/images/empty-state-car.svg","assets/images/fm_mobile_bg.jpg","theme/variables.ts","ui/CustomSpinner/CustomSpinner.tsx","components/AppLoader/AppLoader.tsx","context/store/actions/appContext.types.ts","context/store/reducers/appContext.reducer.ts","context/AppContextProvider.tsx","context/hooks/useAppContext.ts","translations/index.ts","components/LanguageSelector/LanguageSelector.tsx","ui/NavLinkItem/NavLinkItem.tsx","ui/NavigationBar/EnvironmentInfo/EnvironmentInfo.tsx","utils/hooks/useOutsideClick.ts","utils/userManager.ts","services/storage.service.ts","components/UserCard/userCard.business.ts","ui/ContainerArrowUp/ContainerArrowUp.tsx","ui/CustomButton/CustomButton.tsx","ui/Spacer/Spacer.tsx","components/UserCard/UserCardStyledComponents.ts","components/UserCard/UserCardDetails.tsx","components/UserCard/useUserCardState.ts","components/UserCard/UserCard.tsx","ui/Icons/MyProductsIcon.tsx","router/AppRoute.ts","components/DataTable/DataTableContext/DataTableContextProvider.tsx","ui/Section/Section.tsx","ui/RequiredInputLabel/RequiredInputLabel.tsx","typography/fonts.ts","ui/Heading/Heading.tsx","ui/CustomInput/CustomInput.tsx","components/DelegeeForm/ToggleSelectAll/ToggleSelectAll.tsx","ui/CircleImage/CircleImage.tsx","components/DelegeeForm/DataRowCol/DataRowCol.tsx","ui/CustomCheckbox/CustomCheckbox.tsx","components/QParkChip/QParkChip.styledcomponents.ts","components/QParkChip/QParkChip.tsx","store/helpers/action.helper.ts","store/action-types/environment.types.ts","store/reducers/environment.reducer.ts","store/action-types/parkingProducts.types.ts","store/helpers/parkingProductsReducer.helper.ts","store/helpers/dva-optimistic-updates.ts","store/reducers/parkingProducts.reducer.ts","store/action-types/toast.types.ts","store/reducers/toast.reducer.ts","store/action-types/loader.types.ts","store/reducers/loader.reducer.ts","store/action-types/oidc.types.ts","store/reducers/oidc.reducer.ts","store/action-types/ai.types.ts","store/reducers/ai.reducer.ts","models/visitor-booking/ProductType.ts","models/visitor-booking/VisitorBookingStatus.ts","store/action-types/visitorBooking.types.ts","store/reducers/visitor-booking/visitorBooking.reducer.ts","store/action-types/file.types.ts","store/reducers/file.reducer.ts","store/reducers/index.ts","store/buildEnv.ts","store/index.ts","context/store/actions/myProducts.types.ts","context/store/reducers/myProducts.reducer.ts","context/MyProductsContextProvider.tsx","context/hooks/useMyProductsContext.ts","ui/Icons/Vehicle.tsx","context/store/actions/fleetManagerContext.types.ts","context/store/reducers/fleetManagerContext.reducer.ts","context/FleetManagerContextProvider.tsx","context/hooks/useFleetManagerContext.ts","assets/images/german-license-plate-seals.svg","components/MuiHelperText/MuiHelperText.tsx","lib/countriesNumberPlates.ts","lib/deRegions.ts","ui/NumberPlate/NumberPlateDeSupport.tsx","models/delegations/DelegatedParkingProductsModel.ts","containers/FleetManager/MyProducts/ParkingRightsDataTable/common.tsx","components/DelegeeForm/ParkingRightsGrid/GridBody/GridBody.tsx","components/DelegeeForm/ParkingRightsGrid/ResultsGrid/ResultsGrid.tsx","components/DelegeeForm/ParkingRightsGrid/ParkingRightsGrid.tsx","axios.ts","api/parkingProducts.api.ts","assets/images/paper-plane.svg","assets/images/delete.svg","components/DataTable/DataTableStyledComponents.ts","containers/FleetManager/FleetManagerDataTable/StyledComponents.tsx","components/DataTable/DataTableFilters/CommonStyledComponents.tsx","components/DataTable/DataTableFilters/DataTableFilterTypes/SelectFilter.tsx","components/DataTable/DataTableFilters/DataTableFilterTypes/InputFilter.tsx","components/DataTable/DataTableFilters/DataTableFilterTypes/DatePicker/DatePicker.constants.ts","components/DataTable/DataTableFilters/DataTableFilterTypes/DatePicker/DatePicker.styles.ts","components/DataTable/DataTableFilters/DataTableFilterTypes/DatePicker/DatePicker.styledComponents.ts","components/DataTable/DataTableFilters/DataTableFilterTypes/DatePicker/DatePicker.tsx","components/DataTable/DataTableFilters/DataTableFilterTypes/DateFilter.tsx","components/DataTable/DataTableFilters/DataTableFilters.tsx","constants/filtering.constants.ts","utils/queryParam.utils.ts","services/parkingProducts.service.ts","store/actions/toast.actions.ts","ui/CustomToast/toastTriggers.ts","store/actions/loader.actions.ts","utils/string.utils.ts","constants/error.constants.ts","utils/errors.utils.ts","store/actions/parkingProducts.actions.ts","validators/email.validator.ts","hooks/useIsValidDelegeeEmail.ts","components/DelegeeForm/hooks/useValidationSchema.ts","ui/CustomError/CustomError.tsx","ui/CenteredWarning/CenteredWarning.tsx","context/store/actions/importDelegations.types.ts","context/store/reducers/importDelegations.reducer.ts","context/ImportDelegationsContext.tsx","context/hooks/useImportDelegationsContext.ts","components/DelegeeForm/DelegeeForm.tsx","ui/ActionDrawer/ActionDrawer.tsx","ui/EllipsedSpan/EllipsedSpan.tsx","components/LocationCard/ProductsTooltip/ProductsTooltip.tsx","ui/NonBreakableSpace/NonBreakableSpace.tsx","components/LocationCard/LocationCardStyledComponents.ts","components/LocationCard/locationCard.business.ts","components/LocationCard/LocationCard.tsx","containers/FleetManager/MyProducts/LocationsCarousel/LocationsCarousel.tsx","ui/CustomHeading/CustomHeading.tsx","containers/FleetManager/MyProducts/LocationCards/LocationCards.tsx","components/Warnings/Warning.tsx","components/Warnings/DeleteDelegeeWarning.tsx","components/Warnings/BatchRevokeParkingRightsWarning.tsx","helpers/vehicleAssignment.utils.ts","components/Warnings/BatchRevokeVehicleAssignmentWarning.tsx","components/Warnings/DeleteVehiclesAssignmentWarning.tsx","utils/hooks/useSmartState.ts","ui/ImgBg/ImgBg..tsx","assets/images/refresh-icon.svg","components/DownloadFile/DelegeeFileType.enum.tsx","components/DownloadFile/DownloadDelegeeFile.tsx","components/DownloadFile/useDownloadFile.tsx","components/DragAndDropV2/DragAndDrop.tsx","components/MultipleDelegeesForm/DelegeesImportDragAndDrop/DelegeesImportDragAndDrop.tsx","components/Warnings/CloseImportWarning.tsx","components/MultipleDelegeesForm/BulkDelegationView/BulkDelegationView.tsx","components/MultipleDelegeesForm/MultipleDelegeesForm.tsx","context/store/actions/importVehicles.types.ts","context/store/reducers/importVehicles.reducer.ts","context/ImportVehiclesContext.tsx","hooks/useOnBulkImportFinishedCallback.ts","hooks/usePrevious.ts","containers/FleetManager/MyProducts/ParkingRightsDataTable/TableSwitcher.tsx","components/DelegeeStatus/DelegeeStatus.tsx","components/DataTable/DataTableHead/DataTableHead.tsx","components/DataTable/LoadingDataBody/LoadingDataBody.tsx","components/DataTable/NoDataTableBody/NoDataTableBody.tsx","components/DataTable/DataTableBody/DataTableBody.tsx","components/DataTable/DataTablePagination/DataTablePagination.tsx","components/DataTable/DataTablePageSize/DataTablePageSize.tsx","ui/Icons/FilterIcon.tsx","ui/Icons/DeleteIcon.tsx","ui/Icons/ForbiddenIcon.tsx","components/DataTable/DataTableHeading/DataTableHeading.tsx","components/DataTable/DataTable.tsx","containers/FleetManager/FleetManagerDataTable/FleetManagerDataTable.tsx","containers/FleetManager/MyProducts/ObjectBuilders/FilteredColumnObjectBuilder.ts","containers/FleetManager/MyProducts/ParkingRightsDataTable/FleetMembersTable.tsx","containers/FleetManager/MyProducts/ParkingRightsDataTable/VehiclesTable.tsx","components/VehicleForm/hooks/useValidationSchema.ts","validators/numberplate.validator.ts","components/VehicleForm/VehicleForm.tsx","components/Warnings/RevokeVehicleAssignmentWarning.tsx","components/Warnings/RevokeParkingRightsWarning.tsx","components/WhitelistVehiclesForm/hooks/useValidationSchema.ts","context/hooks/useImportVehiclesContext.ts","components/WhitelistVehiclesForm/WhitelistVehiclesForm.tsx","components/WhitelistVehiclesForm/WhitelistDragAndDrop/WhitelistDragAndDrop.tsx","components/WhitelistVehiclesForm/VehiclesImportDragAndDrop/ValidateVehicleBulkFile.tsx","components/WhitelistVehiclesForm/VehiclesImportDragAndDrop/VehiclesImportDragAndDrop.tsx","components/WhitelistVehiclesForm/WhitelistVehiclesUploadView/WhitelistVehiclesUploadView.tsx","containers/FleetManager/MyProducts/MyProducts.tsx","pages/FleetManager/MyProductsPage.tsx","context/store/actions/myFleet.types.ts","context/store/reducers/myFleet.reducer.ts","context/MyFleetContextProvider.tsx","context/hooks/useMyFleetContext.ts","containers/FleetManager/Helpers/ParkingRightsHelpers.tsx","containers/FleetManager/MyFleet/MyFleetHelpers.tsx","helpers/selectOptionHelper.ts","containers/FleetManager/MyFleet/DelegeesDataTable/DelegeesDataTable.tsx","components/Warnings/BatchDeleteDelegationWarning.tsx","containers/FleetManager/MyFleet/VehiclesTableMyFleet/VehiclesTableMyFleet.tsx","containers/FleetManager/MyFleet/MyFleet.tsx","pages/FleetManager/MyFleetPage.tsx","assets/images/arrow-right.svg","components/FaqButton/FaqButton.tsx","containers/FAQ/Faq.tsx","pages/FAQ/data/index.ts","pages/FAQ/FaqPage.tsx","context/store/actions/visitorBooking.types.ts","context/store/reducers/visitorBooking.reducer.ts","context/VisitorBookingContextProvider.tsx","context/hooks/useVisitorBookingContext.ts","api/visitor-booking/visitorBooking.api.ts","services/visitor-booking/visitorBooking.service.ts","api/prebookingProducts.api.ts","services/prebookingProducts.service.ts","store/actions/visitor-booking/visitorBooking.actions.ts","components/Warnings/CancelVisitorBookingWarning.tsx","components/VisitorStatus/VisitorStatus.tsx","constants/visitorBooking.constants.ts","containers/Visitors/BookingOverview/VisitorBookingDataTable/VisitorBookingDataTable.tsx","containers/Visitors/BookingOverview/BookingOverview.tsx","pages/Visitors/BookingOverviewPage.tsx","components/ActionFooter/ActionFooter.tsx","containers/Visitors/BookingOverview/NewBooking/hooks/useNewBookingFormik.ts","ui/Icons/CloseVisitorIcon.tsx","ui/ContentCard/ContentCard.tsx","containers/Visitors/BookingOverview/NewBooking/features/parking-location/components/forms/ParkingLocationForm.types.ts","containers/Visitors/BookingOverview/NewBooking/features/parking-location/components/forms/ParkingLocationForm.tsx","containers/Visitors/BookingOverview/NewBooking/features/parking-location/components/ui/ParkingLocation/ParkingLocation.tsx","hooks/useIsMounted.ts","components/QParkDatePickerV2/QParkDatePickerV2.locale.ts","components/QParkDatePickerV2/QParkDatePickerV2.controller.ts","components/QParkDatePickerV2/QParkDatePickerV2.styledcomponents.ts","components/QParkDatePickerV2/QParkDatePickerV2.tsx","components/QParkSelectCards/components/ui/QParkSelectCardItem.tsx","components/QParkSelectCards/QParkSelectCards.tsx","components/QParkTimePicker/QParkTimePicker.styledcomponents.ts","components/QParkTimePicker/utils/hoursGenerator.ts","components/QParkTimePicker/QParkTimePicker.tsx","containers/Visitors/BookingOverview/NewBooking/features/product-timeframe/components/forms/ProductTimeframeForm.types.ts","containers/Visitors/BookingOverview/NewBooking/features/product-timeframe/components/forms/ProductTimeframeForm.tsx","containers/Visitors/BookingOverview/NewBooking/features/product-timeframe/components/forms/hooks/useProductTimeframeForm.ts","containers/Visitors/BookingOverview/NewBooking/features/product-timeframe/components/ui/NoFacilitySelected.tsx","components/QParkSelectCards/QParkSelectCardsBulk.tsx","containers/Visitors/BookingOverview/NewBooking/features/product-timeframe/components/forms/ProductTimeframeBulkForm.tsx","containers/Visitors/BookingOverview/NewBooking/features/product-timeframe/components/forms/hooks/useProductTimeframeFormBulk.ts","containers/Visitors/BookingOverview/NewBooking/features/product-timeframe/components/ui/ProductTimeframeBulk.tsx","containers/Visitors/BookingOverview/NewBooking/NewBooking.types.ts","containers/Visitors/BookingOverview/NewBooking/features/visitor-details/components/forms/VisitorDetailsForm.types.ts","containers/Visitors/BookingOverview/NewBooking/features/visitor-details/components/forms/VisitorDetailsForm.tsx","containers/Visitors/BookingOverview/NewBooking/features/visitor-details/components/ui/VisitorDetails/VisitorDetailsBulk.tsx","containers/Visitors/BookingOverview/NewBooking/features/visitor-details/components/ui/VisitorDetails/VisitorDetailsWrapper.tsx","containers/Visitors/BookingOverview/NewBooking/features/visitor-details/components/ui/VisitorDetails/VisitorBookingErrorMessage.tsx","containers/Visitors/BookingOverview/NewBooking/features/visitor-details/components/ui/VisitorDetails/VisitorDetailsList.tsx","containers/Visitors/BookingOverview/NewBooking/mappers/visitorBookings.mapper.ts","containers/Visitors/BookingOverview/NewBooking/features/visitor-details/components/ui/VisitorDetailsHeader/VisitorDetailsHeader.tsx","store/actions/file.actions.ts","containers/Visitors/BookingOverview/NewBooking/features/visitor-details/components/ui/VisitorBulkUpload/VisitorBulkUploadParser.ts","containers/Visitors/BookingOverview/NewBooking/features/visitor-details/components/ui/VisitorBulkUpload/VisitorBulkUpload.tsx","containers/Visitors/BookingOverview/NewBooking/features/visitor-details/components/ui/StickySidebar/SidebarInformation.tsx","containers/Visitors/BookingOverview/NewBooking/features/visitor-details/components/ui/StickySidebar/StickySidebar.tsx","helpers/capacityHelper.ts","containers/Visitors/BookingOverview/NewBooking/features/visitor-details/components/ui/VisitorDetails/VisitorBookingModalDialog.tsx","containers/Visitors/BookingOverview/NewBooking/NewBookingBulk.tsx","pages/Visitors/NewBookingPage.tsx","ui/Icons/BookingOverviewIcon.tsx","router/routes.ts","ui/NavigationBar/NavigationBar.tsx","ui/SideBar/FleetManagerSidebar/FleetManagerSidebar.tsx","ui/SideBar/SideBar.tsx","ui/Layout/Flex-Layout/Flex-Layout.tsx","ui/Layout/Layout.tsx","ui/CustomToast/CustomToast.tsx","router/FmpAppRoutes.tsx","components/Error/GeneralException.tsx","ErrorBoundary.tsx","api/environment.api.ts","services/environment.service.ts","store/actions/environment.actions.ts","api/oidc.api.ts","services/oidc.service.ts","store/actions/oidc.actions.ts","api/ai.api.ts","services/ai.service.ts","store/actions/ai.actions.ts","CustomOidcProvider.tsx","TelemetryProvider.tsx","components/PortalDeactivated/PortalDeactivated.tsx","assets/images/logo_white.svg","components/MobileWarningScreen/MobileWarningScreen.tsx","App.tsx","theme/theme.ts","theme/AppThemeProvider.tsx","context/ContextProvider.tsx","i18n.ts","index.tsx"],"names":["module","exports","variables","colors","lime","hex","rgb","black","white","gray","darkGray","darkGraySecondary","red","yellow","darkRed","veryLightGray","lightGray","veryLightGraySecondary","silver","darkerLime","mostlyWhite","mostlyBlack","lightGrayishBlue","grayishBlue","brightOrange","darkModerateCyan","typography","fontSizeBase","fontSizeLarge","fontSizeLarger","fontSizeExtraLarge","fontSizeSmaller","fontSizeSmall","fontSizeExtraSmall","whiteSpaces","xs","sm","md","lg","xl","breakpoints","screenXs","screenSm","screenMd","screenLg","screenXl","shared","boxShadow","RedCircularProgress","styled","CircularProgress","_templateObject","_taggedTemplateLiteral","LightGrayCircularProgress","_templateObject2","CustomSpinner","_ref","size","React","createElement","LightGray","_ref2","DotPulse","className","CustomBackdrop","Backdrop","connect","state","loader","open","showLoader","appContextTypes","initialState","selectedLanguage","user","seasonTicketOwnerCrmId","email","arguments","length","undefined","action","type","_objectSpread","payload","AppContext","createContext","AppContextProvider","children","appState","dispatch","useReducer","appContextReducer","i18n","useTranslation","useEffect","setAppLanguage","languages","store","setAppUser","disposeUser","Provider","value","useAppContext","ctxValue","useContext","Error","en","nl","fr","de","LanguageContainer","div","LanguageSelector","FormControl","classes","root","Select","id","selectMenu","icon","onChange","event","target","changeLanguage","IconComponent","ExpandMoreOutlined","inputProps","MenuProps","disableScrollLock","MenuItem","MenuNavItem","disableTouchRipple","NavLink","props","Object","assign","Box","component","Link","ExternalLink","href","to","EnvironmentInfo","environment","version","Fragment","toLowerCase","useOutsideClick","instance","_handleClickOutside","current","contains","document","addEventListener","removeEventListener","userManager","getUserManager","oidcConfig","currentHostName","concat","window","location","protocol","hostname","port","userManagerConfig","authority","serverUrl","client_id","clientId","client_secret","clientSecret","redirect_uri","response_type","scope","monitorSession","loadUserInfo","post_logout_redirect_uri","createUserManager","storageService","setTokenToStorage","localStorage","setItem","getTokenFromStorage","_getToken","token","getItem","isNull","removeTokenFromStorage","_removeToken","removeItem","userCardBusiness","signOut","callback","isUndefined","ArrowUp","rounded","left","_ref3","right","_ref4","_ref5","ContainerArrowUp","ColouredText","span","color","AbsoluteCustomSpinner","CustomButton","StyledIconButton","IconButton","_templateObject3","Primary","text","disabled","loading","startIcon","endIcon","onClick","Button","variant","disableRipple","Light","textColor","Danger","Icon","SpacerSpan","Spacer","ExpandMore","ExpandMoreRounded","ExpandLess","ExpandLessRounded","StyledFullName","strong","_templateObject4","NoPaddingGrid","Grid","_templateObject5","PointerContainerGrid","_templateObject6","_templateObject7","AbstractCollapse","_templateObject8","Collapse","_templateObject9","DetailsContainer","_templateObject10","SignOutIcon","ExitToAppRounded","_templateObject11","UserCardWrapper","_templateObject12","UserCardDetails","show","onSignOut","t","in","container","item","direction","alignItems","showDetails","useUserCardState","setState","useState","updateState","newState","hideDetails","toggleDetails","resetState","signoutRedirect","useRef","ref","justifyContent","MyProductsIcon","SvgIcon","transform","d","AppRoute","constructor","path","name","route","addSubroute","hidden","_this$route$subRoutes","this","subRoutes","push","exact","getRoute","updateFilters","found","findWhere","filters","key","index","indexOf","actions","pageNumber","pageSize","showFilters","reducer","_action$payload","_action$payload2","_action$payload3","_action$payload4","DataTableContext","DataTableContextProvider","filtersRef","dispatchAction","setFilter","storeAndDispatch","setPageNumber","setPageSize","toggleFilters","resetPageNumber","resetPageSize","resetContext","resetFilters","forEach","filter","resetFiltersAsync","Promise","resolve","resetFilter","defaultValue","stored","useDataTableContext","StyledContainer","Container","StyledSection","section","border","isEmpty","backgroundColor","Section","withArrow","RequiredSpan","fontSize","StyledInputLabel","InputLabel","RequiredInputLabel","Fonts","FuturaT","fontFamily","fontStyle","fontWeight","src","FutT","FuturaD","FutD","StyledStrong","width","Counter","Heading","required","showCounter","count","defaultProps","StyledErrorOutline","ErrorOutline","CustomInput","TextField","Required","InputProps","endAdornment","error","InputAdornment","position","RequiredWithTooltip","Tooltip","arrow","title","tooltip","placement","ToggleSelectAll","showSelectAll","deselectAllTooltipText","selectAllTooltipText","RemoveCircleOutline","CheckCircleOutline","onDeselectAll","onSelectAll","role","deselectAllText","selectAllText","Wrapper","height","ImageContainer","CircleImage","Data","Row","Col","StyledCheck","Check","StyledCheckbox","Checkbox","Checked","FlexSpan","EllipsedSpan","CustomCheckbox","label","checkboxProps","checkedIcon","StyledChip","StyledSpan","QParkChip","request","success","failure","environmentTypes","portalDeactivated","featureFlags","dynamicConfigurations","allowImpersonation","featureFlagsAndDynamicConfiguration","parkingProductsTypes","parkingProductsReducerHelper","getLocatedParkingProductsState","locatedParkingProducts","data","updated","_getRefreshedLocatedParkingProducts","currentState","entity","placeId","isEqual","locatedParkingProductsPayload","hasUnlimitedEntryRights","some","l","parkingProducts","p","getLocatedParkingProductsData","incrementTotalAssignedCount","locations","pmcIdToAmount","map","newParkingProducts","parkingProduct","amount","pmcId","totalAssignedParkingRights","sumBy","x","vehicleAssignmentMatchesQuery","vehicleAssignment","query","isNil","description","vehicle","includes","numberPlateValue","identifier","toUpperCase","pmcIds","products","assignedDateStart","Date","getTime","assignedAt","assignedDateEnd","reduceMyFleetVehiclesStateUpdate","aggregateId","update","createFakeProduct","getProductInfo","locationName","pmcName","parkingRightId","rowsAdded","newPages","mapValues","pages","page","rowIndex","findIndex","r","vehicleAssignmentId","newFreshRow","countryCode","numberPlate","row","productsToAdd","updatePmc","rowProduct","updatedRow","with","_","totalRecords","reduceMyProductsVehiclesState","vehicles","model","pmcToParkingRightStartDates","fakeRows","startedAt","parkingRightStartedDate","startDate","parkingRight","pmc","assigned","createFakeAssignedParkingRight","newPagesWithAddedCount","updatedRows","rowsToAdd","updateRow","assignedParkingRight","getPlaceId","StartedDateStart","StartedDateEnd","rowsToRemove","flatMap","find","ur","rowsAddedCount","newTotalRecords","values","product","reduceVehicleAssignmentMutation","mutation","revokedPmcIds","selectedVehicleAssignment","assignedProducts","assignedPmc","assignedPmcIds","assignedProduct","newLocatedParkingProducts","fromEntries","revokedPmc","assignedPmcId","newMyProductsVehicles","vehiclesMyProducts","newMyFleetVehicles","vehicleAssignmentsMyFleet","reduceUpdate","reduceAssign","reduceRevokeMyFleet","revokeModel","newData","productsToRemove","vp","vehicleAssignmentProducts","vap","delegatedParkingProducts","totalPages","delegees","delegeeDetails","importDelegees","validateDelegees","bulkImportProgress","progress","hasErrors","numberOfErrors","isBulkImportCompleted","calculatedWhitelistDelta","amountOfVehiclesToCreate","amountOfVehiclesToDelete","amountOfVehiclesToUpdate","amountOfVehiclesWithNoChanges","fileReference","hasChanges","bulkVehicleAssignment","reduceVehicleAssignmentUpdates","assignedVehicleMutation","reduceVehicles","_action$assignedVehic","_action$assignedVehic2","_action$assignedVehic3","_action$assignedVehic4","_action$assignedVehic5","_action$assignedVehic6","_action$assignedVehic7","assignedVehiclesProductsPayload","reduceVehicleAssignmentsMyFleet","vehicleAssignments","_action$vehicleAssigm","_action$vehicleAssigm2","_action$vehicleAssigm3","_action$vehicleAssigm4","_action$vehicleAssigm5","_action$vehicleAssigm6","_action$vehicleAssigm7","vehicleAssigmentsMyFleetPayload","reduceGlobalLoadingState","revokeProductsModel","_action$delegatedPark","_action$delegeesPaylo","_action$delegatedPark2","_action$delegatedPark3","_action$delegatedPark4","_action$delegatedPark5","_action$delegeesPaylo2","_action$delegeesPaylo3","_action$delegeesPaylo4","_action$delegeesPaylo5","_action$bulkImportPro","_action$bulkImportPro2","_action$bulkImportPro3","_action$bulkImportPro4","_action$bulkImportPro5","_action$bulkImportPro6","_action$isBulkImportC","_action$delegatedPark6","_action$delegeesPaylo6","newStateMaybe","newVehicleState","newVehicleAssignmentsState","newLoadingState","delegatedParkingProductsPayload","delegeesPayload","parkingProductsPayload","delegeeDetailsPayload","validateDelegeesPayload","toastTypes","severity","formatArgs","options","content","_action$translationMo","_action$translationMo2","_action$translationMo3","_action$translationMo4","_action$translationMo5","_action$translationMo6","_action$translationMo7","_action$translationMo8","_action$translationMo9","_action$translationMo10","_action$translationMo11","_action$translationMo12","translationModelPayload","loaderTypes","oidcTypes","aiTypes","connectionString","ProductType","VisitorBookingStatus","visitorBookingTypes","productConfigurations","parkingLocations","createVisitorBooking","createVisitorBookings","visitorBookings","productSalesAvailability","facilityImages","visitorBookingReducer","_state$visitorBooking","_action$loading","productConfigurationsPayload","parkingLocationsPayload","visitorBookingsPayload","productSalesAvailabilityPayload","facilityImagesPayload","cancelledBooking","referenceNumber","cancelledVisitorBookingReference","status","Cancelled","fileTypes","fileUploaded","rootReducer","history","combineReducers","router","connectRouter","toast","oidc","oidcReducer","ai","visitorBooking","file","createBrowserHistory","middlewares","getMiddlewares","routerMiddleware","thunkMiddleware","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","createStore","applyMiddleware","useAppDispatch","useDispatch","useAppSelector","useSelector","myProductsContextTypes","selectedLocation","dataTable","orderDesc","sortBy","payloadDesc","descending","newOrderDesc","by","MyProductsContext","MyProductsContextProvider","myProductsState","myProductsContextReducer","setSelectedLocation","setSorting","useMyProductsContext","myProductsContext","VehicleIcon","rx","fleetManagerContextTypes","DelegationType","AssignmentType","delegationType","Single","assignmentType","dragAndDropView","vehicleDragAndDropView","showDelegeeDetails","showAssignVehicle","showWhitelistVehicles","showDeleteDelegeeWarning","showBatchDeleteDelegationsWarning","showBatchRevokeParkingRightsWarning","showRevokeParkingRightsWarning","showDeleteVehiclesAssignment","showBatchRevokeParkingVehicleAssignment","showRevokeParkingVehicleAssignment","showCloseImportWarning","isEditDelegeeMode","isEditVehicleAssignmentMode","numberPlateWarning","numberPlateError","selectedRegistrationId","selectedRowKeys","selectedDelegeeRowKey","FleetManagerContext","FleetManagerContextProvider","fleetManagerState","fleetManagerContextReducer","setSelectedRegistrationId","registrationId","setSelectedDelegeeRowKey","rowKey","setSelectedParkingRightIds","parkingRightIds","setDelegationType","setAssignmentType","setNumberPlateWarning","warning","setNumberPlateError","setDragAndDropView","setVehicleDragAndDropView","toggleAddDelegee","toggleAssignVehicle","toggleWhitelistVehicles","toggleEditVehicleAssignment","toggleEditDelegee","toggleDeleteDelegeeWarning","toggleBatchRevokeParkingRightsWarning","toggleBatchRevokeVehicleAssignmentsWarning","toggleRevokeParkingRightsWarning","toggleRevokeVehicleAssignmentsWarning","toggleDeleteVehicleAssignmentsWarning","toggleBatchDeleteDelegationsWarning","toggleCloseImportWarning","memoStore","useMemo","useFleetManagerContext","_path","_path2","_path3","_path4","_path5","_path6","_path7","_path8","_path9","_path10","_path11","_path12","_excluded","_extends","bind","n","e","hasOwnProperty","call","apply","SvgGermanLicensePlateSeals","svgRef","o","i","_objectWithoutPropertiesLoose","getOwnPropertySymbols","s","propertyIsEnumerable","_objectWithoutProperties","viewBox","fill","fillRule","clipRule","ForwardRef","forwardRef","MuiHelperText","Boolean","CountriesNumberPlates","numberPlates","getNumberPlates","mapNumberPlate","getNumberPlatesDVA","numberPlateCode","phoneNumberPrefix","getCountriesNumberPlates","getTopCountriesNumberPlatesDVA","findNumberPlatePrefix","isValidNumberPlateCode","plate","isValidCountryCode","numberPlatePrefixToIsoCountryCode","isoCountryCodeToNumberPlatePrefix","convertNumberPlatePrefixToIsoCountryCode","isoCountryCode","convertIsoCountryCodeToNumberPlatePrefix","isoCode","numberPlatePrefix","region","code","deRegions","lookUp","reduce","acc","findRegionByCode","ret","defaultSupportedNumberPlate","DeRegionSelect","muiAutoCompleteRef","setOpen","popRef","Autocomplete","onOpen","onClose","renderOption","renderInput","params","placeholder","onBlur","KeyboardArrowDownRounded","v","getOptionLabel","filterOptions","startsWith","inputValue","popper","option","NumberPlateDeSupport","memo","regionPlaceholder","onValueChange","onPrefixSelect","validateNumberPlate","prefix","supportedNumberPlates","numberToSkipOnKeyPress","setFieldValue","readOnly","compact","regionCode","setRegionCode","deValue","setDeValue","dropdownRef","closeDropdown","handleKeyPress","firstMatchIndex","c","targetElement","querySelectorAll","scrollIntoView","behavior","block","onHandleDeNumberplateChanged","val","isRegion","parseValue","splitIndex","substring","deVal","selectedCountryCode","isGermanNumberPlate","splitRegionAndNumber","numberPlateComponents","split","valueCopy","replace","sanitize","replaceAll","trim","openDropdown","Flag","style","maxLength","regionValue","onRegionBlur","Seals","autoComplete","onDeValueChange","onDeValueBlur","persist","preventDefault","WarningOutlined","display","np","CheckRounded","FlexBudgetUnitType","ProductChip","NumberPlate","selectUseSingleDirectVehicleAssignment","_state$environment$fe","f","selectUseFlexBudgetColumn","_state$environment$fe2","selectUseBulkVehicleAssignments","_state$environment$fe3","useGetOccupiedParkingRightsCount","useSingleDirectVehicleAssignment","useCallback","pr","_pr$totalDelegatedPar2","_pr$totalAssignedPark","_pr$totalDelegatedPar","totalDelegatedParkingRights","useSharedProductsMenuAction","useBulkVehicleAssignments","onInviteFleetMemberClicked","onAssignVehicleClicked","onWhitelistVehiclesClicked","menu","useMenu","showMenu","menuItems","getMenuItems","unshift","PersonIcon","onAddDelegee","onAssignVehicle","useProductOptions","currentLocation","useCurrentlySelectedParkingProduct","_product$pmcId","_state$parkingProduct","_state$parkingProduct2","loc","convertToRemainingFlex","flexBudRemainingTime","flexBudUnitType","match","dayPart","hoursPart","minutesPart","days","Number","hours","minutes","totalMinutes","totalHours","Math","floor","Hours","Minutes","Quarters","roundedMinutes","SkeletonGrid","Skeleton","animation","GridBody","getTotalOccupiedParkingRights","_pr$right","_pr$right2","_pr$right3","_pr$right4","_pr$right5","_pr$right6","_pr$right7","_pr$right8","_pr$right9","disableEditing","checked","onChecked","totalParkingRights","DirectionsCarOutlined","skeleton","NoResultsWrapper","ResultsGrid","ticket","ParkingRightsGrid","_props$error","_props$error2","_right$pmcId","selectedPmcIds","_selectedPmcIds$some","isChecked","initiallySelectedPmcIds","isAssignedOrDelegated","parkingProductModel","isParkingRightDisabled","onStateChange","every","FormHelperText","hasError","message","stateCopyShallow","parsedId","parseInt","foundIndex","currentTarget","axios","create","interceptors","use","config","storedToken","headers","Authorization","baseUrl","getQueryString","others","URLSearchParams","entries","Array","isArray","append","toString","mod","getParkingProductsUrl","getDelegateParkingRightsUrl","getUpdateDelegationUrl","getDelegatedParkingRightsUrl","language","getLocatedParkingProductsUrl","getDelegeeDetailsUrl","getDeleteDelegeeUrl","getResendDelegeeInviteUrl","getDelegeesUrl","getRevokeParkingRightsUrl","getDeleteDelegeesUrl","getValidateDelegeesUrl","getDelegeesValidationResultUrl","getDelegeesInvitationResultUrl","getStartBulkInvitationsUrl","getBulkImportProgressUrl","getBulkImportStatusUrl","getAssignVehicleUrl","getVehicleAssignmentsUrl","req","qs","getUpdateVehicleAssignmentUrl","getVehicleAssignmentUrl","getVehicleAssignmentsMyFleetUrl","_excluded2","getRevokeVehicleAssignmentsUrl","getDeleteVehicleAssignmentsUrl","getCalculateWhitelistDeltaUrl","getStartBulkVehicleAssignmentUrl","SvgPaperPlane","SvgDelete","ActionsIcon","MoreHorizRounded","ActionsIconButton","ActionsIconHoverButton","StyledTableContainer","TableContainer","CancelIcon","Close","NoPaddingBottomGrid","EditOutlined","PaperPlane","DeleteIcon","HorizontalPaddingGrid","PaddingRightGrid","PaddingLeftGrid","_templateObject13","HeaderPaddedGrid","_templateObject14","_templateObject15","_templateObject16","_templateObject17","StyledDataTableWrapper","_templateObject18","EditIcon","ResendInvitationIcon","DeleteDelegeeMenuItem","DeleteDelegeeIcon","ClearInputIcon","SeachIcon","SearchOutlined","PaddingFormControl","FilterNumberBubble","AbsoluteClearInputIcon","LightGraySpan","GrayDownArrow","GrayUpArrow","KeyboardArrowUpRounded","GrayFilterArrow","CenterdSpan","PaddingCustomInput","DeleteWrapper","DeleteText","EllipsedGridItem","NoDecorationAbbr","abbr","SelectFilter","_filter$options","opened","setOpened","multiple","FilterType","Multiselect","displayEmpty","renderValue","selected","selectedValues","$filter","anchorOrigin","vertical","horizontal","transformOrigin","getContentAnchorEl","InputFilter","fullWidth","startAdornment","hoveredStyles","background","selectedStyles","hover","selectedSpanStyles","customDayStyles","defaultStyles","outsideStyles","selectedStartStyles","selectedEndStyles","hoveredSpanStyles","StyledPopper","Popper","DatePickerContainer","DatePickerWrapper","attrs","DatePickerFieldSet","DatePickerInput","ClearIcon","CancelRounded","DateRangeIcon","DateRangeOutlined","Placeholder","DateRange","endDate","DatePicker","onDateSelected","onDateReset","resetRef","dateRange","setDateRange","focus","setFocus","anchorEl","setAnchorEl","onDateSelectedAction","startDateJsDate","endDateJsDate","getStartAndEndDateJsDate","toDate","clearDateSelection","stopPropagation","startDateString","moment","format","endDateString","DateRangeValue","InputIcon","tabIndex","DayPickerRangeController","onFocusChange","focusedInput","onDatesChange","keepOpenOnDateSelect","enableOutsideDays","hideKeyboardShortcutsPanel","numberOfMonths","minimumNights","initialVisibleMonth","onOutsideClick","onOutsideClicked","renderCalendarDay","CustomizableCalendarDay","navNext","NavigateNextRounded","navPrev","NavigateBeforeRounded","DateFilter","resetInternalRef","setStartEndDate","customKeys","customDateKeys","StyledRefreshIcon","RefreshIcon","DataTableFilters","columns","onFilterClicked","onResetFiltersClicked","filteredColumns","where","enableFiltering","filtered","setFiltered","resetWhenInputsAreEmpty","inputsEmpty","initFilter","column","Text","determineArrowVisibility","filtersBar","getElementById","leftArrow","rightArrow","arrowsVisible","scrollWidth","clientWidth","leftArrowVisible","scrollLeft","rightArrowVisible","setProperty","handleArrowClick","isLeftArrow","maxScrollLeft","filterBtnDisabled","hasAnyValue","result","col","Filters","onFiltering","onResetFilters","then","FmpFilters","VisitorBookingFilters","isEmptyOrUndefined","queryParam","getStringDate","date","buildQueryParam","pagination","param","enrichParamWithFilters","QueryParam","startKey","endKey","convertDateFilter","start","end","convertedStart","startOf","convertedEnd","add","subtract","toISOString","convertFiltersToGetVehicleAssignmentsQuery","_filters$find","_filters$find2","_filters$find3","_r$filters","_r$filters$find","_filters$find4","_filters$find5","_filters$find6","_filters$find7","assignedDateFilter","startedDateFilter","convertedAssginedDateFilter","convertedStartedDateFilter","ascending","service","getParkingProducts","get","parkingProductsApi","getLocatedParkingProducts","delegateParkingRights","post","updateDelegation","put","getDelegatedParkingProducts","delegatedParkingRightsRequest","getDelegeeDetails","getVehicles","async","url","response","dto","ceil","filteredCount","assignedParkingRights","items","flexBudgetRemainingTime","flexBudgetUnitType","deleteDelegee","delete","resendDelegeeInvite","getDelegees","revokeParkingRights","deleteDelegations","getDelegeesValidationResult","responseType","getDelegeesInvitationResult","startBulkInvitations","getBulkImportProgress","getBulkImportStatus","assignVehicle","updateVehicleAssignment","getVehicleAssignment","getVehicleAssignmentsMyFleet","revokeVehicleAssignments","deleteVehicleAssignments","calculateWhitelistDelta","startBulkVehicleAssignment","startBulkVehicleAssignmentRequest","showToast","translationModel","toastActions","dispose","toastTriggers","loaderActions","loadTheLoader","killTheLoader","_len","args","_key","m","str","equalsIgnoreCase","a","b","localeCompare","sensitivity","stringUtils","errorConstants","keys","delegeeEmail","delegee","accessDeviceRight","delegationId","parkingRights","seasonTicket","userId","serverError","codes","alreadyExists","notFound","notAllowed","notAvailable","notComplete","notPending","notValid","technicalSupport","isRequired","generalError","licensePlateAlreadyLinked","alreadyLinkedToAnotherUser","checkValidationError","errors","property","checkRequestError","context","checkEmailExists","checkHasNoCapacity","checkForSeasonTicketCrmIdNotAvailableError","checkForParkingRightsAlreadyLinkedToALicensePlate","getFirstErrorCode","_error$response21","_error$response22","errorCode","fields","defaultExport","parkingProductsService","catch","_error$response","getUnlimitedParkingProducts","_error$response2","getState","_error$response3","finally","_error$response4","_error$response5","checkForCrmIdOrLinkedAccessDevice","_error$response6","delegatedParkingRights","_error$response8","vehicleToExclude","excludeByVehicleAssignmentId","rowsToExclude","_error$response9","disposeError","_error$response10","clearDelegeeDetails","_error$response7","_error$response13","_error$response14","_error$response15","registrationIds","_error$response16","onSuccess","onError","pollBulkImportProgress","_error$response11","processCompleted","_error$response12","resetBulkImportProgress","pmcToParkingRight","_error$response17","_error$response18","_error$response19","revokeVehicleAssignmentProducts","_error$response23","vehicleAssignmentIds","_error$response24","excludedIds","originalPageSize","toRemove","slice","_error$response20","_error$response25","emailValidator","emailPattern","isValidEmail","test","useIsValidDelegeeEmail","currentUserEmail","emailAddress","allEmails","isValid","errorMessageKey","useValidationSchema","isEditMode","isDelegeeEmailValid","rights","Yup","default","min","Multiple","ctx","validValue","createError","validationSchema","optional","initialValues","MessageWrapper","StyledCol","Span","CustomError","ContentWrapper","TextWrapper","Details","NoPaddingCol","WarningColumn","orangeWarning","WarningFleetOrange","WarningFleet","details","renderExtraRows","_props$extraRows","extraRows","child","alignContent","importDelegationsTypes","checkParkingRights","processing","ImportDelegationsCtx","ImportDelegationsContextProvider","importDelegationsState","setDelegeesData","setCheckParkingRights","setProcessing","isProcessing","useImportDelegationsContext","parkingProductsActions","_parkingProducts$erro","_parkingProducts$dele8","refreshHandler","innerRef","fetchParkingProducts","initForm","setFormFields","hasNoCapacity","handleDeselectAll","_innerRef$current","_parkingProducts$dele","_parkingProducts$dele2","_innerRef$current2","_parkingProducts$dele3","_parkingProducts$dele4","_parkingProducts$dele5","_innerRef$current3","rightsIds","_innerRef$current6","submitCallback","handleEmailChange","_innerRef$current7","delegeeEmailExists","delegateSingle","delegateMultiple","goToUploadFile","_parkingProducts$dele7","Formik","onSubmit","_values$rights","_parkingProducts$dele6","validateOnChange","validateOnBlur","handleSubmit","handleChange","CloseOutlined","noValidate","ButtonGroup","disableElevation","htmlFor","helperText","Translation","ns","_values$rights2","handleRightChange","_innerRef$current4","rightId","without","ids","_innerRef$current5","handleSelectAll","ActionDrawer","Drawer","anchor","paper","BackdropProps","invisible","hideBackdrop","Ellipsed","HtmlTooltip","withStyles","theme","borderRadius","maxWidth","ProductsTooltip","displayLocation","displayAmount","pp","NonBreakableSpace","StyledCard","Card","Inline","StyledSkeleton","LocationCapacity","useStyles","makeStyles","margin","transition","cursor","media","gridRoot","paddingBottom","colRoot","cardContentRoot","padding","locationCardBusiness","_removeActiveClass","classList","remove","handleCardClicked","_excludeOtherElements","elements","el","getBoundingClientRect","_isInsideOfElement","_elementIsActive","_addActiveClass","_isOutsideOfElement","LocationCard","cityName","imageSrc","totalPmcs","data-card-type","pos","CardMedia","image","CardContent","locationMarker","CarouselContainer","selectedIndex","carousel","btnInitialState","next","previous","LocationsCarousel","onCardClicked","btnState","setBtnState","card","toggleButtons","isLast","isFirst","updateBtnState","onCardSelect","updateCarouselState","selectLocation","Fade","aria-label","onPrev","ArrowBackIosRounded","onNext","ArrowForwardIosRounded","CounterSpan","CustomHeading","getLocations","_locatedParkingProduc","onCardSelected","fetchLocations","ActionFooter","Warning","_props$width","FullHeightRow","useOrangeWarning","onCancel","confirmText","onConfirm","_delegeeDetails$data$","_delegeeDetails$data","getWarningText","getWarningDetails","onRefresh","parkingRightsCount","warningText","warningDetails","initWarning","_delegeeDetails$data2","setLoading","handleDeleteCancelation","handleDeleteConfirmation","selectedParkingRightIds","handleSuccessfulRevoke","handleRevokeCancellation","handleRevokeConfirmation","parseAssignedParkingRowKey","vehicleAssignmentDetails","parseDVARowKey","pmcStrings","stringifyDVARowKey","join","parseVehicleAssignmentId","revokeVehicleAssignmentsParkingRights","selectedVehicleAssignmentKeys","vaSelectedProducts","vehicleAssignmentKey","parsed","distinctSelectedVehicleVehicleAssignmentKeys","list","vehicleAssignmentCount","getSelectedVehicleAssignemntId","handleDeleteCancellation","handleSuccessfulDelete","useSmartState","ImgBgContainer","ImgBg","SvgRefreshIcon","DelegeeFileType","DownloadDelegeeFile","showError","setShowError","setError","delegeeFileType","download","downloadValidationRequest","downloadInvitationRequest","getFileName","getSeasonTicketOwnerCrmId","getFileReference","getLanguage","downloadRequest","Invitation","URL","createObjectURL","Blob","Uint8Array","link","body","appendChild","click","removeChild","revokeObjectURL","useDownloadFile","setTimeout","MuiAlert","_props$maxFileSizeInM2","fileInput","files","isValidDrop","_props$maxFileSizeInM","first","isSupportedFileType","maxFileSizeInMB","fileType","supportedFileTypes","hasValidateDelegeeErrors","invalidDelegeesCount","validateDelegeesErrorCode","generalValidationErrors","onDrop","dataTransfer","onFileDropped","onFileUploaded","onDragOver","onDragEnter","onDragLeave","accept","getImgWrapperSrc","XlsFileEmpty","XlsFileChecked","XlsFileAdd","XlsFileDropping","getErrorContent","_fileInput$current","_props$maxRecordsNumb","maxRecords","maxRecordsNumber","_props$generalValidat","_props$generalValidat2","_props$generalValidat3","parkingRightsExceededErrors","noDelegeesError","fleetManagerInfoMissingError","additionalInformation","numberOfMissingParkingRights","errorsCount","Validation","extraSuccessMsg","showMaxFileSize","maxFileSize","setFileReference","setGeneralValidationErrors","setInvalidDelegeesCount","setValidateDelegeesErrorCode","readDelegeesFromXls","reader","FileReader","readAsBinaryString","onload","handleUploadedData","_e$target","delegeesToImport","wb","XLSX","SheetNames","readDataFromExcel","onProcessing","checkParkingRight","onCheckedParkingRights","_d$lineNumber","lineNumber","userEmail","generalErrors","onFileProcessed","sheet_to_json","Sheets","KeyboardArrowDown","DragAndDrop","CloseImportWarning","onConfirmation","handleCloseCancellation","handleCloseConfirmation","bulkInvitationPollingIntervalInSeconds","getDynamicConfigurationAsNumber","_environment$dynamicC","_environment$dynamicC2","stringValue","bulkUploadIsFinished","Trans","i18nKey","components","br","XlsFileLoading","sx","mr","LinearProgress","minWidth","Typography","round","DndStep","_state$afterWarningCo","executed","step","FileUpload","afterWarningConfirmationAction","showOnlyErrors","showConfirmationScreen","toggleCloseDelegeeImportWarning","goToSelection","setAfterWarningConfirmationAction","shouldShowDataRemovalWarning","handleOnCloseDelegeeForm","handleCloseDelegeeForm","resetCheckParkingRights","rowsWithValues","Stepper","Step","active","completed","StepLabel","BulkInProgress","DelegeesImportDragAndDrop","BulkDelegationView","handlePreviousAction","previousActionLabel","submitDelegees","CloseDelegeeImportWarning","importVehiclesTypes","hasWhitelistChanges","ImportVehiclesCtx","ImportVehiclesContextProvider","ImportVehiclesState","importVehiclesState","setVehicleData","setSelectedProducts","selectedProducts","setWhitelistDeltaChanges","useOnBulkImportFinishedCallback","previousBulkImportProgress","usePrevious","callbackRef","TabOption","FleetMembers","Vehicles","TableSwitcher","bgcolor","gridGap","tab","flexGrow","getCount","Statuses","StyledStatus","Active","Pending","DelegeeStatus","Accepted","useIconStyle","DataTableHead","order","orderBy","numSelected","rowCount","hideActions","onSelectAllClick","onRequestSort","hideCheckboxes","orderedBy","TableHead","TableRow","TableCell","align","disablePadding","sortDirection","TableSortLabel","hideSortIcon","disableSorting","UnfoldMoreRounded","LoadingDataContainer","NoPaddingTableCell","LoadingDataBody","colSpan","TableBody","NoDataContainer","NoDataWrapper","NoDataTableBody","translationKey","emptyStateCar","DataTableBody","useFlexBudgetColumn","rows","actionBtn","handleRowClick","handleMenuClick","translationOverrideKey","hiddenKeys","getActionClickHandler","isItemSelected","aria-checked","isFlexBudgetDisabled","StyledPagination","Pagination","previouslabel","nextlabel","DataTablePagination","defaultPage","siblingCount","shape","onPageChange","StyledWrapper","StyledFormControl","DataTablePageSize","pageSizes","defaultPageSize","isNaN","Svg","FilterIcon","xmlns","data-name","SvgMenu","ForbiddenIconMenu","ForbiddenIcon","ToggleButtonFilters","toggled","DataTableHeading","_heading$options","_filtering$options2","_actions$options","heading","filtering","menuOpen","openMenu","closeMenu","_filtering$options","_heading$options2","_actions$revoke","_actions$revoke2","_actions$revoke3","_actions$revoke4","_actions$delete","_actions$delete2","_actions$delete3","_actions$delete4","_actions$add","_actions$add2","_actions$add3","_actions$add4","_actions$menu","_actions$menu2","_actions$menu$menuIte","useHeading","useFilters","showHeadingCount","useActions","revoke","useRevoke","showRevoke","revokeLabel","onRevokeClicked","useDelete","showDelete","deleteLabel","onDeleteClicked","useAdd","showAdd","addLabel","onAddClicked","KeyboardArrowDownIcon","AddIcon","Menu","menuItem","executeMenuAction","DataTable","onCallback","setSelectedRowKeys","hideWhenNoData","hideActionsMenu","hideCheckBoxes","subHeading","focusedRow","setFocusedRow","handleMenuClose","Table","stickyHeader","aria-labelledby","newSelecteds","newSelected","Paper","ClickAwayListener","onClickAway","mouseEvent","touchEvent","MenuList","renderActionMenu","isLoading","onSort","getRegistrationIdFromTableRow","isResendInviteDisabled","filtersHaveChanged","_state$filters","renderMenuItems","handleEditClick","handleResendInviteClick","handleRevokeClick","handleDeleteClick","filteredColumnObjectBuilder","buildStatusFilterSelectOptions","buildVisitorBookingStatusFilterSelectOptions","Booked","Draft","buildInvitationsStatusFilterSelectOptions","getVehicleNumberplateColumn","getVehicleDescriptionColumn","getVehicleProductsColumn","productOptions","getAssignedDateColumn","getStartedDateColumn","getRemainingFlex","getInvitationDateColumn","buildParkingRightsColumns","buildVehiclesMyProductsColumns","buildVehiclesMyFleetColumns","buildDelegeesColumns","buildVisitorBookingsColumns","facilityOptions","getDelegatedParkingRights","_myProductsState$data2","selectedParkingProduct","dataTableContext","getFilters","_myProductsState$data","fetchDelegatedParkingRights","memoizedFetch","productTableOptions","sharedProductActions","getTableRows","_delegatedParkingProd","dpr","delegatedParkingRight","invitationDate","created","remainingFlex","_createData","selectedLocatedProduct","FleetManagerDataTable","_delegatedParkingProd2","_currentPage$data","_delegatedParkingRigh","currentPageNumber","currentPage","delegatedPR","_parkingRightRow$stat","parkingRightRow","MenuItems","onEdit","onRevoke","onDelete","VehiclesTable","_vehicleAssignments$p","_vehicleAssignments$p2","_vehicleAssignments$p3","getVehicleAssignments","fetchVehicleAssignments","_pages","pageData","assignedDate","startedDate","handleDelete","handleEdit","handleRevoke","createYupSchema","defaultNumberPlatePrefix","productValidationSchema","max","field","formik","useFormik","enableReinitialize","numberPlateValidator","numberPlatePrefixPattern","numberPlatePattern","numberPlatePatternWithoutDash","germanNumberPlatePattern","germanRegionPattern","isValidNumberPlatePrefix","isValidNumberPlate","isValidGermanNumberPlate","isValidGermanRegionNumber","isValidNumberPlateWithoutDash","Fields","_fleetManagerState$se","newVehicleAssignmentIdRef","getParkingProductsFromPmcIds","_parkingProducts$loca","_parkingProducts$loca2","seasonTicketId","handleFormSubmit","updateRequest","isUnlimited","crypto","randomUUID","assignRequest","topCountriesNumberPlatesDVA","countries","countryNumberplates","countryNumberPlate","splice","moveCountryToTop","getCountryCodeByLanguage","setFieldValues","NumberPlatePrefix","Description","Products","onInputChange","setFieldError","oldNpValue","tNumberPlate","nb","pop","getNumberPlate","germanResult","_formik$values$number","validateGermanPlate","nbResult","validateOtherNumberPlate","validateNumberPlateAndSetState","setNrPlateError","setNrPlateWarning","setNumberPlateValidationResult","_parkingProducts$sele","onDeleteVehicleAssignment","paddingY","npPrefix","nsMode","_formik$values$produc","handleProductChange","productId","prs","hasNumberPlateAlreadyLinkedToAnotherUser","checkNumberPlateAlreadyAssigned","hasLicensePlateAlreadyLinked","checkLicensePlateAlreadyLinked","validateForm","res","parsedKey","useImportVehiclesContext","whitelistDelta","setWhitelistDelta","handleWhitelistFile","reachedMaxFileSize","unexpectedErrorView","invalidVehicleCount","successChangesView","_props$whitelistDelta2","_props$whitelistDelta3","_props$whitelistDelta4","_props$whitelistDelta5","noChangesCount","addedCount","updateCount","removeCount","successWithoutChangesView","onDownloadErrorFile","getSuccessView","_props$whitelistDelta","getValidationErrorMessage","vehicleErrorType","validateVehicle","validateCountry","validateNumberplate","validateDescription","validateDuplicateNumberPlate","vehicleCount","country","getVehicleKey","numberplate","countVehicleErrors","setInvalidVehicleCount","validateVehicles","setValidateVehicles","readVehiclesFromXls","vehiclesToImport","onWhitelistDelta","countValidationErrors","delta","convertFileValueToString","String","mapVehicleErrorData","vehicleToImport","errorMessage","createCsvFile","csvRows","WhitelistDragAndDrop","handleDownloadFile","errorData","createVehicleErrorFileData","csvData","dateValue","getDate","getMonth","getFullYear","getHours","getMinutes","WhitelistVehiclesUploadView","_useAppSelector","closeUploadView","VehiclesImportDragAndDrop","onChanges","vehiclesToExclude","resetMyProductsContext","resetFleetManagerContext","setTab","switcher","newTab","sorting","_selectedLocatedProdu","_selectedLocatedProdu2","onDelegeeFormClose","onVehicleFormClose","onWhitelistVehiclesClose","setPosition","Helmet","DelegeeForm","MultipleDelegeesForm","DeleteDelegeeWarning","BatchRevokeParkingRightsWarning","BatchRevokeVehicleAssignmentWarning","RevokeParkingRightsWarning","RevokeVehicleAssignmentWarning","DeleteVehiclesAssignmentWarning","VehicleForm","ImportVehiclesContext","WhitelistVehiclesForm","LocationCards","FleetMembersTable","MyProductsPage","MyProducts","myFleetContextTypes","MyFleetContext","MyFleetContextProvider","myFleetContextState","myFleetReducer","useMyFleetContext","TooltipWrapper","toProductsJsx","firstProduct","uuidv4","getSelectedParkingRightIds","dataTableState","getParkingRightIdsByRegistrationId","_delegees$pages$data","delegate","getMessage","TKey","TKeyCount","getParkingProductOptions","delegeeWithRights","invitationAccepted","_environment$featureF","_useSingleDirectVehic","_parkingProducts$park","_parkingProducts$park2","_myFleetContextState$2","selectedParkingRightsCount","setSelectedParkingRightsCount","countAndSetSelectedParkingRights","fetchDelegees","getRequestModel","_myFleetContextState$","_delegeeRow$status$pr","delegeeRow","warningDescription","_props$focusedRow","VehiclesTableMyFleet","_parkingProducts$data","toAssignedVehicleRow","parsedSelectedRows","selectedPmcsCount","excludeIds","createRequest","selectedParkingRightIdsSingle","getSelectedParkingRightIdSingle","getSelectedParkingRightIdsSingle","onAddClickHandler","onAssignVehicleClickHandler","vehicleAssignmentsCount","fleetMembersCount","toExclude","BatchDeleteDelegeeWarning","DelegeesDataTable","onWhitelistVehiclesClickHandler","MyFleetPage","MyFleet","SvgArrowRight","ButtonContainer","FlagAndCountryContainer","FlagContainer","CountryNameContainer","IconContainer","FaqButton","countryName","ArrowRightIcon","FlexContainer","PaddingRow","PaddingCol","StyledSpanContainer","CenteredTextH1","h1","FAQ","faqs","DisplayName","displayName","CountryCode","Url","FaqPage","visitorBookingContextTypes","showCancelBookingWarning","selectedRowValues","VisitorBookingContext","VisitorBookingContextProvider","visitorBookingContextState","toggleCancelVisitorBookingWarning","setSelectedRowValues","visitorBookingRowValues","useVisitorBookingContext","visitorBookingApi","getProductConfigurationsUrl","customerId","getParkingLocationsUrl","getCreateVisitorBookingUrl","getCreateVisitorBookingsUrl","getVisitorBookingsUrl","getCancelVisitorBookingUrl","getParkingFacilityImagesUrl","visitorBookingService","getProductsConfigurations","getParkingLocations","parkingLocationsRequest","getVisitorBookings","cancelVisitorBooking","getParkingFacilityImages","prebookingProductsApi","getProductSalesAvailabilityUrl","physicalZoneUid","prebookingProductsService","getProductSalesAvailability","visitorBookingActions","getProductConfigurations","errorDetails","toastKey","detailsError","visitorBookingStartTime","session","visitorBookingValidationLoading","customerName","VisitorStatus","VisitorBookingConstants","ReferenceNumber","visitorBookingDetails","customerEmailAddress","facility","creationDate","local","startDateTime","productType","FixedRate","FormatDateTimeForFacilityTimeZone","endDateTime","HourlyRate","visitorStatus","dateTime","tz","zonesForCountry","_productConfiguration","_parkingLocations$dat","_visitorBookingContex2","hasProductsConfigured","visitorBookingsList","useHistory","fetchVisitorBookings","getProductConfigurationOptions","countryLoc","_countryLoc$cities","cities","city","_city$physicalZones","physicalZones","physicalZoneId","getFacilityOptions","_dataTableContext$sta","_visitorBookingContex","JSON","parse","stringify","clickCancelVisitorBooking","dataRow","redirectToNewBooking","routes","visitors","newBookingPath","pathname","search","uuidV4","_visitorBookings$data","visitorBookingLoading","uids","physicalZoneUids","requestProductConfigurations","requestParkingLocations","uniquePhysicalZonesUids","from","Set","allowedPhysicalZoneIds","CancelVisitorBookingWarning","VisitorBookingDataTable","BookingOverviewPage","BookingOverview","undefinedHelper","validation","CloseVisitorIcon","ContentCard","removePadding","ParkingLocationForm","physicalZone","onPhysicalZoneChanged","sort","_findWhere$cities$map","_findWhere","City","_findWhere2","_findWhere$physicalZo","_findWhere3","citiesForCountry","PhysicalZone","Country","z","ParkingLocation","titlePrefix","useIsMounted","isMounted","qparkDatePickerV2Locale","Map","set","english","Dutch","German","French","parseDate","formatDate","useQParkDatePickerV2","_inputRef$current2","minDate","maxDate","inputDateValue","setInputDateValue","inputRef","flatpickrInstance","isManualInput","onDateChange","dateStr","jsDateValue","getFlatpickrOptions","locale","firstDayOfWeek","dateFormat","defaultDate","disableMobile","allowInput","monthSelectorType","mode","shorthandCurrentMonth","updateDateState","_inputRef$current$val","_inputRef$current","useLayoutEffect","flatpickr","_flatpickrInstance$cu","_flatpickrInstance$cu2","clear","isBefore","onManualInput","validateAndSetManualInputDate","formattedDate","isAfter","setDate","setManualInput","QParkDatePickerV2","onKeyDown","QParkSelectCardItem","isSelected","onCardItemClicked","DoneRounded","QParkSelectCards","setSelected","existingOptions","setExistingOptions","ClockIcon","ScheduleRounded","hoursGenerator","formatInterval","hour","minute","formattedHour","formattedMinute","createHalfHourIntervals","minTime","passedHalfAnHour","minTimeFormatted","getIntervalStart","QParkTimePicker","selectProps","startTime","endTime","titlePrefixProduct","titlePrefixTime","jsStartDate","jsEndDate","jsMaxEndDate","isHourlyRateProduct","minEndTime","minStartTime","onStartDateChange","onEndDateChange","onStartTimeChange","onEndTimeChange","onProductSelect","useProductTimeframeForm","selectedProductId","setSelectedProductId","selectedProduct","setProductTypeAndParkingTime","ParkingTime","parkingTime","ProductName","updateTime","time","updateDate","startDateAfterEndDate","selectedStartDate","momentStartDate","momentEndDate","momentNow","zones","isSameOrBefore","StartTime","momentStartTime","momentEndTime","isSameOrAfter","EndTime","resetTimeframeOnProductChange","StartDate","EndDate","ProductId","today","todayNextYear","showWhenHourlyProductSelected","isPhysicalZoneSelected","productsByPhysicalZone","pz","_physicalZone$value","toLocaleLowerCase","clearDateErrorOnChange","clearTimeErrorOnChange","clearAllFieldsOnMount","NoFacilitySelected","spacing","QParkSelectCardsBulk","initSelected","defaultVal","initVal","ProductTimeframeFormBulk","useProductTimeframeFormBulk","isSame","oldSelectedProduct","element","paddingTop","ProductTimeframeBulk","_values$parkingTime","VisitorDetailsForm","_numberPlate$value","_numberPlate$error","_numberPlatePrefix$va","countriesNumberPlates","Name","EmailAddress","VisitorDetailsBulk","VisitorDetailsWrapper","numberPlateCountryCode","setIsDirty","preselectedNumberPlatePrefix","countryNumberPlates","formSchema","isValidnumberPlate","oneOf","_ctx$parent$numberPla2","parent","useNewBookingBulkStepTwoFormik","useImperativeHandle","getValue","isDirty","VisitorBookingErrorMessage","VisitorDetailsList","_initialValues$map","inValidationMode","setNumberOfVisitorDetails","refs","initialValuesMapped","uniqueId","visitorDetails","setVisitorDetails","addSize","setAddSize","areThereSpotsLeft","setAreThereSpotsLeft","shouldShowNoSpotsAvailableMessage","setShouldShowNoSpotsAvailableMessage","showMaxAllowedVisitorsCanBeCreatedMessage","setShowMaxAllowedVisitorsCanBeCreatedMessage","isAvailabilityLessThanMaxVisitorsThatCanBeAdded","setIsAvailabilityLessThanMaxVisitorsThatCanBeAdded","maximumAllowedVisitorsToBeCreatedInBulkReached","maxVisitorsThatCanBeAdded","setMaxVisitorsThatCanBeAdded","remainingSpots","_refs$current","all","getElementsByClassName","dims","scrollTo","scrollX","top","scrollY","getValues","_refs$current2","_refs$current3","number","vd","_vd$value","handleRemoveVisitorDetails","idToRemove","InputLabelProps","shrink","newValue","handleAddVisitorDetails","cannotAddOneMoreVisitor","addDetails","maxNumber","mapToCreateVisitorBookingsBulkRequest","mapToCreateVisitorBookingsDetailRequest","_vd$name","_vd$numberPlate$toStr","_vd$numberPlate","_vd$numberPlatePrefix","_vd$numberPlatePrefix2","numberPlateCountryPrefix","mapToVisitorDetailModel","visitor","_visitor$numberPlateC","numberPlateNumber","VisitorDetailsHeader","currentTab","openModalDialog","onTabSwitch","askConfirmationAndSwitchInput","fileActions","setFileUploaded","cancelFileUpload","isCountryCodeValid","licensePlate","isVisitorValid","parseUploadedData","_wb$SheetNames","visitorsToImport","_row$numberPlate","visitorCountryCode","visitorNumberPlate","_visitorNumberPlate","isLicensePlateValid","isVisitorRowEmpty","partition","VisitorBulkUpload","visitorListRef","validVisitorDetails","setValidVisitorDetails","invalidVisitorDetails","setInvalidVisitorDetails","numberOfVisitorsToBeRemoved","setNumberOfVisitorsToBeRemoved","readVisitorsFromFile","germanLicencePlatesEnabled","valid","invalid","mappedValidVisitorDetails","setHasTooManyVisitorsUploadedFromFile","_visitorListRef$curre","totalNumberOfVisitors","setNumberOfVisitorDetailsUploadedFromFile","salesAvailability","_submit$isValid","_submit$data","submit","renderTitle","successFullLines","unSuccessFullLines","invalidCount","marginTop","SidebarInformation","useWarningColor","alt","StickySidebar","_parkingFacilityImage","showSidebar","availableSpots","parkingFacilityImages","imageUrl","Image","ProductIconSrc","ClockIconSrc","AvailableSpotsIconSrc","AvailableSpotsRedIconSrc","getFacilityNameForSidebar","_facility$name","citiesInTheCountry","productName","formatDatesForSidebar","hasStartDateAndTime","hasEndDateAndTime","getParametersForGetProductSalesAvailability","isParkingLocationSet","WarningRow","ModalDialog","onAccept","onDismiss","Dialog","aria-describedby","DialogContent","NewBookingBulk","_productConfiguration2","_productSalesAvailabi","_productSalesAvailabi2","_productSalesAvailabi3","_productSalesAvailabi4","_facilityImages$data","_productSalesAvailabi5","_productSalesAvailabi6","_productSalesAvailabi7","_productSalesAvailabi8","_productSalesAvailabi9","_productSalesAvailabi10","_productSalesAvailabi11","startSalesAvailabilityCheck","updateSalesAvailabilityState","salesAvailabilityCheckError","salesAvailabilityCheckRemoveLoader","isOnStepTwo","setIsOnStepTwo","hasConfiguredCountry","setHasConfiguredCountry","setCurrentTab","imagesRequests","setImagesRequests","setShowSidebar","isModalDialogOpen","setIsModalDialogOpen","onModalDialogAccept","setOnModalDialogAccept","numberOfVisitorDetails","numberOfVisitorDetailsUploadedFromFile","hasTooManyVisitorsUploadedFromFile","_user$country","requests","_x$cities","y","redirectToBookingOverview","formikStepOne","_countryCode$toLowerC3","_countryCode$toLowerC4","_receptionistCountryC2","receptionistCountryCode","when","is","schema","notRequired","moreThan","Unknown","useNewBookingBulkStepOneFormik","isFixedRateTimeProperlySelected","isTimeframeCorrectlySet","_user$seasonTicketOwn","_user$seasonTicketOwn2","_values$productId","visitorDragAndDropRef","isSubmitting","_user$seasonTicketOwn3","_user$seasonTicketOwn4","_formikStepOne$values","_response$data","_response$data2","_response$data3","_response$data4","isThereAnErrorInManualInput","isThereAnErrorInFileUpload","handleStepTwoSubmit","handleStepTwoFileUploadSubmit","handleStepOneSubmit","handleBackToStepOne","_visitorListRef$curre2","_visitorDragAndDropRe","dragAndDropSubmitResult","requestedTab","maxNumberOfBookings","handleManualIsDirty","onParkingLocationChange","alignSelf","paddingRight","handleCancelFileUpload","_productSalesAvailabi12","_productSalesAvailabi13","maxNumberOfBookingsConfig","culture","mapToCreateVisitorBookingsRequest","preloadSrcList","face","BookingOverviewIcon","fleetManager","NewBookingPage","oidcCallbackRoute","faq","appRoutesArray","StyledDivider","Divider","onToggleSidebar","sidebarOpened","crmId","setCrmId","onCrmIdInputBlur","AppBar","Toolbar","QParkLogo","NavLinkItem","multiline","orientation","flexItem","UserCard","FleetManagerSidebar","useLocation","isFleetPage","fleetHasSubroutes","isVisitorsPage","visitorsHasSubroutes","_subRoutes","ListItem","ListItemIcon","ListItemText","primary","SideBar","openSidebar","onCloseSidebar","setWidth","innerWidth","mobile","setMobile","onresize","List","FlexLayout","toggleSidebar","NavigationBar","Layout","AppLoader","toastSeverity","taskId","clearTimeout","getTitle","fallbackKey","Snackbar","autoHideDuration","elevation","getToastTitle","_route$subRoutes","_route$subRoutes2","Route","subroute","sIndex","GeneralException","goToIndex","ErrorBoundary","Component","super","componentDidCatch","errorInfo","render","getEnvironmentUrl","getVersionUrl","getPortalStatusUrl","loggedInCrmId","getEnvironment","environmentApi","getVersion","getPortalStatus","environmentService","getConfigurationUrl","getConfiguration","oidcApi","oidcService","getConnectionStringUrl","getConnectionString","aiApi","aiService","getAllowImpersonation","environmentActions","getFeatureFlagsAndDynamicConfigurations","isCallbackPage","setUser","profile","crmid","access_token","setTimezone","setDefault","signinRedirectCallback","signinRedirect","getUser","expired","hasOwnerCrmId","oidcConfigIsFulfilled","loadChildren","OidcProvider","reactPlugin","ReactPlugin","withAITracking","aiConnectionString","browserHistory","basename","ApplicationInsights","extensions","extensionConfig","loadAppInsights","FullHeightContainer","PortalDeactivated","_g","_g2","SvgLogoWhite","enableBackground","xmlSpace","points","StyledH1","MobileWarningScreen","accepted","setAccepted","setWindowWidth","LogoWhite","getOidcConfig","oidcActions","getAiConnectionString","aiActions","oidcInfoRetrieved","setOidcInfoRetrieved","aiConnectionStringRetrieved","setAiConnectionStringRetrieved","updateOidcInfoRetrieved","updateAiConnectionStringRetrieved","CustomToast","BrowserRouter","TelemetryProvider","CustomOidcProvider","Switch","Redirect","FmpAppRoutes","createTheme","h2","h3","h4","h5","h6","fontWeightBold","fontWeightRegular","MuiButtonBase","palette","main","overrides","MuiCssBaseline","MuiPaper","elevation1","MuiGrid","MuiInputBase","marginDense","input","MuiOutlinedInput","inputMarginDense","adornedStart","paddingLeft","adornedEnd","borderColor","MuiSelect","select","outlined","MuiFormHelperText","MuiFormControlLabel","MuiFormLabel","MuiButton","contained","textTransform","containedPrimary","containedSecondary","textPrimary","MuiIconButton","colorSecondary","MuiButtonGroup","MuiStepper","MuiStepIcon","MuiStepConnector","line","MuiTooltip","textAlign","MuiCardMedia","MuiTableContainer","zIndex","MuiTableHead","borderBottom","MuiTableSortLabel","MuiTableRow","MuiTableCell","sizeSmall","borderRight","MuiList","maxHeight","MuiListItem","MuiMenuItem","marginRight","MuiPickersToolbar","toolbar","MuiPickersCalendarHeader","switchHeader","dayLabel","MuiPickersDay","day","daySelected","dayDisabled","AppThemeProvider","ThemeProvider","CssBaseline","ContextProvider","languageDetector","initReactI18next","init","resources","fallbackLng","whitelist","supportedLngs","nonExplicitSupportedLngs","load","interpolation","escapeValue","rootElement","ReactDOM","App"],"mappings":"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","file":"static/js/main.6ecf47bd.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/warning-fleet.e4a05ce7.svg\";","module.exports = __webpack_public_path__ + \"static/media/xls-file-add.30e88f22.svg\";","module.exports = __webpack_public_path__ + \"static/media/xls-file-dropping.f23814fb.svg\";","module.exports = __webpack_public_path__ + \"static/media/xls-file-empty.fa03da2f.svg\";","module.exports = __webpack_public_path__ + \"static/media/xls-file-checked.b3ff2cc7.svg\";","module.exports = __webpack_public_path__ + \"static/media/warning-fleet-orange.1fce8146.svg\";","module.exports = __webpack_public_path__ + \"static/media/product-ticket.2e3b7afc.svg\";","module.exports = __webpack_public_path__ + \"static/media/clock-filled.9cb26f39.svg\";","module.exports = __webpack_public_path__ + \"static/media/available-spots.74d298db.svg\";","module.exports = __webpack_public_path__ + \"static/media/available-spots-red.947ab44f.svg\";","module.exports = __webpack_public_path__ + \"static/media/logo.da3dead9.png\";","module.exports = __webpack_public_path__ + \"static/media/Futura-Book.632e79ff.woff2\";","module.exports = __webpack_public_path__ + \"static/media/Futura-Demi.c8a3c693.woff2\";","module.exports = __webpack_public_path__ + \"static/media/ticket.aa8a71e8.svg\";","module.exports = __webpack_public_path__ + \"static/media/location-marker.63619fd4.svg\";","module.exports = __webpack_public_path__ + \"static/media/season-ticket.6af369d0.svg\";","module.exports = __webpack_public_path__ + \"static/media/vehicle.07321da9.svg\";","module.exports = __webpack_public_path__ + \"static/media/xls-file-loading.607e158e.svg\";","module.exports = __webpack_public_path__ + \"static/media/empty-state-car.aba77cd8.svg\";","module.exports = __webpack_public_path__ + \"static/media/fm_mobile_bg.fdbc6da4.jpg\";","export const variables = {\r\n colors: {\r\n lime: {\r\n hex: \"#8bb611\",\r\n rgb: \"139, 182, 17\",\r\n },\r\n black: \"#1c1c1c\",\r\n white: \"#fff\",\r\n gray: {\r\n hex: \"#bbb\",\r\n rgb: \"187, 187, 187\",\r\n },\r\n darkGray: \"#5b5d61\",\r\n darkGraySecondary: \"#777777\",\r\n red: {\r\n hex: \"#D90327\",\r\n rgb: \"217, 3, 39\",\r\n },\r\n yellow: {\r\n hex: \"#E88F00\",\r\n rgb: \"232, 143, 0\"\r\n },\r\n darkRed: \"#ac001d\",\r\n veryLightGray: \"#ededed\",\r\n lightGray: \"#CECECE\",\r\n veryLightGraySecondary: \"#ececec\",\r\n silver: \"#bcbcbc\",\r\n darkerLime: \"#799f0f\",\r\n mostlyWhite: \"#f9f9f9\",\r\n mostlyBlack: \"#23262c\",\r\n lightGrayishBlue: {\r\n hex: \"#DDDEE2\",\r\n rgb: \"221, 222, 226\",\r\n },\r\n grayishBlue: {\r\n hex: \"#cbcbd1\",\r\n rgb: \"203, 203, 209\",\r\n },\r\n brightOrange: {\r\n hex: \"#EF9A26\",\r\n rgb: \"239, 154, 38\",\r\n },\r\n darkModerateCyan: {\r\n rgb: \"66, 143, 164\",\r\n hex: \"#428FA4\",\r\n },\r\n },\r\n typography: {\r\n fontSizeBase: \"18px\",\r\n fontSizeLarge: \"20px\",\r\n fontSizeLarger: \"24px\",\r\n fontSizeExtraLarge: \"28px\",\r\n fontSizeSmaller: \"16px\",\r\n fontSizeSmall: \"14px\",\r\n fontSizeExtraSmall: \"12px\",\r\n },\r\n whiteSpaces: {\r\n [\"2xs\"]: \"8px\",\r\n xs: \"18px\",\r\n sm: \"36px\",\r\n md: \"45px\",\r\n lg: \"54px\",\r\n xl: \"90px\",\r\n },\r\n breakpoints: {\r\n screenXs: \"0px\",\r\n screenSm: \"600px\",\r\n screenMd: \"960px\",\r\n screenLg: \"1280px\",\r\n screenXl: \"1920px\",\r\n },\r\n shared: {\r\n boxShadow: \"0px 3px 6px rgba(0, 0, 0, 0.1)\",\r\n },\r\n};\r\n","import { CircularProgress } from \"@material-ui/core\";\r\nimport React from \"react\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../theme/variables\";\r\nimport \"./customSpinner.scss\";\r\n\r\nconst { colors } = variables;\r\n\r\nconst RedCircularProgress = styled(CircularProgress)`\r\n color: ${colors.red.hex};\r\n`;\r\n\r\nconst LightGrayCircularProgress = styled(CircularProgress)`\r\n color: ${colors.veryLightGraySecondary};\r\n`;\r\n\r\ninterface ICustomSpinnerProps {\r\n size?: string | number;\r\n}\r\n\r\nconst CustomSpinner = ({ size }: ICustomSpinnerProps) => ;\r\n\r\nconst LightGray = ({ size }: ICustomSpinnerProps) => ;\r\n\r\nconst DotPulse = () => (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n);\r\n\r\nCustomSpinner.LightGray = LightGray;\r\nCustomSpinner.DotPulse = DotPulse;\r\n\r\nexport default CustomSpinner;\r\n","import { Backdrop } from \"@material-ui/core\";\r\nimport React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport styled from \"styled-components\";\r\nimport { RootReducer } from \"../../store/reducers\";\r\nimport CustomSpinner from \"../../ui/CustomSpinner/CustomSpinner\";\r\n\r\nconst CustomBackdrop = styled(Backdrop)`\r\n z-index: 3020;\r\n`;\r\n\r\ninterface IAppLoaderState extends StateProps {}\r\n\r\nconst AppLoader: React.FC = ({ loader }) => (\r\n \r\n \r\n \r\n);\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { loader } = state;\r\n\r\n return {\r\n loader,\r\n };\r\n};\r\n\r\ntype StateProps = ReturnType;\r\n\r\nexport default connect(mapStateToProps)(AppLoader);\r\n","export const appContextTypes = {\r\n SET_APP_LANGUAGE: \"context/SET_APP_LANGUAGE\",\r\n SET_APP_USER: \"context/SET_APP_USER\",\r\n DISPOSE_USER: \"context/DISPOSE_USER\",\r\n};\r\n","import { appContextTypes } from \"../actions/appContext.types\";\r\n\r\nexport type UserType = {\r\n seasonTicketOwnerCrmId?: string;\r\n email?: string;\r\n country?: string;\r\n};\r\n\r\nexport type AppContextState = {\r\n selectedLanguage: string;\r\n user: UserType;\r\n};\r\n\r\nexport type AppContextAction = {\r\n type: string;\r\n payload?: string | UserType;\r\n};\r\n\r\nexport const initialState: AppContextState = {\r\n selectedLanguage: \"\",\r\n user: {\r\n seasonTicketOwnerCrmId: \"\",\r\n email: \"\",\r\n },\r\n};\r\n\r\nexport default (\r\n state: AppContextState = initialState,\r\n action: AppContextAction\r\n): AppContextState => {\r\n switch (action.type) {\r\n case appContextTypes.SET_APP_LANGUAGE:\r\n return {\r\n ...state,\r\n selectedLanguage: action.payload as string,\r\n };\r\n case appContextTypes.SET_APP_USER:\r\n return {\r\n ...state,\r\n user: {\r\n ...state.user,\r\n ...(action.payload as UserType),\r\n },\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","import React, { createContext, useReducer, useEffect } from \"react\";\r\nimport IChildren from \"../interfaces/IChildren\";\r\nimport appContextReducer, {\r\n initialState,\r\n AppContextState,\r\n UserType,\r\n} from \"./store/reducers/appContext.reducer\";\r\nimport { appContextTypes } from \"./store/actions/appContext.types\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nexport type AppContextType = {\r\n appState: AppContextState;\r\n setAppUser: (user: UserType) => void;\r\n disposeUser: () => void;\r\n};\r\n\r\nexport const AppContext = createContext(undefined);\r\n\r\nconst AppContextProvider = ({ children }: IChildren) => {\r\n const [appState, dispatch] = useReducer(appContextReducer, initialState);\r\n const { i18n } = useTranslation();\r\n\r\n useEffect(() => {\r\n setAppLanguage();\r\n\r\n // eslint-disable-next-line\r\n }, [i18n.languages]);\r\n\r\n const setAppLanguage = () =>\r\n dispatch({\r\n type: appContextTypes.SET_APP_LANGUAGE,\r\n payload: i18n.languages[0],\r\n });\r\n\r\n const setAppUser = (user: UserType) =>\r\n dispatch({\r\n type: appContextTypes.SET_APP_USER,\r\n payload: user,\r\n });\r\n\r\n const disposeUser = () =>\r\n dispatch({\r\n type: appContextTypes.DISPOSE_USER,\r\n });\r\n\r\n const store: AppContextType = {\r\n appState,\r\n setAppUser,\r\n disposeUser,\r\n };\r\n\r\n return {children};\r\n};\r\n\r\nexport default AppContextProvider;\r\n","import { useContext } from \"react\";\r\nimport { AppContext } from \"../AppContextProvider\";\r\n\r\nconst useAppContext = () => {\r\n const ctxValue = useContext(AppContext);\r\n\r\n if (ctxValue === undefined)\r\n throw new Error(\"AppContext is not setup properly\");\r\n\r\n return ctxValue;\r\n};\r\n\r\nexport default useAppContext;\r\n","import en from \"./en.json\";\r\nimport nl from \"./nl.json\";\r\nimport fr from \"./fr.json\";\r\nimport de from \"./de.json\";\r\n\r\nexport const languages = {\r\n en: \"en\",\r\n nl: \"nl\",\r\n fr: \"fr\",\r\n de: \"de\",\r\n};\r\n\r\nexport default {\r\n [languages.en]: en,\r\n [languages.nl]: nl,\r\n [languages.fr]: fr,\r\n [languages.de]: de,\r\n};\r\n","import React from \"react\";\r\nimport { Select, MenuItem, FormControl } from \"@material-ui/core\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { ExpandMoreOutlined } from \"@material-ui/icons\";\r\nimport useAppContext from \"../../context/hooks/useAppContext\";\r\nimport styled from \"styled-components\";\r\nimport \"./_language-selector.scss\";\r\nimport { languages } from \"../../translations\";\r\n\r\nconst LanguageContainer = styled.div`\r\n display: flex;\r\n flex-flow: column nowrap;\r\n padding: 0 0.5rem;\r\n`;\r\n\r\nconst LanguageSelector = () => {\r\n const { i18n } = useTranslation();\r\n const { appState } = useAppContext();\r\n\r\n const changeLanguage = (\r\n event: React.ChangeEvent<{ name?: string | undefined; value: any }>\r\n ) => {\r\n const { value } = event.target;\r\n i18n.changeLanguage(value!);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n EN\r\n NL\r\n DE\r\n FR\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default LanguageSelector;\r\n","import React from \"react\";\r\nimport { MenuItem, Box } from \"@material-ui/core\";\r\nimport { Link, LinkProps, NavLink, NavLinkProps } from \"react-router-dom\";\r\nimport IChildren from \"../../interfaces/IChildren\";\r\nimport \"./_nav-link-item.scss\";\r\n\r\ninterface IExternalLinkProps extends IChildren {\r\n to: string;\r\n}\r\n\r\nconst MenuNavItem = ({ children }: IChildren) => (\r\n \r\n {children}\r\n \r\n);\r\n\r\nconst NavLinkItem = (props: NavLinkProps) => (\r\n \r\n \r\n {props.children}\r\n \r\n \r\n);\r\n\r\nconst LinkItem = (props: LinkProps) => (\r\n \r\n \r\n {props.children}\r\n \r\n \r\n);\r\n\r\nconst ExternalLinkItem = (props: IExternalLinkProps) => (\r\n \r\n \r\n {props.children}\r\n \r\n \r\n);\r\n\r\nMenuNavItem.NavLink = NavLinkItem;\r\nMenuNavItem.Link = LinkItem;\r\nMenuNavItem.ExternalLink = ExternalLinkItem;\r\n\r\nexport default MenuNavItem;\r\n","import React from \"react\";\r\n\r\ninterface IProps {\r\n environment: string;\r\n version: string;\r\n}\r\n\r\nconst EnvironmentInfo = (props: IProps) => {\r\n const { environment, version } = props;\r\n\r\n return (\r\n <>\r\n {environment.toLowerCase() !== \"production\" && (\r\n
\r\n {environment} - {version}\r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default EnvironmentInfo;\r\n","import { useEffect } from \"react\";\r\n\r\nconst useOutsideClick = (instance: React.MutableRefObject, action: () => void) => {\r\n const _handleClickOutside = (\r\n instance: React.MutableRefObject,\r\n action: () => void,\r\n event: MouseEvent\r\n ) => {\r\n if (instance.current && !instance.current.contains(event.target)) {\r\n action();\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n document.addEventListener(\"mousedown\", (event) => _handleClickOutside(instance, action, event));\r\n\r\n return () =>\r\n document.removeEventListener(\"mousedown\", (event) =>\r\n _handleClickOutside(instance, action, event)\r\n );\r\n // eslint-disable-next-line\r\n }, [instance]);\r\n};\r\n\r\nexport default useOutsideClick;\r\n","import { UserManager } from \"oidc-client\";\r\nimport { createUserManager } from \"redux-oidc\";\r\nimport { OidcConfigurationResponseModel } from \"../models/OidcConfigurationResponseModel\";\r\n\r\nlet userManager: UserManager;\r\n\r\nconst getUserManager = function (oidcConfig: OidcConfigurationResponseModel) {\r\n if (userManager) {\r\n return userManager;\r\n }\r\n\r\n const currentHostName = `${window.location.protocol}//${window.location.hostname}${window.location.port ? `:${window.location.port}` : \"\"}`;\r\n\r\n const userManagerConfig = {\r\n authority: oidcConfig.serverUrl,\r\n client_id: oidcConfig.clientId,\r\n client_secret: oidcConfig.clientSecret,\r\n redirect_uri: `${currentHostName}/signin-oidc`,\r\n response_type: \"code\",\r\n scope: \"openid profile IdentityServerApi\",\r\n monitorSession: false,\r\n loadUserInfo: false,\r\n post_logout_redirect_uri: currentHostName\r\n };\r\n\r\n userManager = createUserManager(userManagerConfig);\r\n\r\n return userManager;\r\n};\r\n\r\nexport default getUserManager;\r\n","import { isNull } from \"underscore\";\r\n\r\ntype StorageService = {\r\n setTokenToStorage: (value: string) => void;\r\n getTokenFromStorage: () => string;\r\n removeTokenFromStorage: () => void;\r\n};\r\n\r\nconst storageService: StorageService = (() => {\r\n const $key = \"token\";\r\n\r\n const _setToken = (value: string) => localStorage.setItem($key, value);\r\n\r\n const _getToken = () => {\r\n const token = localStorage.getItem($key);\r\n\r\n if (isNull(token)) {\r\n return \"\";\r\n }\r\n\r\n return token;\r\n };\r\n\r\n const _removeToken = () => localStorage.removeItem($key);\r\n\r\n return {\r\n setTokenToStorage: _setToken,\r\n getTokenFromStorage: _getToken,\r\n removeTokenFromStorage: _removeToken,\r\n };\r\n})();\r\n\r\nexport default storageService;\r\n","import storageService from \"../../services/storage.service\";\r\nimport { isUndefined } from \"underscore\";\r\n\r\ntype UserCardBusiness = {\r\n signOut: (callback?: Function) => void;\r\n};\r\n\r\nconst userCardBusiness: UserCardBusiness = (() => {\r\n const signOut = (callback?: Function): void => {\r\n storageService.removeTokenFromStorage();\r\n\r\n if (!isUndefined(callback)) {\r\n callback();\r\n }\r\n };\r\n\r\n return {\r\n signOut,\r\n };\r\n})();\r\n\r\nexport default userCardBusiness;\r\n","import React from \"react\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../theme/variables\";\r\n\r\nconst { colors } = variables;\r\n\r\nconst ArrowUp = styled.div`\r\n display: inline-block;\r\n position: relative;\r\n border: 1px solid ${colors.veryLightGray};\r\n margin-top: 5px;\r\n width: 100%;\r\n box-shadow: 0px 1px 3px ${colors.veryLightGraySecondary};\r\n ${({ rounded }: ContainerArrowUpProps) => rounded && \"border-radius: 6px;\"}\r\n\r\n &:before {\r\n content: \"\";\r\n display: block;\r\n position: absolute;\r\n bottom: 100%;\r\n ${({ left }: ContainerArrowUpProps) =>\r\n left && left > 0 ? `left: ${left - 1}px;` : \"left: unset;\"}\r\n ${({ right }: ContainerArrowUpProps) =>\r\n right && right > 0 ? `right: ${right - 1}px;` : \"right: unset;\"}\r\n width: 0;\r\n height: 0;\r\n border: 10px solid transparent;\r\n border-bottom-color: ${colors.veryLightGray};\r\n }\r\n\r\n &:after {\r\n content: \"\";\r\n display: block;\r\n position: absolute;\r\n top: -17px;\r\n ${({ left }: ContainerArrowUpProps) => (left && left > 0 ? `left: ${left}px;` : \"left: unset;\")}\r\n ${({ right }: ContainerArrowUpProps) =>\r\n right && right > 0 ? `right: ${right}px;` : \"right: unset;\"}\r\n bottom: 100%;\r\n width: 0;\r\n height: 0;\r\n border: 9px solid transparent;\r\n border-bottom-color: ${colors.white};\r\n }\r\n`;\r\n\r\ninterface ContainerArrowUpProps {\r\n left?: number;\r\n right?: number;\r\n rounded?: boolean;\r\n}\r\n\r\nconst ContainerArrowUp: React.FC = (props) => (\r\n {props.children}\r\n);\r\n\r\nexport default ContainerArrowUp;\r\n","import React, { PropsWithChildren } from \"react\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../theme/variables\";\r\nimport CustomSpinner from \"../CustomSpinner/CustomSpinner\";\r\nimport { IconButton } from \"@material-ui/core\";\r\n\r\nconst { colors, shared } = variables;\r\n\r\ninterface ColouredTextProps {\r\n color?: string;\r\n}\r\n\r\nconst ColouredText = styled.span`\r\n color: ${(props: ColouredTextProps) => props.color || colors.black};\r\n`;\r\n\r\nconst AbsoluteCustomSpinner = styled.div`\r\n position: absolute;\r\n z-index: 105;\r\n display: flex;\r\n align-items: center;\r\n`;\r\n\r\ninterface IButtonProps {\r\n text?: string;\r\n className?: string;\r\n disabled?: boolean;\r\n onClick?: (event?: React.MouseEvent) => void;\r\n startIcon?: React.ReactNode;\r\n endIcon?: React.ReactNode;\r\n textColor?: string;\r\n loading?: boolean;\r\n id?: string\r\n}\r\n\r\nconst CustomButton = () => null;\r\n\r\nconst Primary = ({\r\n text,\r\n className,\r\n disabled,\r\n loading,\r\n startIcon,\r\n endIcon,\r\n onClick,\r\n id,\r\n}: IButtonProps) => (\r\n \r\n {text}\r\n {loading && (\r\n \r\n \r\n \r\n )}\r\n \r\n);\r\n\r\nconst Light = ({\r\n text,\r\n className,\r\n disabled,\r\n startIcon,\r\n loading,\r\n textColor,\r\n onClick,\r\n id,\r\n}: IButtonProps) => (\r\n \r\n \r\n {text}\r\n \r\n {loading && (\r\n \r\n \r\n \r\n )}\r\n \r\n);\r\n\r\nconst Danger = ({ \r\n text,\r\n className,\r\n disabled,\r\n loading,\r\n onClick, \r\n id \r\n}: IButtonProps) => (\r\n \r\n {text}\r\n {loading && (\r\n \r\n \r\n \r\n )}\r\n \r\n);\r\n\r\nconst StyledIconButton = styled(IconButton)`\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background-color: ${colors.white};\r\n border: 1px solid ${colors.veryLightGraySecondary};\r\n color: ${colors.black};\r\n padding: 10px;\r\n box-shadow: ${shared.boxShadow};\r\n\r\n svg {\r\n font-size: 18px;\r\n }\r\n`;\r\n\r\nconst Icon = ({ children, onClick }: PropsWithChildren) => (\r\n {children}\r\n);\r\n\r\nCustomButton.Primary = Primary;\r\nCustomButton.Light = Light;\r\nCustomButton.Danger = Danger;\r\nCustomButton.Icon = Icon;\r\n\r\nexport default CustomButton;\r\n","import React from \"react\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../theme/variables\";\r\n\r\nconst { whiteSpaces } = variables;\r\n\r\ntype Size = \"2xs\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n\r\ninterface ISpacerProps {\r\n size?: Size;\r\n}\r\n\r\nconst SpacerSpan = styled.span`\r\n display: block;\r\n padding-top: ${(props: ISpacerProps) => whiteSpaces[props.size!] || whiteSpaces.xs};\r\n width: 100%;\r\n`;\r\n\r\nconst Spacer = ({ size }: ISpacerProps) => ;\r\n\r\nexport default Spacer;\r\n","import styled from \"styled-components\";\r\nimport { ExitToAppRounded, ExpandLessRounded, ExpandMoreRounded } from \"@material-ui/icons\";\r\nimport { variables } from \"../../theme/variables\";\r\nimport { Collapse, Grid, IconButton } from \"@material-ui/core\";\r\n\r\nconst { colors } = variables;\r\n\r\nexport const UserInfoCard = styled.div``;\r\n\r\nexport const ExpandMore = styled(ExpandMoreRounded)`\r\n color: ${colors.grayishBlue.hex};\r\n`;\r\n\r\nexport const ExpandLess = styled(ExpandLessRounded)`\r\n color: ${colors.grayishBlue.hex};\r\n`;\r\n\r\nexport const StyledFullName = styled.strong`\r\n color: ${colors.black};\r\n width: 100%;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n text-align: center;\r\n`;\r\n\r\nexport const NoPaddingGrid = styled(Grid)`\r\n padding-bottom: 0;\r\n overflow: hidden;\r\n position: relative;\r\n`;\r\n\r\nexport const NoPaddingWithOverflowGrid = styled(Grid)`\r\npadding-bottom: 0;\r\nposition: relative;\r\n`;\r\n\r\nexport const PointerContainerGrid = styled(Grid)`\r\n padding-bottom: 0;\r\n overflow: hidden;\r\n position: relative;\r\n\r\n &:hover {\r\n cursor: pointer;\r\n }\r\n`;\r\n\r\nexport const StyledIconButton = styled(IconButton)`\r\n padding: 0;\r\n`;\r\n\r\nexport const AbstractCollapse = styled(Collapse)`\r\n position: absolute;\r\n z-index: 30;\r\n top: 65px;\r\n right: 25px;\r\n`;\r\n\r\nexport const DetailsContainer = styled.div`\r\n background-color: ${colors.white};\r\n border-radius: 6px;\r\n min-width: 250px;\r\n padding: 1rem 0.5rem;\r\n display: flex;\r\n flex-flow: row nowrap;\r\n justify-content: center;\r\n`;\r\n\r\nexport const SignOutIcon = styled(ExitToAppRounded)`\r\n color: ${colors.lightGrayishBlue.hex};\r\n`;\r\n\r\nexport const UserCardWrapper = styled.div`\r\n padding: 0.5rem;\r\n`;\r\n","import React from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport ContainerArrowUp from \"../../ui/ContainerArrowUp/ContainerArrowUp\";\r\nimport CustomButton from \"../../ui/CustomButton/CustomButton\";\r\nimport Spacer from \"../../ui/Spacer/Spacer\";\r\nimport {\r\n NoPaddingGrid,\r\n StyledFullName,\r\n DetailsContainer,\r\n SignOutIcon,\r\n AbstractCollapse,\r\n} from \"./UserCardStyledComponents\";\r\n\r\ninterface IUserCardDetailsProps {\r\n email: string;\r\n show: boolean;\r\n onSignOut?: () => void;\r\n}\r\n\r\nconst UserCardDetails: React.FC = (props) => {\r\n const { email, show, onSignOut } = props;\r\n const { t } = useTranslation(\"topMenu\");\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {email}\r\n \r\n \r\n \r\n }\r\n text={t(\"signOut\")}\r\n onClick={onSignOut}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default UserCardDetails;\r\n","import { useState } from \"react\";\r\n\r\nconst initialState = {\r\n showDetails: false,\r\n};\r\n\r\nexport type UserCardState = Readonly;\r\n\r\nconst useUserCardState = () => {\r\n const [state, setState] = useState(initialState);\r\n\r\n const updateState = (newState: UserCardState): void => {\r\n setState({\r\n ...state,\r\n ...newState,\r\n });\r\n };\r\n\r\n const resetState = (): void => setState(initialState);\r\n\r\n const showDetails = () => updateState({ showDetails: true });\r\n\r\n const hideDetails = () => updateState({ showDetails: false });\r\n\r\n const toggleDetails = () => updateState({ showDetails: !state.showDetails });\r\n\r\n return { state, showDetails, hideDetails, toggleDetails, resetState, updateState };\r\n};\r\n\r\nexport default useUserCardState;\r\n","import React, { useRef } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport useAppContext from \"../../context/hooks/useAppContext\";\r\nimport { RootReducer } from \"../../store/reducers\";\r\nimport useOutsideClick from \"../../utils/hooks/useOutsideClick\";\r\nimport getUserManager from \"../../utils/userManager\";\r\nimport userCardBusiness from \"./userCard.business\";\r\nimport UserCardDetails from \"./UserCardDetails\";\r\nimport {\r\n NoPaddingGrid,\r\n StyledFullName,\r\n ExpandMore,\r\n UserCardWrapper,\r\n ExpandLess,\r\n PointerContainerGrid,\r\n} from \"./UserCardStyledComponents\";\r\nimport useUserCardState from \"./useUserCardState\";\r\n\r\ninterface IUserCardProps extends StateProps {\r\n email: string;\r\n}\r\n\r\nconst UserCard: React.FC = ({ email, oidcConfig }) => {\r\n const { state, toggleDetails, hideDetails } = useUserCardState();\r\n const { disposeUser } = useAppContext();\r\n const { signOut } = userCardBusiness;\r\n\r\n const callback = () => {\r\n disposeUser();\r\n getUserManager(oidcConfig.oidcConfig).signoutRedirect();\r\n };\r\n\r\n const onSignOut = () => signOut(callback);\r\n\r\n const instance = useRef(null);\r\n useOutsideClick(instance, hideDetails);\r\n\r\n return (\r\n \r\n \r\n \r\n {email}\r\n \r\n \r\n {state.showDetails ? : }\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { oidcConfig } = state;\r\n\r\n return {\r\n oidcConfig,\r\n };\r\n};\r\n\r\ntype StateProps = ReturnType;\r\n\r\nexport default connect(mapStateToProps)(UserCard);\r\n","import React from \"react\";\r\nimport { SvgIcon } from \"@material-ui/core\";\r\n\r\nconst MyProductsIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default MyProductsIcon;\r\n","import { RouteProps, RouteComponentProps } from \"react-router\";\r\n\r\nexport interface IRouteProps extends RouteProps {\r\n subRoutes?: IRouteProps[];\r\n name?: string;\r\n Icon?: React.ComponentType;\r\n hidden?: boolean;\r\n}\r\n\r\nclass AppRoute {\r\n private route: IRouteProps = {};\r\n\r\n constructor(\r\n path?: string,\r\n component?:\r\n | React.ComponentType>\r\n | React.ComponentType,\r\n name?: string\r\n ) {\r\n this.route.path = path;\r\n this.route.component = component;\r\n this.route.exact = true;\r\n this.route.name = name;\r\n this.route.subRoutes = [];\r\n }\r\n\r\n public addSubroute = (\r\n path?: string,\r\n component?:\r\n | React.ComponentType>\r\n | React.ComponentType,\r\n name?: string,\r\n Icon?: React.ComponentType,\r\n hidden?: boolean\r\n ): AppRoute => {\r\n this.route.subRoutes?.push({\r\n path: `${this.route.path}/${path}`,\r\n exact: true,\r\n name,\r\n component,\r\n Icon,\r\n hidden,\r\n });\r\n\r\n return this;\r\n };\r\n\r\n public getRoute = (): IRouteProps => this.route;\r\n}\r\n\r\nexport default AppRoute;\r\n","import React, { createContext, useContext, useReducer, useRef } from \"react\";\r\nimport { findWhere, indexOf, isUndefined } from \"underscore\";\r\nimport { FilterType } from \"../DataTableFilters/DataTableFilters\";\r\n\r\nconst updateState = (state: DataTableContextState, newState: DataTableContextState) => ({\r\n ...state,\r\n ...newState,\r\n});\r\n\r\nconst updateFilters = (state: DataTableContextState, payload: DataTableContextFilters) => {\r\n const found = findWhere(state.filters!, { key: payload.key });\r\n\r\n if (found && !isUndefined(state.filters)) {\r\n const index = indexOf(state.filters, found);\r\n\r\n found.value = payload.value;\r\n state.filters[index] = found;\r\n\r\n return updateState(state, { filters: [...state.filters] });\r\n }\r\n\r\n return updateState(state, {\r\n filters: [...state.filters!, payload],\r\n });\r\n};\r\n\r\nconst actions = {\r\n SET_PAGE_NUMBER: \"data_table/SET_PAGE_NUMBER\",\r\n SET_PAGE_SIZE: \"data_table/SET_PAGE_SIZE\",\r\n TOGGLE_FILTERS: \"data_table/TOGGLE_FILTERS\",\r\n SET_FILTERS: \"data_table/SET_FILTERS\",\r\n RESET_FILTER: \"data_table/RESET_FILTER\",\r\n RESET_FILTERS: \"data_table/RESET_FILTERS\",\r\n RESET_PAGE_NUMBER: \"data_table/RESET_PAGE_NUMBER\",\r\n RESET_PAGE_SIZE: \"data_table/RESET_PAGE_SIZE\",\r\n RESET_CONTEXT: \"data_table/RESET_CONTEXT\",\r\n};\r\n\r\ndeclare type FiltersStatus = boolean;\r\n\r\nexport type DateFilter = {\r\n startDate: Date | null;\r\n endDate: Date | null;\r\n customKeys?: { startKey: string, endKey: string }\r\n};\r\n\r\nexport type DataTableContextState = {\r\n pageNumber?: number;\r\n pageSize?: number;\r\n showFilters?: FiltersStatus;\r\n filters?: DataTableContextFilters[];\r\n};\r\n\r\nexport type DataTableContextFilters = {\r\n key: string;\r\n type: FilterType;\r\n value?: string | string[] | number[] | DateFilter;\r\n};\r\n\r\ntype DataTableActionPayload = {\r\n value?: number | DataTableContextFilters | DataTableContextFilters[] | boolean | DateFilter;\r\n type?: FilterType;\r\n};\r\n\r\ntype DataTableActionType = {\r\n type: string;\r\n payload?: DataTableActionPayload;\r\n};\r\n\r\nconst initialFilters: DataTableContextFilters[] = [];\r\n\r\nconst initialState: DataTableContextState = {\r\n pageNumber: 1,\r\n pageSize: 25,\r\n showFilters: false,\r\n filters: initialFilters,\r\n};\r\n\r\nconst reducer = (\r\n state: DataTableContextState = initialState,\r\n action: DataTableActionType\r\n): DataTableContextState => {\r\n switch (action.type) {\r\n case actions.SET_PAGE_NUMBER:\r\n return updateState(state, { pageNumber: action.payload?.value as number });\r\n case actions.SET_PAGE_SIZE:\r\n return updateState(state, { pageNumber: 1, pageSize: action.payload?.value as number });\r\n case actions.RESET_PAGE_NUMBER:\r\n return updateState(state, { pageNumber: 1 });\r\n case actions.RESET_PAGE_SIZE:\r\n return updateState(state, { pageSize: 25 });\r\n case actions.TOGGLE_FILTERS:\r\n return updateState(state, { showFilters: !state.showFilters });\r\n case actions.SET_FILTERS:\r\n return updateFilters(state, action.payload?.value as DataTableContextFilters);\r\n case actions.RESET_FILTER:\r\n return updateFilters(state, action.payload?.value as DataTableContextFilters);\r\n case actions.RESET_CONTEXT:\r\n return initialState;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\ntype DataTableContextType = {\r\n state: DataTableContextState;\r\n setPageNumber: (pageNumber: number) => void;\r\n setPageSize: (pageSize: number) => void;\r\n setFilter: (\r\n key: string,\r\n type: FilterType,\r\n value: string | string[] | number[] | DateFilter\r\n ) => void;\r\n toggleFilters: () => void;\r\n resetPageNumber: () => void;\r\n resetPageSize: () => void;\r\n resetContext: () => void;\r\n resetFilters: () => void;\r\n resetFiltersAsync: () => Promise;\r\n resetFilter: (key: string) => void;\r\n};\r\n\r\nexport const DataTableContext = createContext({} as DataTableContextType);\r\n\r\ninterface IDataTableContextProps {}\r\n\r\nconst DataTableContextProvider: React.FC = ({ children }) => {\r\n const [state, dispatch] = useReducer(reducer, initialState);\r\n const filtersRef = useRef([]);\r\n\r\n const dispatchAction = (type: string, payload?: DataTableActionPayload): void =>\r\n dispatch({\r\n type,\r\n payload,\r\n });\r\n\r\n const storeAndDispatch = (\r\n key: string,\r\n value: string | string[] | number[] | DateFilter,\r\n type: FilterType\r\n ): void => {\r\n const found = findWhere(filtersRef.current, { key });\r\n if (isUndefined(found)) {\r\n filtersRef.current.push({ key, type, value });\r\n }\r\n\r\n const payload: DataTableActionPayload = {\r\n type,\r\n value: { key, type, value } as DataTableContextFilters,\r\n };\r\n\r\n dispatchAction(actions.SET_FILTERS, payload);\r\n };\r\n\r\n const setPageNumber = (pageNumber: number): void =>\r\n dispatchAction(actions.SET_PAGE_NUMBER, { value: pageNumber } as DataTableActionPayload);\r\n\r\n const setPageSize = (pageSize: number): void =>\r\n dispatchAction(actions.SET_PAGE_SIZE, { value: pageSize } as DataTableActionPayload);\r\n\r\n const toggleFilters = (): void => dispatchAction(actions.TOGGLE_FILTERS);\r\n\r\n const resetPageNumber = (): void => dispatchAction(actions.RESET_PAGE_NUMBER);\r\n\r\n const resetPageSize = (): void => dispatchAction(actions.RESET_PAGE_SIZE);\r\n\r\n const resetContext = (): void => {\r\n dispatchAction(actions.RESET_CONTEXT);\r\n };\r\n\r\n const setFilter = (\r\n key: string,\r\n type: FilterType,\r\n value: string | string[] | number[] | DateFilter\r\n ): void => storeAndDispatch(key, value, type);\r\n\r\n const resetFiltersAsync = (): Promise => {\r\n return new Promise((resolve) =>\r\n filtersRef.current.forEach((filter, index) => {\r\n const payload: DataTableActionPayload = {\r\n type: filter.type,\r\n value: {\r\n key: filter.key,\r\n type: filter.type,\r\n value: filter.value,\r\n } as DataTableContextFilters,\r\n };\r\n\r\n dispatchAction(actions.SET_FILTERS, payload);\r\n\r\n if (index === filtersRef.current.length - 1) {\r\n resolve(true);\r\n }\r\n })\r\n );\r\n };\r\n\r\n const resetFilters = () =>\r\n filtersRef.current.forEach((filter) => {\r\n const payload: DataTableActionPayload = {\r\n type: filter.type,\r\n value: {\r\n key: filter.key,\r\n type: filter.type,\r\n value: filter.value,\r\n } as DataTableContextFilters,\r\n };\r\n\r\n dispatchAction(actions.SET_FILTERS, payload);\r\n });\r\n\r\n const resetFilter = (key: string) => {\r\n let defaultValue: any;\r\n\r\n const stored = findWhere(filtersRef.current, { key });\r\n if (stored) {\r\n defaultValue = stored.value;\r\n }\r\n\r\n setFilter(key, stored?.type as FilterType, defaultValue!);\r\n };\r\n\r\n var store: DataTableContextType = {\r\n state,\r\n setPageNumber,\r\n setPageSize,\r\n toggleFilters,\r\n resetPageNumber,\r\n resetPageSize,\r\n resetContext,\r\n setFilter,\r\n resetFilters,\r\n resetFiltersAsync,\r\n resetFilter,\r\n };\r\n\r\n return {children};\r\n};\r\n\r\nexport default DataTableContextProvider;\r\n\r\nexport const useDataTableContext = () => {\r\n const dataTableContext = useContext(DataTableContext);\r\n\r\n return dataTableContext;\r\n};\r\n","import React from \"react\";\r\nimport IChildren from \"../../interfaces/IChildren\";\r\nimport styled from \"styled-components\";\r\nimport { isEmpty } from \"underscore\";\r\nimport { Container } from \"@material-ui/core\";\r\nimport { variables } from \"../../theme/variables\";\r\nimport ContainerArrowUp from \"../ContainerArrowUp/ContainerArrowUp\";\r\n\r\nconst { colors } = variables;\r\n\r\ninterface ISectionProps extends IChildren {\r\n backgroundColor?: string;\r\n border?: boolean;\r\n boxShadow?: boolean;\r\n withArrow?: boolean;\r\n left?: number;\r\n right?: number;\r\n}\r\n\r\nconst StyledContainer = styled(Container)`\r\n max-width: 100%;\r\n padding: 1.5rem;\r\n`;\r\n\r\nconst StyledSection = styled.section`\r\n width: 100%;\r\n\r\n ${(props: ISectionProps) =>\r\n props.border &&\r\n `\r\nborder-top: 1px solid ${colors.veryLightGray};\r\nborder-bottom: 1px solid ${colors.veryLightGray};\r\n`}\r\n\r\n ${(props: ISectionProps) =>\r\n props.boxShadow &&\r\n `\r\nbox-shadow: 0px 1px 3px ${colors.veryLightGraySecondary};\r\n`}\r\n\r\nbackground-color: ${(props: ISectionProps) =>\r\n !isEmpty(props.backgroundColor) ? props.backgroundColor : \"unset\"};\r\n`;\r\n\r\nconst Section = (props: ISectionProps) => {\r\n const { children, withArrow, left, right } = props;\r\n\r\n if (!withArrow) {\r\n return (\r\n \r\n \r\n <>{children}\r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n <>{children}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Section;\r\n","import React from \"react\";\r\nimport { InputLabel, InputLabelProps } from \"@material-ui/core\";\r\nimport { variables } from \"../../theme/variables\";\r\nimport styled from \"styled-components\";\r\n\r\nconst { colors, typography } = variables;\r\n\r\ninterface IRequiredLabelProps extends InputLabelProps {\r\n fontSize?: string;\r\n}\r\n\r\nconst RequiredSpan = styled.span`\r\n font-size: ${(props: IRequiredLabelProps) => props.fontSize || typography.fontSizeBase};\r\n color: ${colors.darkRed};\r\n`;\r\n\r\nconst StyledInputLabel = styled(InputLabel)`\r\n font-size: ${(props: IRequiredLabelProps) => props.fontSize || typography.fontSizeBase};\r\n`;\r\n\r\nconst RequiredInputLabel = (props: IRequiredLabelProps) => (\r\n \r\n {props.children}\r\n *\r\n \r\n);\r\n\r\nexport default RequiredInputLabel;\r\n","import FutT from \"./fonts/Futura-Book.woff2\";\r\nimport FutD from \"./fonts/Futura-Demi.woff2\";\r\n\r\nconst FuturaT = {\r\n fontFamily: \"FuturaT\",\r\n fontStyle: \"normal\",\r\n fontWeight: 400,\r\n src: `\r\n local('FuturaT'),\r\n local('FutT'),\r\n url(${FutT}) format('woff2')\r\n `,\r\n};\r\n\r\nconst FuturaD = {\r\n fontFamily: \"FuturaD\",\r\n fontStyle: \"normal\",\r\n fontWeight: 400,\r\n src: `\r\n local('FuturaD'),\r\n local('FutD'),\r\n url(${FutD}) format('woff2')\r\n `,\r\n};\r\n\r\nexport const Fonts = {\r\n FuturaT,\r\n FuturaD,\r\n};\r\n","import React from \"react\";\r\nimport IChildren from \"../../interfaces/IChildren\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../theme/variables\";\r\nimport { Fonts } from \"../../typography\";\r\n\r\nconst { colors, typography, whiteSpaces } = variables;\r\nconst { FuturaT } = Fonts;\r\n\r\ninterface IHeadingProps extends IChildren {\r\n fontSize?: string;\r\n justifyContent?: \"flex-start\" | \"flex-end\" | \"center\";\r\n width?: string;\r\n required?: boolean;\r\n showCounter?: boolean;\r\n count?: number;\r\n}\r\n\r\nconst StyledStrong = styled.strong`\r\n font-size: ${(props: IHeadingProps) => props.fontSize || typography.fontSizeBase};\r\n color: ${colors.black};\r\n width: ${(props: IHeadingProps) => props.width || \"100%\"};\r\n display: flex;\r\n align-items: center;\r\n justify-content: ${(props: IHeadingProps) => props.justifyContent};\r\n`;\r\n\r\nconst RequiredSpan = styled.span`\r\n font-size: ${(props: IHeadingProps) => props.fontSize || typography.fontSizeBase};\r\n color: ${colors.darkRed};\r\n`;\r\n\r\nconst Counter = styled.span`\r\n font-size: ${(props: IHeadingProps) => props.fontSize || typography.fontSizeBase};\r\n font-family: ${FuturaT.fontFamily};\r\n color: ${colors.black};\r\n margin-left: ${whiteSpaces.xs};\r\n &:before {\r\n content: \"(\";\r\n }\r\n &:after {\r\n content: \")\";\r\n }\r\n`;\r\n\r\nconst Heading = (props: IHeadingProps) => (\r\n \r\n {props.children}\r\n {props.required && *}\r\n {props.showCounter && {props.count}}\r\n \r\n);\r\n\r\nHeading.defaultProps = {\r\n justifyContent: \"flex-start\",\r\n};\r\n\r\nexport default Heading;\r\n","import React from \"react\";\r\nimport { TextFieldProps, TextField, InputAdornment, Tooltip } from \"@material-ui/core\";\r\nimport { ErrorOutline } from \"@material-ui/icons\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../theme/variables\";\r\n\r\nconst { colors } = variables;\r\n\r\nconst StyledErrorOutline = styled(ErrorOutline)`\r\n fill: ${colors.red.hex};\r\n width: 18px;\r\n`;\r\n\r\nconst CustomInput = (props: TextFieldProps) => ;\r\n\r\nconst Required = (props: TextFieldProps) => (\r\n \r\n \r\n \r\n ),\r\n }}\r\n />\r\n);\r\n\r\nconst RequiredWithTooltip = (props: CustomInputProps) => (\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n }}\r\n />\r\n);\r\n\r\nCustomInput.Required = Required;\r\nCustomInput.RequiredWithTooltip = RequiredWithTooltip;\r\n\r\nexport type CustomInputProps = TextFieldProps & {\r\n tooltip: string;\r\n}\r\n\r\nexport default CustomInput;\r\n","import React from \"react\";\r\nimport { Tooltip } from \"@material-ui/core\";\r\nimport { CheckCircleOutline, RemoveCircleOutline } from \"@material-ui/icons\";\r\n\r\ninterface IProps {\r\n showSelectAll: boolean;\r\n selectAllTooltipText: string;\r\n deselectAllTooltipText: string;\r\n selectAllText: string;\r\n deselectAllText: string;\r\n onSelectAll: () => void;\r\n onDeselectAll: () => void;\r\n}\r\n\r\nconst ToggleSelectAll = (props: IProps) => (\r\n \r\n
\r\n {props.showSelectAll ? (\r\n \r\n ) : (\r\n \r\n )}\r\n  \r\n (props.showSelectAll ? props.onDeselectAll() : props.onSelectAll())}\r\n role=\"button\"\r\n >\r\n {props.showSelectAll ? props.deselectAllText : props.selectAllText}\r\n \r\n
\r\n \r\n);\r\n\r\nexport default ToggleSelectAll;\r\n","import React from \"react\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../theme/variables\";\r\n\r\nconst { colors } = variables;\r\n\r\ninterface ICircleImageProps {\r\n src?: string;\r\n height?: number;\r\n children?: React.ReactNode;\r\n}\r\n\r\nconst Wrapper = styled.div`\r\n background-color: ${colors.white};\r\n box-shadow: 0px 10px 24px ${colors.lightGrayishBlue.hex};\r\n padding: 0.5rem;\r\n border-radius: 100%;\r\n width: ${({ height }: ICircleImageProps) => height}px;\r\n height: ${({ height }: ICircleImageProps) => height}px;\r\n overflow: hidden;\r\n`;\r\n\r\nconst ImageContainer = styled.div`\r\n background-image: ${({ src }: ICircleImageProps) => `url(${src})`};\r\n border: 1px solid ${colors.lightGrayishBlue.hex};\r\n background-color: ${colors.veryLightGraySecondary};\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n background-size: cover;\r\n border-radius: 100%;\r\n height: 100%;\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n`;\r\n\r\nconst CircleImage = (props: ICircleImageProps) => (\r\n \r\n {props.children}\r\n \r\n);\r\n\r\nCircleImage.defaultProps = {\r\n height: 208,\r\n children: <>,\r\n};\r\n\r\nexport default CircleImage;\r\n","import React from \"react\";\r\nimport { Grid, Box } from \"@material-ui/core\";\r\nimport IChildren from \"../../../interfaces/IChildren\";\r\n\r\ninterface IDataColProps extends IChildren {\r\n xs: any;\r\n}\r\n\r\ninterface IDataRowProps extends IChildren {\r\n disabled?: boolean;\r\n}\r\n\r\nconst Data = () => {};\r\n\r\nconst Row = ({ disabled, children }: IDataRowProps) => (\r\n \r\n {disabled && }\r\n {children}\r\n \r\n);\r\n\r\nconst Col = ({ xs, children }: IDataColProps) => (\r\n \r\n {children}\r\n \r\n);\r\n\r\nData.Row = Row;\r\nData.Col = Col;\r\n\r\nexport default Data;\r\n","import React from \"react\";\r\nimport { Checkbox, CheckboxProps } from \"@material-ui/core\";\r\nimport styled from \"styled-components\";\r\nimport { Check } from \"@material-ui/icons\";\r\nimport { variables } from \"../../theme/variables\";\r\n\r\nconst { colors } = variables;\r\n\r\nconst StyledCheck = styled(Check)`\r\n width: 0.6em;\r\n height: 0.6em;\r\n border: 1px solid ${colors.veryLightGraySecondary};\r\n border-radius: 4px;\r\n color: transparent;\r\n background-color: ${colors.white};\r\n &:hover {\r\n background: none;\r\n }\r\n`;\r\n\r\nconst StyledCheckbox = styled(Checkbox)`\r\n padding: 0;\r\n`;\r\n\r\nconst Checked = styled(StyledCheck)`\r\n color: ${colors.red.hex};\r\n`;\r\n\r\nconst FlexSpan = styled.span`\r\n display: flex;\r\n flex-flow: row nowrap;\r\n align-items: center;\r\n width: 100%;\r\n`;\r\n\r\nconst EllipsedSpan = styled.span`\r\n font-size: 16px;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n margin-left: 8px;\r\n`;\r\n\r\nexport interface ICheckboxProps {\r\n label?: string;\r\n className?: string;\r\n checkboxProps?: CheckboxProps;\r\n}\r\n\r\nconst CustomCheckbox = ({\r\n label,\r\n checkboxProps,\r\n className,\r\n}: ICheckboxProps) => (\r\n \r\n }\r\n checkedIcon={}\r\n {...checkboxProps}\r\n />\r\n {label && {label}}\r\n \r\n);\r\n\r\nexport default CustomCheckbox;\r\n","import styled from \"styled-components\";\r\nimport { variables } from \"../../theme/variables\";\r\n\r\nconst { colors, typography } = variables;\r\n\r\nexport const StyledChip = styled.div`\r\n border: 1px solid ${colors.grayishBlue.hex};\r\n background-color: ${colors.mostlyWhite};\r\n font-size: ${typography.fontSizeSmaller};\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 3px 10px;\r\n border-radius: 500px;\r\n max-width: 70%;\r\n margin: 0 3px;\r\n`;\r\n\r\nexport const StyledSpan = styled.span`\r\n display: block;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n`;","import React from \"react\";\r\nimport { StyledChip, StyledSpan } from \"./QParkChip.styledcomponents\";\r\nimport { QParkChipProps, QParkNumberedChipProps } from \"./QParkChip.types\";\r\n\r\nconst Labeled = ({ label }: QParkChipProps) => (\r\n \r\n {label} \r\n \r\n);\r\n\r\nconst Numbered = ({ count }: QParkNumberedChipProps) => (\r\n \r\n {`+${count}`}\r\n \r\n);\r\n\r\nexport const QParkChip = {\r\n Labeled,\r\n Numbered,\r\n};\r\n","export const request = (type: string) => `${type}_REQUEST`;\r\nexport const success = (type: string) => `${type}_SUCCESS`;\r\nexport const failure = (type: string) => `${type}_FAILURE`;\r\n","export const environmentTypes = {\r\n GET_ENVIRONMENT: \"GET_ENVIRONMENT\",\r\n GET_VERSION: \"GET_VERSION\",\r\n GET_PORTAL_STATUS: \"GET_PORTAL_STATUS\",\r\n\r\n GET_FEATURE_FLAGS_AND_DYNAMIC_CONFIGURATIONS: \"GET_FEATURE_FLAGS_AND_DYNAMIC_CONFIGURATIONS\",\r\n GET_ALLOW_IMPERSONATION: \"GET_ALLOW_IMPERSONATION\",\r\n GET_ENABLE_VISITOR_BOOKING: \"GET_ENABLE_VISITOR_BOOKING\",\r\n};\r\n","import { success } from \"../helpers/action.helper\";\r\nimport { environmentTypes } from \"../action-types/environment.types\";\r\nimport { EnvironmentActionType } from \"../actions/environment.actions\";\r\nimport { FeatureFlag } from \"../../types/FeatureFlag\";\r\nimport { DynamicConfiguration } from \"../../types/DynamicConfiguration\";\r\nimport { FeatureFlagsAndDynamicConfiguration } from \"../../types/FeatureFlagsAndDynamicConfiguration\";\r\n\r\nexport type EnvironmentState = {\r\n environment: string;\r\n version: string;\r\n portalDeactivated: boolean;\r\n featureFlags: FeatureFlag[];\r\n dynamicConfigurations: DynamicConfiguration[];\r\n allowImpersonation: boolean;\r\n};\r\n\r\nconst initialState: EnvironmentState = {\r\n environment: \"\",\r\n version: \"\",\r\n portalDeactivated: false,\r\n featureFlags: [],\r\n dynamicConfigurations: [],\r\n allowImpersonation: false,\r\n};\r\n\r\nexport default (\r\n state: EnvironmentState = initialState,\r\n action: EnvironmentActionType\r\n): EnvironmentState => {\r\n switch (action.type) {\r\n case success(environmentTypes.GET_ENVIRONMENT):\r\n return {\r\n ...state,\r\n environment: action.payload as string,\r\n };\r\n case success(environmentTypes.GET_VERSION):\r\n return {\r\n ...state,\r\n version: action.payload as string,\r\n };\r\n case success(environmentTypes.GET_PORTAL_STATUS):\r\n return {\r\n ...state,\r\n portalDeactivated: action.payload as boolean,\r\n };\r\n case success(environmentTypes.GET_FEATURE_FLAGS_AND_DYNAMIC_CONFIGURATIONS):\r\n { \r\n const featureFlagsAndDynamicConfiguration = action.payload as FeatureFlagsAndDynamicConfiguration;\r\n return {\r\n ...state,\r\n featureFlags: featureFlagsAndDynamicConfiguration.featureFlags,\r\n dynamicConfigurations: featureFlagsAndDynamicConfiguration.dynamicConfigurations,\r\n }\r\n }\r\n case success(environmentTypes.GET_ALLOW_IMPERSONATION):\r\n return {\r\n ...state,\r\n allowImpersonation: action.payload as boolean,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","export const parkingProductsTypes = {\r\n GET_PARKING_PRODUCTS: \"GET_PARKING_PRODUCTS\",\r\n GET_LOCATED_PARKING_PRODUCTS: \"GET_LOCATED_PARKING_PRODUCTS\",\r\n GET_DELEGATED_PARKING_RIGHTS: \"GET_DELEGATED_PARKING_RIGHTS\",\r\n GET_ASSIGNED_VEHICLES: \"GET_ASSIGNED_VEHICLES\",\r\n ASSIGN_VEHICLE: 'ASSIGN_VEHICLE',\r\n DELEGATE_PARKING_RIGHTS: \"DELEGATE_PARKING_RIGHTS\",\r\n UPDATE_DELEGATION: \"UPDATE_DELEGATION\",\r\n DELETE_DELEGEE: \"DELETE_DELEGEE\",\r\n GET_DELEGEE_DETAILS: \"GET_DELEGEE_DETAILS\",\r\n CLEAR_DELEGEE_DETAILS: \"CLEAR_DELEGEE_DETAILS\",\r\n DISPOSE_ERROR: \"DISPOSE_ERROR\",\r\n RESEND_DELEGEE_INVITE: \"RESEND_DELEGEE_INVITE\",\r\n REVOKE_PARKINGRIGHTS: \"REVOKE_PARKINGRIGHTS\",\r\n GET_DELEGEES: \"GET_DELEGEES\",\r\n DELETE_DELEGEES: \"DELETE_DELEGEES\",\r\n IMPORT_DELEGEES: \"IMPORT_DELEGEES\",\r\n VALIDATE_DELEGEES: \"VALIDATE_DELEGEES\",\r\n GET_BULK_IMPORT_PROGRESS: \"GET_BULK_IMPORT_PROGRESS\",\r\n GET_BULK_IMPORT_STATUS: \"GET_BULK_IMPORT_STATUS\",\r\n RESET_BULK_UPLOAD_PROGRESS: \"RESET_BULK_UPLOAD_PROGRESS\",\r\n UPDATE_VEHICLE_ASSIGNMENT: \"UPDATE_VEHICLE_ASSIGNMENT\",\r\n GET_ASSIGNED_VEHICLE: \"GET_ASSIGNED_VEHICLE\",\r\n REVOKE_VEHICLE_ASSIGNMENTS: \"REVOKE_VEHICLE_ASSIGNMENTS\",\r\n GET_VEHICLE_ASSIGNMENTS_MY_FLEET: \"GET_VEHICLE_ASSIGNMENTS_MY_FLEET\",\r\n DELETE_VEHICLE_ASSIGNMENTS: \"DELETE_VEHICLE_ASSIGNMENTS\",\r\n CALCULATE_WHITELIST_DELTA: \"CALCULATE_WHITELIST_DELTA\",\r\n START_BULK_VEHICLE_ASSIGNMENT: \"START_BULK_VEHICLE_ASSIGNMENT\",\r\n};\r\n","import { findWhere, indexOf, isEmpty, isEqual, isUndefined } from \"underscore\";\r\nimport { LocatedParkingProduct } from \"../../models/LocatedParkingProduct\";\r\nimport { ParkingProductsActionType } from \"../actions/parkingProducts.actions\";\r\nimport { ParkingProductState } from \"../reducers/parkingProducts.reducer\";\r\n\r\ntype ParkingProductsReducerHelper = {\r\n getLocatedParkingProductsState: (\r\n state: ParkingProductState,\r\n action: ParkingProductsActionType\r\n ) => ParkingProductState;\r\n getLocatedParkingProductsData: (state: ParkingProductState) => LocatedParkingProduct[];\r\n};\r\n\r\nconst parkingProductsReducerHelper: ParkingProductsReducerHelper = (() => {\r\n const _getRefreshedLocatedParkingProducts = (\r\n currentState: LocatedParkingProduct[],\r\n newState: LocatedParkingProduct[]\r\n ) => {\r\n const updated = newState;\r\n const current = currentState;\r\n\r\n updated?.forEach((entity) => {\r\n let found = findWhere(current, { placeId: entity.placeId });\r\n\r\n if (!isUndefined(found) && !isEqual(entity, found)) {\r\n const index = indexOf(current, found);\r\n current[index] = entity;\r\n }\r\n });\r\n\r\n return updated;\r\n };\r\n\r\n const getLocatedParkingProductsState = (\r\n state: ParkingProductState,\r\n action: ParkingProductsActionType\r\n ): ParkingProductState => {\r\n if (!isEmpty(state.locatedParkingProducts.data)) {\r\n const updated = _getRefreshedLocatedParkingProducts(\r\n state.locatedParkingProducts.data!,\r\n action.locatedParkingProductsPayload!\r\n );\r\n return {\r\n ...state,\r\n locatedParkingProducts: {\r\n ...state.locatedParkingProducts,\r\n data: updated,\r\n loading: false,\r\n },\r\n hasUnlimitedEntryRights: action.locatedParkingProductsPayload!.some(l => l.parkingProducts.some(p => p.hasUnlimitedEntryRights)),\r\n };\r\n }\r\n\r\n return {\r\n ...state,\r\n locatedParkingProducts: {\r\n ...state.locatedParkingProducts,\r\n data: action.locatedParkingProductsPayload,\r\n loading: false,\r\n },\r\n hasUnlimitedEntryRights: action.locatedParkingProductsPayload!.some(l => l.parkingProducts.some(p => p.hasUnlimitedEntryRights)),\r\n };\r\n };\r\n\r\n const getLocatedParkingProductsData = (state: ParkingProductState): LocatedParkingProduct[] => {\r\n if (isEmpty(state.locatedParkingProducts.data)) {\r\n return [];\r\n }\r\n\r\n return state.locatedParkingProducts.data as LocatedParkingProduct[];\r\n };\r\n\r\n return {\r\n getLocatedParkingProductsState,\r\n getLocatedParkingProductsData,\r\n };\r\n})();\r\n\r\nexport default parkingProductsReducerHelper;\r\n","import { isNil, mapValues, sumBy } from \"lodash\";\r\nimport { GetVehicleAssignmentsQuery } from \"../../api/parkingProducts.api\";\r\nimport { AssignedVehicleSuccessfulMutation } from \"../../models/vehicle-assignments/AssignedVehicleSuccessfulMutation\";\r\nimport { AssignVehicleRequestModel } from \"../../models/vehicle-assignments/AssignVehicleRequestModel\";\r\nimport {\r\n AssignedParkingRight,\r\n VehicleAssignment,\r\n VehicleAssignmentProduct,\r\n} from \"../../models/delegations/DelegatedParkingProductsModel\";\r\nimport { LocatedParkingProduct } from \"../../models/LocatedParkingProduct\";\r\nimport { UpdateVehicleRequestModel } from \"../../models/vehicle-assignments/UpdateVehicleRequestModel\";\r\nimport {\r\n ParkingProductState,\r\n VehicleAssignmentsMyFleetState,\r\n VehiclesMyProductsState as VehicleAssignmentMyProductsState,\r\n} from \"../reducers/parkingProducts.reducer\";\r\nimport { isEmpty } from \"underscore\";\r\nimport { RevokeVehicleAssignmentsModel } from \"../../models/vehicle-assignments/RevokeVehicleAssignmentsModel\";\r\nimport { ParkingRightItemModel } from \"../../models/vehicle-assignments/ParkingRightItemModel\";\r\n\r\nfunction reduceUpdate(\r\n state: ParkingProductState,\r\n aggregateId: string,\r\n update: UpdateVehicleRequestModel,\r\n pmcToParkingRightStartDates: Record\r\n): ParkingProductState {\r\n const revokedPmcIds = state.selectedVehicleAssignment\r\n .data!.assignedProducts.map((x) => x.pmcId)\r\n .filter((assignedPmc) => !update.pmcIds.includes(assignedPmc));\r\n const assignedPmcIds = update.pmcIds.filter(\r\n (pmcId) =>\r\n !state.selectedVehicleAssignment.data!.assignedProducts.some(\r\n (assignedProduct) => assignedProduct.pmcId === pmcId\r\n )\r\n );\r\n\r\n const newLocatedParkingProducts = incrementTotalAssignedCount(\r\n state.locatedParkingProducts.data!,\r\n Object.fromEntries([\r\n ...revokedPmcIds.map((revokedPmc) => [revokedPmc, -1]),\r\n ...assignedPmcIds.map((assignedPmcId) => [assignedPmcId, 1]),\r\n ])\r\n );\r\n\r\n const newMyProductsVehicles = reduceMyProductsVehiclesState(\r\n state.vehiclesMyProducts,\r\n state.locatedParkingProducts.data!,\r\n aggregateId,\r\n update,\r\n pmcToParkingRightStartDates\r\n );\r\n\r\n const newMyFleetVehicles = reduceMyFleetVehiclesStateUpdate(\r\n state.vehicleAssignmentsMyFleet,\r\n state.locatedParkingProducts.data!,\r\n aggregateId,\r\n update\r\n );\r\n\r\n return {\r\n ...state,\r\n locatedParkingProducts: {\r\n ...state.locatedParkingProducts,\r\n data: newLocatedParkingProducts,\r\n },\r\n vehiclesMyProducts: newMyProductsVehicles,\r\n vehicleAssignmentsMyFleet: newMyFleetVehicles,\r\n };\r\n}\r\n\r\nfunction incrementTotalAssignedCount(\r\n locations: LocatedParkingProduct[],\r\n pmcIdToAmount: { [pmcId: number]: number }\r\n): LocatedParkingProduct[] {\r\n return locations.map((location): LocatedParkingProduct => {\r\n const newParkingProducts = location.parkingProducts.map((parkingProduct) => {\r\n const amount = pmcIdToAmount[parkingProduct.pmcId!];\r\n if (amount) {\r\n return {\r\n ...parkingProduct,\r\n totalAssignedParkingRights: parkingProduct.totalAssignedParkingRights! + amount,\r\n };\r\n }\r\n return parkingProduct;\r\n });\r\n\r\n const totalAssignedParkingRights = sumBy(newParkingProducts, x => x.totalAssignedParkingRights!);\r\n\r\n return {\r\n ...location,\r\n totalAssignedParkingRights,\r\n parkingProducts: newParkingProducts,\r\n };\r\n });\r\n}\r\n\r\nfunction vehicleAssignmentMatchesQuery(\r\n vehicleAssignment: VehicleAssignment,\r\n query: GetVehicleAssignmentsQuery\r\n): boolean {\r\n return (\r\n (isNil(query.description) ||\r\n isEmpty(query.description) ||\r\n (!isNil(vehicleAssignment.vehicle.description) &&\r\n vehicleAssignment.vehicle.description\r\n .toLowerCase()\r\n .includes(query.description.toLowerCase()))) &&\r\n (isNil(query.numberPlateValue) ||\r\n isEmpty(query.numberPlateValue) ||\r\n vehicleAssignment.vehicle.identifier.includes(query.numberPlateValue.toUpperCase())) &&\r\n (isNil(query.pmcIds) ||\r\n isEmpty(query.pmcIds) ||\r\n vehicleAssignment.products.some((p) => query.pmcIds!.includes(p.pmcId))) &&\r\n (isNil(query.assignedDateStart) ||\r\n new Date(query.assignedDateStart).getTime() <= vehicleAssignment.assignedAt.getTime()) &&\r\n (isNil(query.assignedDateEnd) ||\r\n vehicleAssignment.assignedAt.getTime() <= new Date(query.assignedDateEnd).getTime())\r\n );\r\n}\r\n\r\nfunction assignedParkingRightMatchesQuery(\r\n assignedParkingRight: AssignedParkingRight,\r\n query: GetVehicleAssignmentsQuery,\r\n getPlaceId: (pmc: number) => number\r\n): boolean {\r\n return (\r\n query.placeId === getPlaceId(assignedParkingRight.parkingRight.pmc) &&\r\n (isNil(query.description) ||\r\n isEmpty(query.description) ||\r\n (!isNil(assignedParkingRight.vehicle.description) &&\r\n assignedParkingRight.vehicle.description\r\n .toLowerCase()\r\n .includes(query.description.toLowerCase()))) &&\r\n (isNil(query.numberPlateValue) ||\r\n isEmpty(query.numberPlateValue) ||\r\n assignedParkingRight.vehicle.identifier.includes(query.numberPlateValue.toUpperCase())) &&\r\n (isNil(query.pmcIds) ||\r\n isEmpty(query.pmcIds) ||\r\n query.pmcIds.includes(assignedParkingRight.parkingRight.pmc)) &&\r\n (isNil(query.assignedDateStart) ||\r\n new Date(query.assignedDateStart).getTime() <= assignedParkingRight.assigned.getTime()) &&\r\n (isNil(query.assignedDateEnd) ||\r\n assignedParkingRight.assigned.getTime() <= new Date(query.assignedDateEnd).getTime()) &&\r\n (isNil(query.StartedDateStart) || (!isNil(assignedParkingRight.startedAt) &&\r\n new Date(query.StartedDateStart).getTime() <= assignedParkingRight.startedAt.getTime())) &&\r\n (isNil(query.StartedDateEnd) || (!isNil(assignedParkingRight.startedAt) &&\r\n assignedParkingRight.startedAt.getTime() <= new Date(query.StartedDateEnd).getTime()))\r\n );\r\n}\r\n\r\nfunction reduceMyFleetVehiclesStateUpdate(\r\n state: VehicleAssignmentsMyFleetState,\r\n locatedParkingProducts: LocatedParkingProduct[],\r\n aggregateId: string,\r\n update: UpdateVehicleRequestModel\r\n): VehicleAssignmentsMyFleetState {\r\n const createFakeProduct = (pmcId: number): VehicleAssignmentProduct => {\r\n const { name, location } = getProductInfo(locatedParkingProducts, pmcId);\r\n\r\n return {\r\n pmcId,\r\n locationName: location,\r\n pmcName: name,\r\n parkingRightId: `pr id for ${pmcId}`,\r\n };\r\n };\r\n\r\n let rowsAdded = 0;\r\n\r\n const newPages = mapValues(state.pages, (page) => {\r\n const rowIndex = page.data!.findIndex((r) => r.vehicleAssignmentId === aggregateId);\r\n\r\n if (rowIndex === -1) {\r\n const newFreshRow: VehicleAssignment = {\r\n vehicleAssignmentId: aggregateId,\r\n vehicle: {\r\n countryCode: update.numberPlate.countryCode,\r\n identifier: update.numberPlate.value,\r\n description: update.description,\r\n },\r\n products: update.pmcIds.map(createFakeProduct),\r\n assignedAt: new Date(),\r\n };\r\n\r\n if (vehicleAssignmentMatchesQuery(newFreshRow, page.query)) {\r\n rowsAdded++;\r\n return {\r\n ...page,\r\n data: [newFreshRow, ...page.data!],\r\n };\r\n }\r\n\r\n return page;\r\n }\r\n const row = page.data![rowIndex];\r\n const productsToAdd: VehicleAssignmentProduct[] = update.pmcIds\r\n .filter((updatePmc) => !row.products.some((rowProduct) => rowProduct.pmcId === updatePmc))\r\n .map(createFakeProduct);\r\n\r\n const updatedRow: VehicleAssignment = {\r\n ...row,\r\n vehicle: {\r\n ...row.vehicle,\r\n description: update.description,\r\n },\r\n products: row.products.filter((p) => update.pmcIds.includes(p.pmcId)).concat(productsToAdd),\r\n };\r\n\r\n if (!vehicleAssignmentMatchesQuery(updatedRow, page.query)) {\r\n return {\r\n ...page,\r\n data: page.data!.filter((_, index) => index !== rowIndex),\r\n };\r\n }\r\n\r\n return {\r\n ...page,\r\n data: page.data!.with(rowIndex, updatedRow),\r\n };\r\n });\r\n\r\n return {\r\n ...state,\r\n pages: newPages,\r\n totalRecords: state.totalRecords + rowsAdded\r\n };\r\n}\r\n\r\nfunction reduceMyProductsVehiclesState(\r\n vehicles: VehicleAssignmentMyProductsState,\r\n locatedParkingProducts: LocatedParkingProduct[],\r\n aggregateId: string,\r\n model: UpdateVehicleRequestModel,\r\n pmcToParkingRightStartDates?: Record\r\n): VehicleAssignmentMyProductsState {\r\n const fakeRows: AssignedParkingRight[] = model.pmcIds.map((pmcId) => {\r\n const { name, location } = getProductInfo(locatedParkingProducts, pmcId);\r\n \r\n let startedAt = undefined as Date | undefined;\r\n if(pmcToParkingRightStartDates){\r\n startedAt = pmcToParkingRightStartDates[pmcId].parkingRightStartedDate\r\n }\r\n\r\n return createFakeAssignedParkingRight(aggregateId, model, pmcId, name, location, startedAt);\r\n });\r\n\r\n const newPagesWithAddedCount = mapValues(vehicles.pages, (page) => {\r\n const updatedRows = page\r\n .data!.filter(\r\n (p) => p.vehicleAssignmentId === aggregateId && model.pmcIds.includes(p.parkingRight.pmc)\r\n )\r\n .map((x) => ({\r\n ...x,\r\n vehicle: {\r\n ...x.vehicle,\r\n description: model.description,\r\n },\r\n }));\r\n\r\n const rowsToAdd = fakeRows.filter(\r\n (row) =>\r\n !updatedRows.some(\r\n (updateRow) =>\r\n updateRow.vehicleAssignmentId === row.vehicleAssignmentId &&\r\n row.parkingRight.pmc === updateRow.parkingRight.pmc\r\n ) &&\r\n assignedParkingRightMatchesQuery(\r\n row,\r\n page.query,\r\n (pmc) => getProductInfo(locatedParkingProducts, pmc).placeId\r\n )\r\n );\r\n\r\n const rowsToRemove = page.data!.filter(\r\n (x) => x.vehicleAssignmentId === aggregateId && !model.pmcIds.includes(x.parkingRight.pmc)\r\n );\r\n\r\n const data = [\r\n ...rowsToAdd,\r\n ...page.data!.flatMap((row) => {\r\n if (rowsToRemove.includes(row)) {\r\n return [];\r\n }\r\n\r\n const updatedRow = updatedRows.find(\r\n (ur) =>\r\n ur.vehicleAssignmentId === row.vehicleAssignmentId &&\r\n ur.parkingRight.pmc === row.parkingRight.pmc\r\n );\r\n\r\n if (updatedRow) {\r\n return [updatedRow];\r\n }\r\n\r\n return [row];\r\n }),\r\n ];\r\n\r\n const newPage: typeof page = { ...page, data };\r\n return { page: newPage, rowsAddedCount: data.length - page.data!.length };\r\n });\r\n\r\n const newPages = mapValues(newPagesWithAddedCount, (x) => x.page);\r\n\r\n const newTotalRecords = vehicles.totalRecords + sumBy(Object.values(newPagesWithAddedCount), x => x.rowsAddedCount);\r\n return { ...vehicles, totalRecords: newTotalRecords, pages: newPages };\r\n}\r\n\r\nfunction createFakeAssignedParkingRight(\r\n aggregateId: string,\r\n assign: UpdateVehicleRequestModel,\r\n pmcId: number,\r\n name: string,\r\n location: string,\r\n startDate?: Date\r\n): AssignedParkingRight {\r\n return {\r\n vehicleAssignmentId: aggregateId,\r\n parkingRight: {\r\n id: `fake pr id for pmc=${pmcId}`,\r\n pmc: pmcId,\r\n name,\r\n location,\r\n },\r\n assigned: new Date(),\r\n vehicle: {\r\n countryCode: assign.numberPlate.countryCode,\r\n identifier: assign.numberPlate.value,\r\n description: assign.description,\r\n },\r\n startedAt: startDate ?? null\r\n };\r\n}\r\n\r\nfunction reduceAssign(\r\n state: ParkingProductState,\r\n model: AssignVehicleRequestModel,\r\n pmcToParkingRightStartDates: Record\r\n): ParkingProductState {\r\n const newLocatedParkingProducts = incrementTotalAssignedCount(\r\n state.locatedParkingProducts.data!,\r\n Object.fromEntries(model.pmcIds.map((pmcId) => [pmcId, 1]))\r\n );\r\n\r\n const newMyProductsVehicles = reduceMyProductsVehiclesState(\r\n state.vehiclesMyProducts,\r\n state.locatedParkingProducts.data!,\r\n model.aggregateId,\r\n model,\r\n pmcToParkingRightStartDates\r\n );\r\n\r\n const newMyFleetVehicles = reduceMyFleetVehiclesStateUpdate(\r\n state.vehicleAssignmentsMyFleet,\r\n state.locatedParkingProducts.data!,\r\n model.aggregateId,\r\n model\r\n );\r\n\r\n return {\r\n ...state,\r\n locatedParkingProducts: {\r\n ...state.locatedParkingProducts,\r\n data: newLocatedParkingProducts,\r\n },\r\n vehiclesMyProducts: newMyProductsVehicles,\r\n vehicleAssignmentsMyFleet: newMyFleetVehicles,\r\n };\r\n}\r\n\r\nfunction getProductInfo(\r\n locations: LocatedParkingProduct[],\r\n pmcId: number\r\n): { location: string; name: string; placeId: number } {\r\n for (const location of locations) {\r\n for (const product of location.parkingProducts) {\r\n if (product.pmcId === pmcId) {\r\n return {\r\n location: product.location,\r\n name: product.pmcName,\r\n placeId: location.placeId,\r\n };\r\n }\r\n }\r\n }\r\n\r\n throw new Error(`Can't find product info for pmc ${pmcId}`);\r\n}\r\n\r\nexport function reduceVehicleAssignmentMutation(\r\n state: ParkingProductState,\r\n mutation: AssignedVehicleSuccessfulMutation\r\n): ParkingProductState {\r\n switch (mutation.type) {\r\n case \"update\":\r\n return reduceUpdate(state, mutation.aggregateId, mutation.request, mutation.pmcToParkingRightStartDates);\r\n case \"assign\":\r\n return reduceAssign(state, mutation.request, mutation.pmcToParkingRightStartDates);\r\n }\r\n}\r\n\r\nexport function reduceRevokeMyFleet(\r\n state: VehicleAssignmentsMyFleetState,\r\n revokeModel: RevokeVehicleAssignmentsModel\r\n): VehicleAssignmentsMyFleetState {\r\n const newPages = mapValues(state.pages, (page) => {\r\n const newData = page.data!.map((vehicle) => {\r\n const productsToRemove = vehicle.products.filter((vp) =>\r\n revokeModel.vehicleAssignmentProducts.some(\r\n (vap) => vap.vehicleAssignmentId === vehicle.vehicleAssignmentId && vap.pmcId === vp.pmcId\r\n )\r\n );\r\n if (productsToRemove.length === 0) {\r\n return vehicle;\r\n }\r\n return {\r\n ...vehicle,\r\n products: vehicle.products.filter((x) => !productsToRemove.includes(x)),\r\n };\r\n });\r\n return { ...page, data: newData };\r\n });\r\n\r\n return {\r\n ...state,\r\n pages: newPages,\r\n };\r\n}\r\n","import { ParkingProductModel } from \"../../models/ParkingProductModel\";\r\nimport { request, success, failure } from \"../helpers/action.helper\";\r\nimport { parkingProductsTypes } from \"../action-types/parkingProducts.types\";\r\nimport { ParkingProductsActionType } from \"../actions/parkingProducts.actions\";\r\nimport {\r\n DelegatedParkingRight,\r\n DelegeeWithProductsModel,\r\n AssignedParkingRight,\r\n VehicleAssignmentModel,\r\n VehicleAssignment,\r\n} from \"../../models/delegations/DelegatedParkingProductsModel\";\r\nimport { LocatedParkingProduct } from \"../../models/LocatedParkingProduct\";\r\nimport { ErrorDetailsModel } from \"../../models/ErrorDetailsModel\";\r\nimport parkingProductsReducerHelper from \"../helpers/parkingProductsReducer.helper\";\r\nimport { GetVehicleAssignmentsQuery } from \"../../api/parkingProducts.api\";\r\nimport { reduceVehicleAssignmentMutation, reduceRevokeMyFleet } from \"../helpers/dva-optimistic-updates\";\r\n\r\ntype Pending = {\r\n loading: boolean;\r\n};\r\n\r\ntype DataType = {\r\n loading: boolean;\r\n data?: T | null;\r\n error?: ErrorDetailsModel | null;\r\n};\r\n\r\ntype PagedDataType = {\r\n [page: number]: DataType;\r\n};\r\n\r\nexport type VehiclesMyProductsState = {\r\n totalPages: number;\r\n totalRecords: number;\r\n pages: {\r\n [page: number]: {\r\n loading: boolean;\r\n data?: AssignedParkingRight[] | null;\r\n error?: ErrorDetailsModel | null;\r\n query: GetVehicleAssignmentsQuery;\r\n };\r\n };\r\n};\r\n\r\nexport type VehicleAssignmentsMyFleetState = {\r\n totalPages: number;\r\n totalRecords: number;\r\n pages: {\r\n [page: number]: {\r\n loading: boolean;\r\n data?: VehicleAssignment[] | null;\r\n error?: ErrorDetailsModel | null;\r\n query: GetVehicleAssignmentsQuery;\r\n };\r\n };\r\n};\r\n\r\nexport type ParkingProductState = {\r\n loading: boolean;\r\n parkingProducts: DataType;\r\n locatedParkingProducts: DataType;\r\n delegatedParkingProducts: {\r\n totalPages: number;\r\n totalRecords: number;\r\n pages: PagedDataType | null;\r\n };\r\n delegees: {\r\n totalPages: number;\r\n totalRecords: number;\r\n pages: PagedDataType | null;\r\n };\r\n vehiclesMyProducts: VehiclesMyProductsState;\r\n vehicleAssignmentsMyFleet: VehicleAssignmentsMyFleetState;\r\n delegeeDetails: DataType;\r\n importDelegees: Pending;\r\n validateDelegees: Pending & {\r\n success?: boolean;\r\n fileReference?: string;\r\n };\r\n selectedVehicleAssignment: DataType\r\n bulkImportProgress: {\r\n progress: number;\r\n hasErrors: boolean;\r\n numberOfErrors: number;\r\n };\r\n isBulkImportCompleted: boolean;\r\n error: ErrorDetailsModel | null;\r\n hasUnlimitedEntryRights: boolean;\r\n calculatedWhitelistDelta: Pending & {\r\n amountOfVehiclesToUpdate: number;\r\n amountOfVehiclesToCreate: number;\r\n amountOfVehiclesToDelete: number;\r\n amountOfVehiclesWithNoChanges: number;\r\n hasChanges: boolean;\r\n fileReference: string;\r\n }\r\n bulkVehicleAssignment: Pending;\r\n};\r\n\r\nconst initialState: ParkingProductState = {\r\n loading: false,\r\n parkingProducts: {\r\n loading: false,\r\n data: [],\r\n error: null,\r\n },\r\n locatedParkingProducts: {\r\n loading: false,\r\n data: [],\r\n error: null,\r\n },\r\n delegatedParkingProducts: {\r\n totalPages: 0,\r\n totalRecords: 0,\r\n pages: null,\r\n },\r\n delegees: {\r\n totalPages: 0,\r\n totalRecords: 0,\r\n pages: null,\r\n },\r\n delegeeDetails: {\r\n loading: false,\r\n data: null,\r\n error: null,\r\n },\r\n importDelegees: {\r\n loading: false,\r\n },\r\n validateDelegees: {\r\n loading: false,\r\n },\r\n error: null,\r\n bulkImportProgress: {\r\n progress: 0,\r\n hasErrors: false,\r\n numberOfErrors: 0,\r\n },\r\n isBulkImportCompleted: true,\r\n vehiclesMyProducts: {\r\n pages: {},\r\n totalPages: 0,\r\n totalRecords: 0,\r\n }, \r\n vehicleAssignmentsMyFleet: {\r\n pages: {},\r\n totalPages: 0,\r\n totalRecords: 0,\r\n },\r\n selectedVehicleAssignment: {\r\n loading: false,\r\n },\r\n hasUnlimitedEntryRights: false,\r\n calculatedWhitelistDelta: {\r\n amountOfVehiclesToCreate: 0,\r\n amountOfVehiclesToDelete: 0,\r\n amountOfVehiclesToUpdate: 0,\r\n amountOfVehiclesWithNoChanges: 0,\r\n fileReference: \"\",\r\n hasChanges: false,\r\n loading: false\r\n },\r\n bulkVehicleAssignment: {\r\n loading: false,\r\n },\r\n};\r\n\r\nfunction reduceVehicleAssignmentUpdates(\r\n state: ParkingProductState,\r\n action: ParkingProductsActionType\r\n): ParkingProductState {\r\n switch (action.type) {\r\n case request(parkingProductsTypes.ASSIGN_VEHICLE):\r\n return { ...state, loading: true };\r\n\r\n case request(parkingProductsTypes.UPDATE_VEHICLE_ASSIGNMENT):\r\n return {\r\n ...state,\r\n loading: true,\r\n };\r\n case success(parkingProductsTypes.ASSIGN_VEHICLE):\r\n case success(parkingProductsTypes.UPDATE_VEHICLE_ASSIGNMENT): {\r\n const newState = reduceVehicleAssignmentMutation(state, action.assignedVehicleMutation!);\r\n return { ...state, ...newState, loading: false };\r\n }\r\n\r\n case failure(parkingProductsTypes.UPDATE_VEHICLE_ASSIGNMENT):\r\n case failure(parkingProductsTypes.ASSIGN_VEHICLE):\r\n return {\r\n ...state,\r\n loading: false,\r\n error: action.error as ErrorDetailsModel,\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nfunction reduceVehicles(vehicles: VehiclesMyProductsState, action: ParkingProductsActionType): VehiclesMyProductsState {\r\n let pageNumber: number;\r\n switch (action.type) {\r\n case request(parkingProductsTypes.GET_ASSIGNED_VEHICLES):\r\n pageNumber = action.assignedVehiclesProductsPayload?.pageNumber!;\r\n\r\n return {\r\n ...vehicles,\r\n pages: {\r\n ...vehicles.pages,\r\n [pageNumber]: {\r\n ...vehicles.pages[pageNumber],\r\n loading: true,\r\n query: action.assignedVehiclesProductsPayload?.query!,\r\n data: [],\r\n },\r\n },\r\n };\r\n\r\n case success(parkingProductsTypes.GET_ASSIGNED_VEHICLES):\r\n pageNumber = action.assignedVehiclesProductsPayload?.pageNumber!;\r\n return {\r\n ...vehicles,\r\n totalPages: action.assignedVehiclesProductsPayload?.totalPages as number,\r\n totalRecords: action.assignedVehiclesProductsPayload?.totalRecords as number,\r\n pages: {\r\n ...vehicles.pages,\r\n ...{\r\n [pageNumber]: {\r\n ...vehicles.pages[pageNumber],\r\n loading: false,\r\n data: action.assignedVehiclesProductsPayload?.payload,\r\n },\r\n },\r\n },\r\n };\r\n\r\n case failure(parkingProductsTypes.GET_ASSIGNED_VEHICLES):\r\n pageNumber = action.assignedVehiclesProductsPayload?.pageNumber as number;\r\n\r\n return {\r\n ...vehicles,\r\n pages: {\r\n ...vehicles.pages,\r\n ...{\r\n [pageNumber]: {\r\n ...vehicles.pages[pageNumber],\r\n data: [],\r\n loading: false,\r\n error: action.error,\r\n },\r\n },\r\n },\r\n };\r\n\r\n default:\r\n return vehicles;\r\n }\r\n}\r\n\r\nfunction reduceVehicleAssignmentsMyFleet(vehicleAssignments: VehicleAssignmentsMyFleetState, action: ParkingProductsActionType): VehicleAssignmentsMyFleetState {\r\n let pageNumber: number;\r\n switch (action.type) {\r\n case request(parkingProductsTypes.GET_VEHICLE_ASSIGNMENTS_MY_FLEET):\r\n pageNumber = action.vehicleAssigmentsMyFleetPayload?.pageNumber!;\r\n\r\n return {\r\n ...vehicleAssignments,\r\n pages: {\r\n ...vehicleAssignments.pages,\r\n [pageNumber]: {\r\n ...vehicleAssignments.pages[pageNumber],\r\n loading: true,\r\n data: [],\r\n query: action.vehicleAssigmentsMyFleetPayload?.query!,\r\n },\r\n },\r\n };\r\n\r\n case success(parkingProductsTypes.GET_VEHICLE_ASSIGNMENTS_MY_FLEET):\r\n pageNumber = action.vehicleAssigmentsMyFleetPayload?.pageNumber!;\r\n return {\r\n ...vehicleAssignments,\r\n totalPages: action.vehicleAssigmentsMyFleetPayload?.totalPages as number,\r\n totalRecords: action.vehicleAssigmentsMyFleetPayload?.totalRecords as number,\r\n pages: {\r\n ...vehicleAssignments.pages,\r\n ...{\r\n [pageNumber]: {\r\n ...vehicleAssignments.pages[pageNumber],\r\n loading: false,\r\n data: action.vehicleAssigmentsMyFleetPayload?.payload,\r\n },\r\n },\r\n },\r\n };\r\n\r\n case failure(parkingProductsTypes.GET_VEHICLE_ASSIGNMENTS_MY_FLEET):\r\n pageNumber = action.vehicleAssigmentsMyFleetPayload?.pageNumber as number;\r\n\r\n return {\r\n ...vehicleAssignments,\r\n pages: {\r\n ...vehicleAssignments.pages,\r\n ...{\r\n [pageNumber]: {\r\n ...vehicleAssignments.pages[pageNumber],\r\n data: [],\r\n loading: false,\r\n error: action.error,\r\n },\r\n },\r\n },\r\n };\r\n\r\n default:\r\n return vehicleAssignments;\r\n }\r\n}\r\n\r\nfunction reduceGlobalLoadingState(state: ParkingProductState, action: ParkingProductsActionType) : ParkingProductState {\r\n switch (action.type) {\r\n case request(parkingProductsTypes.DELEGATE_PARKING_RIGHTS):\r\n case request(parkingProductsTypes.UPDATE_DELEGATION):\r\n case request(parkingProductsTypes.RESEND_DELEGEE_INVITE):\r\n case request(parkingProductsTypes.REVOKE_PARKINGRIGHTS):\r\n case request(parkingProductsTypes.REVOKE_VEHICLE_ASSIGNMENTS):\r\n case request(parkingProductsTypes.DELETE_VEHICLE_ASSIGNMENTS):\r\n case request(parkingProductsTypes.DELETE_DELEGEES):\r\n case request(parkingProductsTypes.GET_BULK_IMPORT_STATUS):\r\n case request(parkingProductsTypes.GET_ASSIGNED_VEHICLE):\r\n return {\r\n ...state,\r\n selectedVehicleAssignment: {\r\n loading: true,\r\n },\r\n loading: true,\r\n };\r\n case failure(parkingProductsTypes.DELEGATE_PARKING_RIGHTS):\r\n case failure(parkingProductsTypes.UPDATE_DELEGATION):\r\n case failure(parkingProductsTypes.REVOKE_PARKINGRIGHTS):\r\n case failure(parkingProductsTypes.REVOKE_VEHICLE_ASSIGNMENTS):\r\n case failure(parkingProductsTypes.DELETE_VEHICLE_ASSIGNMENTS):\r\n case failure(parkingProductsTypes.DELETE_DELEGEES):\r\n case failure(parkingProductsTypes.GET_ASSIGNED_VEHICLE):\r\n return {\r\n ...state,\r\n selectedVehicleAssignment: {\r\n loading: false,\r\n error: action.error as ErrorDetailsModel,\r\n },\r\n loading: false,\r\n error: action.error as ErrorDetailsModel,\r\n };\r\n case success(parkingProductsTypes.DELEGATE_PARKING_RIGHTS):\r\n case success(parkingProductsTypes.UPDATE_DELEGATION):\r\n case success(parkingProductsTypes.REVOKE_PARKINGRIGHTS):\r\n case success(parkingProductsTypes.DELETE_VEHICLE_ASSIGNMENTS):\r\n case success(parkingProductsTypes.RESEND_DELEGEE_INVITE):\r\n case success(parkingProductsTypes.DELETE_DELEGEES):\r\n case success(parkingProductsTypes.ASSIGN_VEHICLE):\r\n return {\r\n ...state,\r\n loading: false,\r\n };\r\n case success(parkingProductsTypes.REVOKE_VEHICLE_ASSIGNMENTS):\r\n return {\r\n ...state,\r\n vehicleAssignmentsMyFleet: reduceRevokeMyFleet(state.vehicleAssignmentsMyFleet, action.revokeProductsModel!),\r\n loading: false,\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nexport default (\r\n state: ParkingProductState = initialState,\r\n action: ParkingProductsActionType\r\n): ParkingProductState => {\r\n let pageNumber: number;\r\n\r\n const newStateMaybe = reduceVehicleAssignmentUpdates(state, action);\r\n if (newStateMaybe != state) {\r\n return newStateMaybe;\r\n }\r\n\r\n const newVehicleState = reduceVehicles(state.vehiclesMyProducts, action);\r\n if (newVehicleState !== state.vehiclesMyProducts) {\r\n return {\r\n ...state,\r\n vehiclesMyProducts: newVehicleState\r\n };\r\n }\r\n\r\n const newVehicleAssignmentsState = reduceVehicleAssignmentsMyFleet(state.vehicleAssignmentsMyFleet, action);\r\n if (newVehicleAssignmentsState !== state.vehicleAssignmentsMyFleet) {\r\n return {\r\n ...state,\r\n vehicleAssignmentsMyFleet: newVehicleAssignmentsState\r\n };\r\n }\r\n\r\n const newLoadingState = reduceGlobalLoadingState(state, action);\r\n if (newLoadingState !== state) {\r\n return newLoadingState;\r\n }\r\n\r\n switch (action.type) {\r\n case request(parkingProductsTypes.GET_PARKING_PRODUCTS):\r\n return {\r\n ...state,\r\n parkingProducts: {\r\n data: [],\r\n loading: true,\r\n },\r\n };\r\n case request(parkingProductsTypes.GET_LOCATED_PARKING_PRODUCTS):\r\n return {\r\n ...state,\r\n locatedParkingProducts: {\r\n data: parkingProductsReducerHelper.getLocatedParkingProductsData(state),\r\n loading: true,\r\n },\r\n };\r\n case request(parkingProductsTypes.GET_DELEGATED_PARKING_RIGHTS):\r\n pageNumber = action.delegatedParkingProductsPayload?.pageNumber as number;\r\n\r\n return {\r\n ...state,\r\n delegatedParkingProducts: {\r\n ...state.delegatedParkingProducts,\r\n pages: {\r\n ...state.delegatedParkingProducts.pages,\r\n [pageNumber]: {\r\n loading: true,\r\n data: [],\r\n },\r\n },\r\n },\r\n };\r\n case request(parkingProductsTypes.GET_DELEGEE_DETAILS):\r\n return {\r\n ...state,\r\n delegeeDetails: {\r\n loading: true,\r\n },\r\n };\r\n case request(parkingProductsTypes.GET_DELEGEES):\r\n pageNumber = action.delegeesPayload?.pageNumber as number;\r\n\r\n return {\r\n ...state,\r\n delegees: {\r\n ...state.delegees,\r\n pages: {\r\n ...state.delegees.pages,\r\n [pageNumber]: {\r\n loading: true,\r\n data: [],\r\n },\r\n },\r\n },\r\n };\r\n case request(parkingProductsTypes.IMPORT_DELEGEES):\r\n return {\r\n ...state,\r\n importDelegees: {\r\n ...state.importDelegees,\r\n loading: true,\r\n },\r\n };\r\n case request(parkingProductsTypes.START_BULK_VEHICLE_ASSIGNMENT):\r\n return {\r\n ...state,\r\n bulkVehicleAssignment: {\r\n ...state.bulkVehicleAssignment,\r\n loading: true,\r\n },\r\n };\r\n case request(parkingProductsTypes.VALIDATE_DELEGEES):\r\n return {\r\n ...state,\r\n validateDelegees: {\r\n ...state.validateDelegees,\r\n loading: true,\r\n },\r\n };\r\n case request(parkingProductsTypes.CALCULATE_WHITELIST_DELTA):\r\n return {\r\n ...state,\r\n calculatedWhitelistDelta: {\r\n ...state.calculatedWhitelistDelta,\r\n loading: true,\r\n },\r\n };\r\n case success(parkingProductsTypes.GET_PARKING_PRODUCTS):\r\n return {\r\n ...state,\r\n parkingProducts: {\r\n ...state.parkingProducts,\r\n data: action.parkingProductsPayload,\r\n loading: false,\r\n },\r\n };\r\n case success(parkingProductsTypes.GET_LOCATED_PARKING_PRODUCTS):\r\n return parkingProductsReducerHelper.getLocatedParkingProductsState(state, action);\r\n case success(parkingProductsTypes.GET_DELEGATED_PARKING_RIGHTS):\r\n pageNumber = action.delegatedParkingProductsPayload?.pageNumber as number;\r\n\r\n return {\r\n ...state,\r\n delegatedParkingProducts: {\r\n ...state.delegatedParkingProducts,\r\n totalPages: action.delegatedParkingProductsPayload?.totalPages as number,\r\n totalRecords: action.delegatedParkingProductsPayload?.totalRecords as number,\r\n pages: {\r\n ...state.delegatedParkingProducts.pages,\r\n ...{\r\n [pageNumber]: {\r\n loading: false,\r\n data: action.delegatedParkingProductsPayload?.payload,\r\n },\r\n },\r\n },\r\n },\r\n };\r\n case success(parkingProductsTypes.GET_DELEGEES):\r\n pageNumber = action.delegeesPayload?.pageNumber as number;\r\n\r\n return {\r\n ...state,\r\n delegees: {\r\n ...state.delegees,\r\n totalPages: action.delegeesPayload?.totalPages as number,\r\n totalRecords: action.delegeesPayload?.totalRecords as number,\r\n pages: {\r\n ...state.delegees.pages,\r\n ...{\r\n [pageNumber]: {\r\n loading: false,\r\n data: action.delegeesPayload?.payload,\r\n },\r\n },\r\n },\r\n },\r\n };\r\n case success(parkingProductsTypes.GET_DELEGEE_DETAILS):\r\n return {\r\n ...state,\r\n delegeeDetails: {\r\n ...state.delegeeDetails,\r\n loading: false,\r\n data: action.delegeeDetailsPayload,\r\n },\r\n };\r\n case success(parkingProductsTypes.GET_ASSIGNED_VEHICLE):\r\n return {\r\n ...state,\r\n selectedVehicleAssignment: {\r\n loading: false,\r\n data: action.selectedVehicleAssignment\r\n },\r\n loading: false\r\n }\r\n case success(parkingProductsTypes.GET_BULK_IMPORT_PROGRESS):\r\n return {\r\n ...state,\r\n bulkImportProgress: {\r\n progress: action.bulkImportProgress?.progress ?? 0,\r\n hasErrors: action.bulkImportProgress?.hasErrors ?? false,\r\n numberOfErrors: action.bulkImportProgress?.numberOfErrors ?? 0,\r\n },\r\n };\r\n case success(parkingProductsTypes.GET_BULK_IMPORT_STATUS):\r\n case failure(parkingProductsTypes.GET_BULK_IMPORT_STATUS):\r\n return {\r\n ...state,\r\n isBulkImportCompleted: action.isBulkImportCompleted ?? true,\r\n loading: false,\r\n };\r\n case success(parkingProductsTypes.IMPORT_DELEGEES):\r\n return {\r\n ...state,\r\n importDelegees: {\r\n ...state.importDelegees,\r\n loading: false,\r\n },\r\n };\r\n case success(parkingProductsTypes.START_BULK_VEHICLE_ASSIGNMENT):\r\n return {\r\n ...state,\r\n bulkVehicleAssignment: {\r\n ...state.bulkVehicleAssignment,\r\n loading: false,\r\n },\r\n };\r\n case success(parkingProductsTypes.VALIDATE_DELEGEES):\r\n return {\r\n ...state,\r\n validateDelegees: {\r\n ...state.validateDelegees,\r\n loading: false,\r\n success: true,\r\n fileReference: action.validateDelegeesPayload!.fileReference,\r\n },\r\n };\r\n case failure(parkingProductsTypes.VALIDATE_DELEGEES):\r\n return {\r\n ...state,\r\n validateDelegees: {\r\n ...state.validateDelegees,\r\n loading: false,\r\n success: false,\r\n },\r\n };\r\n case failure(parkingProductsTypes.GET_PARKING_PRODUCTS):\r\n return {\r\n ...state,\r\n parkingProducts: {\r\n ...state.parkingProducts,\r\n loading: false,\r\n error: action.error,\r\n },\r\n };\r\n case failure(parkingProductsTypes.GET_LOCATED_PARKING_PRODUCTS):\r\n return {\r\n ...state,\r\n locatedParkingProducts: {\r\n ...state.locatedParkingProducts,\r\n loading: false,\r\n data: [],\r\n error: action.error,\r\n },\r\n };\r\n case failure(parkingProductsTypes.GET_DELEGATED_PARKING_RIGHTS):\r\n pageNumber = action.delegatedParkingProductsPayload?.pageNumber as number;\r\n\r\n return {\r\n ...state,\r\n delegatedParkingProducts: {\r\n ...state.delegatedParkingProducts,\r\n pages: {\r\n ...state.delegatedParkingProducts.pages!,\r\n ...{\r\n [pageNumber]: {\r\n data: [],\r\n loading: false,\r\n error: action.error,\r\n },\r\n },\r\n },\r\n },\r\n };\r\n case failure(parkingProductsTypes.GET_DELEGEES):\r\n pageNumber = action.delegeesPayload?.pageNumber as number;\r\n\r\n return {\r\n ...state,\r\n delegees: {\r\n ...state.delegees,\r\n pages: {\r\n ...state.delegees.pages!,\r\n ...{\r\n [pageNumber]: {\r\n data: [],\r\n loading: false,\r\n error: action.error,\r\n },\r\n },\r\n },\r\n },\r\n };\r\n case failure(parkingProductsTypes.GET_DELEGEE_DETAILS):\r\n return {\r\n ...state,\r\n delegeeDetails: {\r\n ...state.delegeeDetails,\r\n loading: false,\r\n error: action.error as ErrorDetailsModel,\r\n },\r\n };\r\n case failure(parkingProductsTypes.RESEND_DELEGEE_INVITE):\r\n return {\r\n ...state,\r\n loading: false,\r\n error: action.error as ErrorDetailsModel,\r\n };\r\n case failure(parkingProductsTypes.IMPORT_DELEGEES):\r\n return {\r\n ...state,\r\n importDelegees: {\r\n ...state.importDelegees,\r\n loading: false,\r\n },\r\n };\r\n case failure(parkingProductsTypes.START_BULK_VEHICLE_ASSIGNMENT):\r\n return {\r\n ...state,\r\n bulkVehicleAssignment: {\r\n ...state.bulkVehicleAssignment,\r\n loading: false,\r\n },\r\n };\r\n case success(parkingProductsTypes.CALCULATE_WHITELIST_DELTA):\r\n return {\r\n ...state,\r\n calculatedWhitelistDelta: {\r\n ...state.validateDelegees,\r\n loading: false,\r\n amountOfVehiclesToCreate: action.calculatedWhitelistDelta!.amountOfVehiclesToCreate,\r\n amountOfVehiclesToDelete: action.calculatedWhitelistDelta!.amountOfVehiclesToDelete,\r\n amountOfVehiclesToUpdate: action.calculatedWhitelistDelta!.amountOfVehiclesToUpdate,\r\n amountOfVehiclesWithNoChanges: action.calculatedWhitelistDelta!.amountOfVehiclesWithNoChanges,\r\n hasChanges: action.calculatedWhitelistDelta!.hasChanges,\r\n fileReference: action.calculatedWhitelistDelta!.fileReference,\r\n },\r\n };\r\n case failure(parkingProductsTypes.CALCULATE_WHITELIST_DELTA):\r\n return {\r\n ...state,\r\n calculatedWhitelistDelta: {\r\n ...state.calculatedWhitelistDelta,\r\n loading: false,\r\n },\r\n error: action.error as ErrorDetailsModel,\r\n };\r\n case parkingProductsTypes.DISPOSE_ERROR:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: null,\r\n };\r\n case parkingProductsTypes.CLEAR_DELEGEE_DETAILS:\r\n return {\r\n ...state,\r\n delegeeDetails: {\r\n ...initialState.delegeeDetails,\r\n },\r\n };\r\n case parkingProductsTypes.RESET_BULK_UPLOAD_PROGRESS:\r\n return {\r\n ...state,\r\n bulkImportProgress: {\r\n progress: 0,\r\n hasErrors: false,\r\n numberOfErrors: 0,\r\n },\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","export const toastTypes = {\r\n SHOW_TOAST: \"SHOW_TOAST\",\r\n HIDE_TOAST: \"HIDE_TOAST\",\r\n\r\n DISPOSE_TOAST: \"DISPOSE_TOAST\",\r\n};\r\n","import { StringMap, TOptions } from \"i18next\";\r\nimport { ToastType } from \"../../ui/CustomToast/CustomToast\";\r\nimport { toastTypes } from \"../action-types/toast.types\";\r\n\r\nexport type Translateable = {\r\n key: string;\r\n options?: string | TOptions;\r\n formatArgs?: string[];\r\n};\r\n\r\nexport type ToastState = {\r\n show: boolean;\r\n severity: ToastType;\r\n title: Translateable;\r\n content: Translateable;\r\n};\r\n\r\nexport const initialState: ToastState = {\r\n show: false,\r\n severity: \"success\",\r\n title: {\r\n key: \"\",\r\n formatArgs: [],\r\n options: {},\r\n },\r\n content: {\r\n key: \"\",\r\n formatArgs: [],\r\n options: {},\r\n },\r\n};\r\n\r\nexport type ToastTranslationModel = {\r\n title?: Translateable;\r\n content?: Translateable;\r\n};\r\n\r\nexport type ToastActionType = {\r\n type: string;\r\n severity?: ToastType;\r\n translationModelPayload?: ToastTranslationModel;\r\n};\r\n\r\nexport default (\r\n state: ToastState = initialState,\r\n action: ToastActionType\r\n): ToastState => {\r\n switch (action.type) {\r\n case toastTypes.SHOW_TOAST:\r\n return {\r\n ...state,\r\n show: true,\r\n severity: action.severity as ToastType,\r\n title: {\r\n key: action.translationModelPayload?.title?.key || \"\",\r\n formatArgs: action.translationModelPayload?.title?.formatArgs || [],\r\n options: action.translationModelPayload?.title?.options || {},\r\n },\r\n content: {\r\n key: action.translationModelPayload?.content?.key || \"\",\r\n formatArgs: action.translationModelPayload?.content?.formatArgs || [],\r\n options: action.translationModelPayload?.content?.options || {},\r\n },\r\n };\r\n case toastTypes.HIDE_TOAST:\r\n return {\r\n ...state,\r\n show: false,\r\n };\r\n case toastTypes.DISPOSE_TOAST:\r\n return initialState;\r\n default:\r\n return state;\r\n }\r\n};\r\n","export const loaderTypes = {\r\n LOAD_THE_LOADER: \"loader/LOAD_THE_LOADER\",\r\n KILL_THE_LOADER: \"loader/KILL_THE_LOADER\",\r\n};\r\n","import { loaderTypes } from \"../action-types/loader.types\";\r\n\r\nexport type LoaderActionType = {\r\n type: string;\r\n};\r\n\r\nexport type LoaderState = {\r\n showLoader: boolean;\r\n};\r\n\r\nconst initialState: LoaderState = {\r\n showLoader: false,\r\n};\r\n\r\nexport default (state: LoaderState = initialState, action: LoaderActionType): LoaderState => {\r\n switch (action.type) {\r\n case loaderTypes.LOAD_THE_LOADER:\r\n return {\r\n ...state,\r\n showLoader: true,\r\n };\r\n case loaderTypes.KILL_THE_LOADER:\r\n return {\r\n ...state,\r\n showLoader: false,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","export const oidcTypes = {\r\n GET_CONFIGURATION: \"oidc/GET_CONFIGURATION\",\r\n};\r\n","import { OidcConfigurationResponseModel } from \"../../models/OidcConfigurationResponseModel\";\r\nimport { oidcTypes } from \"../action-types/oidc.types\";\r\nimport { OidcActionType } from \"../actions/oidc.actions\";\r\nimport { success } from \"../helpers/action.helper\";\r\n\r\nexport type OidcState = {\r\n oidcConfig: OidcConfigurationResponseModel;\r\n};\r\n\r\nconst initialState: OidcState = {\r\n oidcConfig: {\r\n serverUrl: \"\",\r\n clientId: \"\",\r\n clientSecret: \"\",\r\n },\r\n};\r\n\r\nexport default (state: OidcState = initialState, action: OidcActionType): OidcState => {\r\n switch (action.type) {\r\n case success(oidcTypes.GET_CONFIGURATION):\r\n return {\r\n ...state,\r\n oidcConfig: action.payload,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","export const aiTypes = {\r\n GET_CONNECTIONSTRING: \"ai/GET_CONNECTIONSTRING\",\r\n};\r\n","import { aiTypes } from \"../action-types/ai.types\";\r\nimport { AiActionType } from \"../actions/ai.actions\";\r\nimport { success } from \"../helpers/action.helper\";\r\n\r\nexport type AiState = {\r\n connectionString: string;\r\n};\r\n\r\nconst initialState: AiState = {\r\n connectionString: \"\",\r\n};\r\n\r\nexport default (state: AiState = initialState, action: AiActionType): AiState => {\r\n switch (action.type) {\r\n case success(aiTypes.GET_CONNECTIONSTRING):\r\n return {\r\n ...state,\r\n connectionString: action.payload,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","export enum ProductType {\r\n Unknown = 0,\r\n HourlyRate = 1,\r\n FixedRate = 2,\r\n}\r\n","export enum VisitorBookingStatus {\r\n Draft = 1,\r\n Booked = 2,\r\n Cancelled = 3\r\n}","export const visitorBookingTypes = {\r\n GET_PRODUCT_CONFIGURATIONS: \"visitorBooking/GET_PRODUCT_CONFIGURATIONS\",\r\n GET_PARKING_LOCATIONS: \"visitorBooking/GET_PARKING_LOCATIONS\",\r\n CREATE_VISITOR_BOOKING: \"visitorBooking/CREATE_VISITOR_BOOKING\",\r\n CREATE_VISITOR_BOOKINGS: \"visitorBooking/CREATE_VISITOR_BOOKINGS\",\r\n GET_VISITOR_BOOKINGS: \"visitorBooking/GET_VISITOR_BOOKINGS\",\r\n CANCEL_VISITOR_BOOKING: \"visitorBooking/CANCEL_VISITOR_BOOKING\",\r\n HANDLE_VISITOR_BOOKING_VALIDATION: \"visitorBooking/HANDLE_VISITOR_BOOKING_VALIDATION\",\r\n GET_PRODUCT_SALES_AVAILABILITY: \"visitorBooking/GET_PRODUCT_SALES_AVAILABILITY\",\r\n GET_PARKING_FACILITY_IMAGES: \"visitorBooking/GET_PARKING_FACILITY_IMAGES\"\r\n};\r\n","import { VisitorBookingsList, VisitorBookingStatus } from \"../../../models/visitor-booking\";\r\nimport { ParkingFacilityImageModel } from \"../../../models/visitor-booking/ParkingFacilityImageModel\";\r\nimport { ProductsSalesAvailability } from \"../../../models/visitor-booking/ProductsSalesAvailability\";\r\nimport { visitorBookingTypes } from \"../../action-types\";\r\nimport { request, success, failure } from \"../../helpers/action.helper\";\r\nimport { VisitorBookingAction } from \"./../../actions/visitor-booking/visitorBookingActions.types\";\r\nimport { VisitorBookingState } from \"./visitorBookingReducer.types\";\r\n\r\nconst initialState: VisitorBookingState = {\r\n productConfigurations: {\r\n loading: false,\r\n data: [],\r\n error: null,\r\n },\r\n parkingLocations: {\r\n loading: false,\r\n data: [],\r\n error: null,\r\n },\r\n createVisitorBooking: {\r\n loading: false,\r\n error: null,\r\n },\r\n createVisitorBookings: {\r\n loading: false,\r\n error: null,\r\n },\r\n visitorBookings: {\r\n loading: false,\r\n data: {} as VisitorBookingsList,\r\n error: null,\r\n },\r\n productSalesAvailability: {\r\n loading: false,\r\n data: {} as ProductsSalesAvailability,\r\n error: null,\r\n },\r\n facilityImages: {\r\n loading: false,\r\n data: [] as ParkingFacilityImageModel[],\r\n error: null,\r\n },\r\n loading: false,\r\n};\r\n\r\nexport const visitorBookingReducer = (\r\n state: VisitorBookingState = initialState,\r\n action: VisitorBookingAction\r\n): VisitorBookingState => {\r\n switch (action.type) {\r\n case request(visitorBookingTypes.GET_PRODUCT_CONFIGURATIONS):\r\n return {\r\n ...state,\r\n productConfigurations: {\r\n ...state.productConfigurations,\r\n loading: true,\r\n data: [],\r\n },\r\n };\r\n\r\n case request(visitorBookingTypes.GET_PARKING_LOCATIONS):\r\n return {\r\n ...state,\r\n parkingLocations: {\r\n ...state.parkingLocations,\r\n loading: true,\r\n data: [],\r\n },\r\n };\r\n\r\n case request(visitorBookingTypes.CREATE_VISITOR_BOOKING):\r\n return {\r\n ...state,\r\n createVisitorBooking: {\r\n ...state.createVisitorBooking,\r\n loading: true,\r\n },\r\n };\r\n\r\n case request(visitorBookingTypes.CREATE_VISITOR_BOOKINGS):\r\n return {\r\n ...state,\r\n createVisitorBookings: {\r\n ...state.createVisitorBookings,\r\n loading: true,\r\n },\r\n };\r\n\r\n case request(visitorBookingTypes.GET_VISITOR_BOOKINGS):\r\n return {\r\n ...state,\r\n visitorBookings: {\r\n ...state.visitorBookings,\r\n loading: true,\r\n data: {} as VisitorBookingsList,\r\n },\r\n };\r\n\r\n case request(visitorBookingTypes.GET_PRODUCT_SALES_AVAILABILITY):\r\n return {\r\n ...state,\r\n productSalesAvailability: {\r\n ...state.productSalesAvailability,\r\n loading: true,\r\n data: {} as ProductsSalesAvailability,\r\n },\r\n };\r\n\r\n case request(visitorBookingTypes.GET_PARKING_FACILITY_IMAGES):\r\n return {\r\n ...state,\r\n facilityImages: {\r\n ...state.facilityImages,\r\n loading: true,\r\n data: [] as ParkingFacilityImageModel[],\r\n },\r\n };\r\n\r\n case success(visitorBookingTypes.GET_PRODUCT_CONFIGURATIONS):\r\n return {\r\n ...state,\r\n productConfigurations: {\r\n ...state.productConfigurations,\r\n loading: false,\r\n data: action.productConfigurationsPayload,\r\n },\r\n };\r\n\r\n case success(visitorBookingTypes.GET_PARKING_LOCATIONS):\r\n return {\r\n ...state,\r\n parkingLocations: {\r\n ...state.parkingLocations,\r\n loading: false,\r\n data: action.parkingLocationsPayload,\r\n },\r\n };\r\n\r\n case success(visitorBookingTypes.CREATE_VISITOR_BOOKING):\r\n return {\r\n ...state,\r\n createVisitorBooking: {\r\n ...state.createVisitorBooking,\r\n loading: false,\r\n },\r\n };\r\n\r\n case success(visitorBookingTypes.CREATE_VISITOR_BOOKINGS):\r\n return {\r\n ...state,\r\n createVisitorBookings: {\r\n ...state.createVisitorBookings,\r\n loading: false,\r\n },\r\n };\r\n\r\n case success(visitorBookingTypes.GET_VISITOR_BOOKINGS):\r\n return {\r\n ...state,\r\n visitorBookings: {\r\n ...state.visitorBookings,\r\n loading: false,\r\n data: action.visitorBookingsPayload,\r\n },\r\n };\r\n\r\n case success(visitorBookingTypes.GET_PRODUCT_SALES_AVAILABILITY):\r\n return {\r\n ...state,\r\n productSalesAvailability: {\r\n ...state.productSalesAvailability,\r\n loading: false,\r\n data: action.productSalesAvailabilityPayload,\r\n },\r\n };\r\n\r\n case success(visitorBookingTypes.GET_PARKING_FACILITY_IMAGES):\r\n return {\r\n ...state,\r\n facilityImages: {\r\n ...state.facilityImages,\r\n loading: false,\r\n data: action.facilityImagesPayload,\r\n },\r\n };\r\n\r\n case failure(visitorBookingTypes.GET_PRODUCT_CONFIGURATIONS):\r\n return {\r\n ...state,\r\n productConfigurations: {\r\n ...state.productConfigurations,\r\n loading: false,\r\n },\r\n };\r\n\r\n case failure(visitorBookingTypes.GET_PARKING_LOCATIONS):\r\n return {\r\n ...state,\r\n parkingLocations: {\r\n ...state.parkingLocations,\r\n loading: false,\r\n },\r\n };\r\n\r\n case failure(visitorBookingTypes.CREATE_VISITOR_BOOKING):\r\n return {\r\n ...state,\r\n createVisitorBooking: {\r\n ...state.createVisitorBooking,\r\n loading: false,\r\n },\r\n };\r\n case failure(visitorBookingTypes.CREATE_VISITOR_BOOKINGS):\r\n return {\r\n ...state,\r\n createVisitorBookings: {\r\n ...state.createVisitorBookings,\r\n loading: false,\r\n },\r\n };\r\n\r\n case failure(visitorBookingTypes.GET_VISITOR_BOOKINGS):\r\n case failure(visitorBookingTypes.CANCEL_VISITOR_BOOKING):\r\n return {\r\n ...state,\r\n visitorBookings: {\r\n ...state.visitorBookings,\r\n loading: false,\r\n },\r\n };\r\n\r\n case failure(visitorBookingTypes.GET_PRODUCT_SALES_AVAILABILITY):\r\n return {\r\n ...state,\r\n productSalesAvailability: {\r\n ...state.productSalesAvailability,\r\n loading: false,\r\n },\r\n };\r\n\r\n case request(visitorBookingTypes.CANCEL_VISITOR_BOOKING):\r\n return {\r\n ...state,\r\n visitorBookings: {\r\n ...state.visitorBookings,\r\n loading: true,\r\n },\r\n };\r\n\r\n case failure(visitorBookingTypes.GET_PARKING_FACILITY_IMAGES):\r\n return {\r\n ...state,\r\n facilityImages: {\r\n ...state.facilityImages,\r\n loading: false,\r\n },\r\n };\r\n\r\n case success(visitorBookingTypes.CANCEL_VISITOR_BOOKING):\r\n const cancelledBooking = state.visitorBookings.data?.visitorBookings.find(\r\n (x) => x.referenceNumber === action.cancelledVisitorBookingReference\r\n );\r\n\r\n if (cancelledBooking) {\r\n cancelledBooking.status = VisitorBookingStatus.Cancelled;\r\n }\r\n\r\n return {\r\n ...state,\r\n visitorBookings: {\r\n ...state.visitorBookings,\r\n loading: false,\r\n },\r\n };\r\n\r\n case success(visitorBookingTypes.HANDLE_VISITOR_BOOKING_VALIDATION):\r\n const loading = action.loading ?? false;\r\n\r\n return {\r\n ...state,\r\n loading: loading,\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n","export const fileTypes = {\r\n FILE_UPLOADED: \"FILE_UPLOADED\",\r\n CANCEL_UPLOAD: \"CANCEL_UPLOAD\",\r\n};\r\n","import { fileTypes } from \"../action-types/file.types\";\r\nimport { FileActionType } from \"../actions/file.actions\";\r\n\r\nexport type FileState = {\r\n fileUploaded: boolean;\r\n};\r\n\r\nconst initialState: FileState = {\r\n fileUploaded: false,\r\n};\r\n\r\nexport default (\r\n state: FileState = initialState,\r\n action: FileActionType\r\n): FileState => {\r\n switch (action.type) {\r\n case fileTypes.FILE_UPLOADED:\r\n return {\r\n ...state,\r\n fileUploaded: true,\r\n };\r\n case fileTypes.CANCEL_UPLOAD:\r\n return {\r\n ...state,\r\n fileUploaded: false,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { combineReducers } from \"redux\";\r\nimport { connectRouter } from \"connected-react-router\";\r\nimport environment, { EnvironmentState } from \"./environment.reducer\";\r\nimport parkingProducts, {\r\n ParkingProductState,\r\n} from \"./parkingProducts.reducer\";\r\nimport toast, { ToastState } from \"./toast.reducer\";\r\nimport loader, { LoaderState } from \"./loader.reducer\";\r\nimport { reducer as oidcReducer, UserState } from \"redux-oidc\";\r\nimport oidcConfig, { OidcState } from \"./oidc.reducer\";\r\nimport ai, { AiState } from \"./ai.reducer\";\r\nimport {\r\n VisitorBookingState,\r\n visitorBookingReducer as visitorBooking,\r\n} from \"./visitor-booking\";\r\nimport file, { FileState } from \"./file.reducer\";\r\n\r\nexport type RootReducer = {\r\n readonly router: any;\r\n readonly environment: EnvironmentState;\r\n readonly parkingProducts: ParkingProductState;\r\n readonly toast: ToastState;\r\n readonly loader: LoaderState;\r\n readonly oidc: UserState;\r\n readonly oidcConfig: OidcState;\r\n readonly ai: AiState;\r\n readonly visitorBooking: VisitorBookingState;\r\n readonly file: FileState;\r\n};\r\n\r\nconst rootReducer = (history: any) => {\r\n return combineReducers({\r\n router: connectRouter(history),\r\n\r\n // reducers\r\n environment,\r\n parkingProducts,\r\n toast,\r\n loader,\r\n oidc: oidcReducer,\r\n oidcConfig,\r\n ai,\r\n visitorBooking,\r\n file,\r\n });\r\n};\r\n\r\nexport default rootReducer;\r\n","import thunkMiddleware from \"redux-thunk\";\r\nimport loggerMiddleware from \"redux-logger\";\r\nimport { Middleware } from \"redux\";\r\nimport { routerMiddleware } from \"connected-react-router\";\r\nimport { createBrowserHistory } from \"history\";\r\n\r\nexport const history = createBrowserHistory();\r\n\r\nconst getMiddlewares = () => {\r\n let middlewares: Middleware[] = [routerMiddleware(history), thunkMiddleware];\r\n\r\n const isProdBuild = process.env.NODE_ENV === \"production\";\r\n const isTestBuild = process.env.NODE_ENV === \"test\";\r\n\r\n if (!isProdBuild && !isTestBuild) {\r\n middlewares = [...middlewares, loggerMiddleware];\r\n }\r\n\r\n return middlewares;\r\n};\r\n\r\nexport const middlewares = getMiddlewares();","import { createStore, applyMiddleware, compose } from \"redux\";\r\nimport rootReducer from \"./reducers\";\r\nimport { history, middlewares } from \"./buildEnv\";\r\nimport { TypedUseSelectorHook, useDispatch, useSelector } from \"react-redux\";\r\n\r\nconst composeEnhancers : typeof compose = (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\r\nconst store = createStore(rootReducer(history), composeEnhancers(applyMiddleware(...middlewares)));\r\n\r\nexport default store;\r\n\r\nexport type RootState = ReturnType;\r\nexport type AppDispatch = typeof store.dispatch;\r\n\r\nexport const useAppDispatch = () => useDispatch();\r\nexport const useAppSelector: TypedUseSelectorHook = useSelector;","export const myProductsContextTypes = {\r\n SET_SELECTED_LOCATION: \"context/SET_SELECTED_LOCATION\",\r\n SET_SORTING: \"context/SET_SORTING\",\r\n RESET_MYPRODUCTS_CONTEXT: \"context/RESET_MYPRODUCTS_CONTEXT\",\r\n} as const;\r\n\r\nexport type MyProductsContextAction =\r\n | { type: typeof myProductsContextTypes.SET_SELECTED_LOCATION, payload: number }\r\n | { type: typeof myProductsContextTypes.SET_SORTING, payload: { by: string; descending?: boolean } }\r\n | { type: typeof myProductsContextTypes.RESET_MYPRODUCTS_CONTEXT }\r\n","import { MyProductsContextAction, myProductsContextTypes } from \"../actions/myProducts.types\";\r\n\r\nexport type MyProductsContextDataGridState = {\r\n sortBy?: string;\r\n orderDesc?: boolean;\r\n};\r\n\r\nexport type MyProductsContextState = {\r\n selectedLocation: number;\r\n dataTable: MyProductsContextDataGridState;\r\n};\r\n\r\nexport const initialState: MyProductsContextState = {\r\n selectedLocation: 0,\r\n dataTable: {\r\n orderDesc: true,\r\n sortBy: \"invitationDate\",\r\n },\r\n};\r\n\r\nexport default (\r\n state: MyProductsContextState = initialState,\r\n action: MyProductsContextAction\r\n): MyProductsContextState => {\r\n switch (action.type) {\r\n case myProductsContextTypes.SET_SELECTED_LOCATION:\r\n if (state.selectedLocation === action.payload) {\r\n return {\r\n ...state,\r\n selectedLocation: 0,\r\n };\r\n }\r\n\r\n return {\r\n ...state,\r\n selectedLocation: action.payload,\r\n };\r\n\r\n case myProductsContextTypes.SET_SORTING: {\r\n const payloadDesc = action.payload.descending;\r\n const newOrderDesc =\r\n typeof payloadDesc === \"boolean\" ? payloadDesc : !state.dataTable.orderDesc;\r\n return {\r\n ...state,\r\n dataTable: {\r\n ...state.dataTable,\r\n sortBy: action.payload.by,\r\n orderDesc: newOrderDesc,\r\n },\r\n };\r\n }\r\n\r\n case myProductsContextTypes.RESET_MYPRODUCTS_CONTEXT:\r\n return initialState;\r\n default:\r\n return state;\r\n }\r\n};\r\n","import React, { createContext, useReducer } from \"react\";\r\nimport { MyProductsContextState } from \"./store/reducers/myProducts.reducer\";\r\nimport myProductsContextReducer, { initialState } from \"./store/reducers/myProducts.reducer\";\r\nimport { myProductsContextTypes } from \"./store/actions/myProducts.types\";\r\n\r\nexport type MyProductsContextType = {\r\n myProductsState: MyProductsContextState;\r\n setSelectedLocation: (placeId: number) => void;\r\n setSorting: (sortBy: string, descending?: boolean) => void;\r\n resetContext: () => void;\r\n};\r\n\r\nexport const MyProductsContext = createContext(null);\r\n\r\ninterface IMyProductsContextProps {}\r\n\r\nconst MyProductsContextProvider: React.FC = ({ children }) => {\r\n const [myProductsState, dispatch] = useReducer(myProductsContextReducer, initialState);\r\n\r\n const setSelectedLocation = (placeId: number) => {\r\n dispatch({\r\n type: myProductsContextTypes.SET_SELECTED_LOCATION,\r\n payload: placeId,\r\n });\r\n };\r\n\r\n const setSorting = (sortBy: string, descending?: boolean) => {\r\n dispatch({\r\n type: myProductsContextTypes.SET_SORTING,\r\n payload: { by: sortBy, descending },\r\n });\r\n };\r\n\r\n const resetContext = () =>\r\n dispatch({\r\n type: myProductsContextTypes.RESET_MYPRODUCTS_CONTEXT,\r\n });\r\n\r\n const store: MyProductsContextType = {\r\n myProductsState,\r\n setSelectedLocation,\r\n resetContext,\r\n setSorting,\r\n };\r\n\r\n return {children};\r\n};\r\n\r\nexport default MyProductsContextProvider;\r\n","import { useContext } from \"react\";\r\nimport { MyProductsContext } from \"../MyProductsContextProvider\";\r\n\r\nconst useMyProductsContext = () => {\r\n const myProductsContext = useContext(MyProductsContext);\r\n\r\n if (myProductsContext === null) {\r\n throw new Error(\"You forgot to use MyProductsContextProvider\");\r\n }\r\n\r\n return myProductsContext;\r\n};\r\n\r\nexport default useMyProductsContext;\r\n","import React from \"react\";\r\nimport { SvgIcon } from \"@material-ui/core\";\r\n\r\nconst VehicleIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default VehicleIcon;\r\n","export const fleetManagerContextTypes = {\r\n SET_DELEGATION_TYPE: \"context/SET_DELEGATION_TYPE\",\r\n SET_ASSIGNMENT_TYPE: \"context/SET_ASSIGNMENT_TYPE\",\r\n SET_DRAG_AND_DROP_VIEW: \"context/SET_DRAG_AND_DROP_VIEW\",\r\n SET_VEHICLE_DRAG_AND_DROP_VIEW: \"context/SET_VEHICLE_DRAG_AND_DROP_VIEW\",\r\n SET_NRPLATE_WARNING: \"context/SET_NRPLATE_WARNING\",\r\n SET_NRPLATE_ERROR: \"context/SET_NRPLATE_ERROR\",\r\n SET_SELECTED_REGISTRATION_ID: \"context/SET_SELECTED_REGISTRATION_ID\",\r\n SET_SELECTED_ROW_KEY: \"context/SET_SELECTED_ROW_KEY\",\r\n SET_SELECTED_PARKINGRIGHT_IDS: \"context/SET_SELECTED_PARKINGRIGHT_IDS\",\r\n TOGGLE_SHOW_ADD_DELEGEE: \"context/TOGGLE_SHOW_ADD_DELEGEE\",\r\n TOGGLE_SHOW_ASSIGN_VEHICLE: \"context/TOGGLE_SHOW_ASSIGN_VEHICLE\",\r\n TOGGLE_SHOW_WHITELIST_VEHICLES: \"context/TOGGLE_SHOW_WHITELIST_VEHICLES\",\r\n TOGGLE_SHOW_EDIT_VEHICLE_ASSIGNMENT: \"context/TOGGLE_SHOW_EDIT_VEHICLE_ASSIGNMENT\",\r\n TOGGLE_SHOW_EDIT_DELEGEE: \"context/TOGGLE_SHOW_EDIT_DELEGEE\",\r\n TOGGLE_SHOW_DELETE_DELEGEE: \"context/SET_DELETE_DELEGEE\",\r\n TOGGLE_SHOW_BATCH_REVOKE_PARKINGRIGHTS: \"context/TOGGLE_SHOW_BATCH_REVOKE_PARKINGRIGHTS\",\r\n TOGGLE_SHOW_BATCH_REVOKE_VEHICLE_ASSIGNMENT: \"context/TOGGLE_SHOW_BATCH_REVOKE_VEHICLE_ASSIGNMENT\",\r\n TOGGLE_SHOW_REVOKE_PARKINGRIGHTS: \"context/TOGGLE_SHOW_REVOKE_PARKINGRIGHTS\",\r\n TOGGLE_SHOW_REVOKE_VEHICLE_ASSIGNMENT: \"context/TOGGLE_SHOW_REVOKE_VEHICLE_ASSIGNMENT\",\r\n TOGGLE_SHOW_DELETE_VEHICLE_ASSIGNMENT: \"context/TOGGLE_SHOW_DELETE_VEHICLE_ASSIGNMENT\",\r\n TOGGLE_SHOW_BATCH_DELETE_DELEGATIONS: \"context/TOGGLE_SHOW_BATCH_DELETE_DELEGATIONS\",\r\n SET_PAGE_NUMBER: \"context/SET_PAGE_NUMBER\",\r\n SET_PAGE_SIZE: \"context/SET_PAGE_SIZE\",\r\n RESET_FLEET_MANAGER_CONTEXT: \"context/RESET_FLEET_MANAGER_CONTEXT\",\r\n TOGGLE_SHOW_IMPORT_WARNING: \"context/TOGGLE_SHOW_IMPORT_WARNING\"\r\n};","import { AssignedVehicleRow } from \"../../../containers/FleetManager/MyProducts/ParkingRightsDataTable/VehiclesTable\";\r\nimport { fleetManagerContextTypes } from \"../actions/fleetManagerContext.types\";\r\n\r\nexport enum DelegationType {\r\n Single = \"single\",\r\n Multiple = \"multiple\",\r\n}\r\n\r\nexport enum AssignmentType {\r\n Single = \"single\",\r\n Multiple = \"multiple\",\r\n}\r\n\r\nexport type FleetManagerContextState = {\r\n delegationType: DelegationType;\r\n assignmentType: AssignmentType;\r\n dragAndDropView: boolean;\r\n vehicleDragAndDropView: boolean;\r\n showDelegeeDetails: boolean;\r\n showAssignVehicle: boolean;\r\n showWhitelistVehicles: boolean;\r\n showDeleteDelegeeWarning: boolean;\r\n showBatchDeleteDelegationsWarning: boolean;\r\n showBatchRevokeParkingRightsWarning: boolean;\r\n showBatchRevokeParkingVehicleAssignment: boolean;\r\n showRevokeParkingRightsWarning: boolean;\r\n showRevokeParkingVehicleAssignment: boolean;\r\n showDeleteVehiclesAssignment: boolean;\r\n showCloseImportWarning: boolean;\r\n selectedRowKeys: string[];\r\n selectedDelegeeRowKey: string;\r\n isEditDelegeeMode: boolean;\r\n isEditVehicleAssignmentMode: boolean;\r\n numberPlateWarning: string | undefined;\r\n numberPlateError: string | undefined;\r\n selectedRegistrationId: string;\r\n selectedVehicleAssignment?: AssignedVehicleRow;\r\n hasUnlimitedEntryRights: boolean;\r\n};\r\n\r\nexport type FleetManagerContextAction = {\r\n type: string;\r\n payload?: number | string | string[] | DelegationType | boolean | AssignedVehicleRow;\r\n};\r\n\r\nexport const initialState: FleetManagerContextState = {\r\n delegationType: DelegationType.Single,\r\n assignmentType: AssignmentType.Single,\r\n dragAndDropView: false,\r\n vehicleDragAndDropView: false,\r\n showDelegeeDetails: false,\r\n showAssignVehicle: false,\r\n showWhitelistVehicles: false,\r\n showDeleteDelegeeWarning: false,\r\n showBatchDeleteDelegationsWarning: false,\r\n showBatchRevokeParkingRightsWarning: false,\r\n showRevokeParkingRightsWarning: false,\r\n showDeleteVehiclesAssignment: false,\r\n showBatchRevokeParkingVehicleAssignment: false,\r\n showRevokeParkingVehicleAssignment: false,\r\n showCloseImportWarning: false,\r\n isEditDelegeeMode: false,\r\n isEditVehicleAssignmentMode: false,\r\n numberPlateWarning: undefined,\r\n numberPlateError: undefined,\r\n selectedRegistrationId: \"\",\r\n selectedRowKeys: [],\r\n selectedDelegeeRowKey: \"\",\r\n hasUnlimitedEntryRights: false,\r\n};\r\n\r\nexport default (\r\n state: FleetManagerContextState = initialState,\r\n action: FleetManagerContextAction\r\n): FleetManagerContextState => {\r\n switch (action.type) {\r\n case fleetManagerContextTypes.SET_SELECTED_REGISTRATION_ID:\r\n return {\r\n ...state,\r\n selectedRegistrationId: action.payload as string,\r\n };\r\n case fleetManagerContextTypes.TOGGLE_SHOW_ADD_DELEGEE:\r\n return {\r\n ...state,\r\n showDelegeeDetails: !state.showDelegeeDetails,\r\n delegationType: DelegationType.Single,\r\n dragAndDropView: false,\r\n };\r\n case fleetManagerContextTypes.TOGGLE_SHOW_ASSIGN_VEHICLE:\r\n return {\r\n ...state,\r\n showAssignVehicle: !state.showAssignVehicle,\r\n isEditVehicleAssignmentMode: false,\r\n };\r\n case fleetManagerContextTypes.TOGGLE_SHOW_WHITELIST_VEHICLES:\r\n return {\r\n ...state,\r\n showWhitelistVehicles: !state.showWhitelistVehicles,\r\n };\r\n case fleetManagerContextTypes.TOGGLE_SHOW_EDIT_VEHICLE_ASSIGNMENT:\r\n return {\r\n ...state,\r\n showAssignVehicle: !state.showAssignVehicle,\r\n isEditVehicleAssignmentMode: true,\r\n selectedVehicleAssignment: action.payload as AssignedVehicleRow,\r\n };\r\n case fleetManagerContextTypes.TOGGLE_SHOW_EDIT_DELEGEE:\r\n return {\r\n ...state,\r\n delegationType: DelegationType.Single,\r\n dragAndDropView: false,\r\n showDelegeeDetails: !state.showDelegeeDetails,\r\n isEditDelegeeMode: !state.isEditDelegeeMode,\r\n selectedRegistrationId: action.payload as string,\r\n };\r\n case fleetManagerContextTypes.TOGGLE_SHOW_DELETE_DELEGEE:\r\n return {\r\n ...state,\r\n showDeleteDelegeeWarning: !state.showDeleteDelegeeWarning,\r\n };\r\n case fleetManagerContextTypes.SET_SELECTED_PARKINGRIGHT_IDS:\r\n return {\r\n ...state,\r\n selectedRowKeys: action.payload as string[],\r\n };\r\n case fleetManagerContextTypes.SET_SELECTED_ROW_KEY:\r\n return {\r\n ...state,\r\n selectedDelegeeRowKey: action.payload as string,\r\n };\r\n case fleetManagerContextTypes.TOGGLE_SHOW_BATCH_REVOKE_PARKINGRIGHTS:\r\n return {\r\n ...state,\r\n showBatchRevokeParkingRightsWarning: !state.showBatchRevokeParkingRightsWarning,\r\n };\r\n case fleetManagerContextTypes.TOGGLE_SHOW_BATCH_REVOKE_VEHICLE_ASSIGNMENT:\r\n return {\r\n ...state,\r\n showBatchRevokeParkingVehicleAssignment: !state.showBatchRevokeParkingVehicleAssignment,\r\n };\r\n case fleetManagerContextTypes.TOGGLE_SHOW_REVOKE_PARKINGRIGHTS:\r\n return {\r\n ...state,\r\n showRevokeParkingRightsWarning: !state.showRevokeParkingRightsWarning,\r\n };\r\n case fleetManagerContextTypes.TOGGLE_SHOW_REVOKE_VEHICLE_ASSIGNMENT:\r\n return {\r\n ...state,\r\n showRevokeParkingVehicleAssignment: !state.showRevokeParkingVehicleAssignment,\r\n selectedVehicleAssignment: action.payload as AssignedVehicleRow\r\n };\r\n case fleetManagerContextTypes.TOGGLE_SHOW_DELETE_VEHICLE_ASSIGNMENT:\r\n return {\r\n ...state,\r\n showDeleteVehiclesAssignment: !state.showDeleteVehiclesAssignment,\r\n selectedVehicleAssignment: action.payload as AssignedVehicleRow\r\n };\r\n case fleetManagerContextTypes.TOGGLE_SHOW_BATCH_DELETE_DELEGATIONS:\r\n return {\r\n ...state,\r\n showBatchDeleteDelegationsWarning: !state.showBatchDeleteDelegationsWarning,\r\n };\r\n case fleetManagerContextTypes.SET_DELEGATION_TYPE:\r\n return {\r\n ...state,\r\n delegationType: action.payload as DelegationType,\r\n };\r\n case fleetManagerContextTypes.SET_ASSIGNMENT_TYPE:\r\n return {\r\n ...state,\r\n assignmentType: action.payload as AssignmentType,\r\n };\r\n case fleetManagerContextTypes.SET_DRAG_AND_DROP_VIEW:\r\n return {\r\n ...state,\r\n dragAndDropView: action.payload as boolean,\r\n };\r\n case fleetManagerContextTypes.SET_VEHICLE_DRAG_AND_DROP_VIEW:\r\n return {\r\n ...state,\r\n vehicleDragAndDropView: action.payload as boolean,\r\n };\r\n case fleetManagerContextTypes.SET_NRPLATE_WARNING:\r\n return {\r\n ...state,\r\n numberPlateWarning: action.payload as string | undefined,\r\n };\r\n case fleetManagerContextTypes.SET_NRPLATE_ERROR:\r\n return {\r\n ...state,\r\n numberPlateError: action.payload as string | undefined,\r\n };\r\n case fleetManagerContextTypes.TOGGLE_SHOW_IMPORT_WARNING:\r\n return {\r\n ...state,\r\n showCloseImportWarning: !state.showCloseImportWarning,\r\n }; \r\n case fleetManagerContextTypes.RESET_FLEET_MANAGER_CONTEXT:\r\n return initialState;\r\n default:\r\n return state;\r\n }\r\n};\r\n","import React, { createContext, useMemo, useReducer } from \"react\";\r\nimport IChildren from \"../interfaces/IChildren\";\r\nimport { fleetManagerContextTypes } from \"./store/actions/fleetManagerContext.types\";\r\nimport fleetManagerContextReducer, {\r\n AssignmentType,\r\n DelegationType,\r\n FleetManagerContextState,\r\n initialState,\r\n} from \"./store/reducers/fleetManagerContext.reducer\";\r\nimport { AssignedVehicleRow } from \"../containers/FleetManager/MyProducts/ParkingRightsDataTable/VehiclesTable\";\r\n\r\nexport type FleetManagerContextType = {\r\n fleetManagerState: FleetManagerContextState;\r\n setSelectedRegistrationId: (registrationId: string) => void;\r\n setSelectedDelegeeRowKey: (rowKey: string) => void;\r\n setSelectedParkingRightIds: (parkingRightIds: string[]) => void;\r\n setDelegationType: (delegationType: DelegationType) => void;\r\n setAssignmentType: (assignmentType: AssignmentType) => void;\r\n setDragAndDropView: (show: boolean) => void;\r\n setVehicleDragAndDropView: (show: boolean) => void;\r\n setNumberPlateWarning: (warning: string | undefined) => void;\r\n setNumberPlateError: (error: string | undefined) => void;\r\n toggleAddDelegee: () => void;\r\n toggleAssignVehicle: () => void;\r\n toggleWhitelistVehicles: () => void;\r\n toggleEditVehicleAssignment: (vehicleAssignment?: AssignedVehicleRow) => void;\r\n toggleEditDelegee: (registrationId: string) => void;\r\n toggleDeleteDelegeeWarning: () => void;\r\n toggleBatchRevokeParkingRightsWarning: () => void;\r\n toggleBatchRevokeVehicleAssignmentsWarning: () => void;\r\n toggleRevokeParkingRightsWarning: () => void;\r\n toggleRevokeVehicleAssignmentsWarning: (vehicleAssignment?: AssignedVehicleRow) => void;\r\n toggleDeleteVehicleAssignmentsWarning: (vehicleAssignment?: AssignedVehicleRow) => void;\r\n toggleBatchDeleteDelegationsWarning: () => void;\r\n toggleCloseImportWarning: () => void;\r\n resetContext: () => void;\r\n};\r\n\r\nexport const FleetManagerContext = createContext(\r\n {} as FleetManagerContextType\r\n);\r\n\r\nconst FleetManagerContextProvider = ({ children }: IChildren) => {\r\n const [fleetManagerState, dispatch] = useReducer(\r\n fleetManagerContextReducer,\r\n initialState\r\n );\r\n\r\n const setSelectedRegistrationId = (registrationId: string) =>\r\n dispatch({\r\n type: fleetManagerContextTypes.SET_SELECTED_REGISTRATION_ID,\r\n payload: registrationId,\r\n });\r\n\r\n const setSelectedDelegeeRowKey = (rowKey: string) =>\r\n dispatch({\r\n type: fleetManagerContextTypes.SET_SELECTED_ROW_KEY,\r\n payload: rowKey,\r\n });\r\n\r\n const setSelectedParkingRightIds = (parkingRightIds: string[]) =>\r\n dispatch({\r\n type: fleetManagerContextTypes.SET_SELECTED_PARKINGRIGHT_IDS,\r\n payload: parkingRightIds,\r\n });\r\n\r\n const setDelegationType = (delegationType: DelegationType) =>\r\n dispatch({\r\n type: fleetManagerContextTypes.SET_DELEGATION_TYPE,\r\n payload: delegationType,\r\n });\r\n\r\n const setAssignmentType = (assignmentType: AssignmentType) =>\r\n dispatch({\r\n type: fleetManagerContextTypes.SET_ASSIGNMENT_TYPE,\r\n payload: assignmentType,\r\n });\r\n\r\n const setDragAndDropView = (show: boolean) =>\r\n dispatch({\r\n type: fleetManagerContextTypes.SET_DRAG_AND_DROP_VIEW,\r\n payload: show,\r\n });\r\n\r\n const setVehicleDragAndDropView = (show: boolean) =>\r\n dispatch({\r\n type: fleetManagerContextTypes.SET_VEHICLE_DRAG_AND_DROP_VIEW,\r\n payload: show,\r\n });\r\n\r\n const setNumberPlateWarning = (warning: string | undefined) =>\r\n dispatch({\r\n type: fleetManagerContextTypes.SET_NRPLATE_WARNING,\r\n payload: warning,\r\n });\r\n\r\n const setNumberPlateError = (error: string | undefined) =>\r\n dispatch({\r\n type: fleetManagerContextTypes.SET_NRPLATE_ERROR,\r\n payload: error,\r\n });\r\n\r\n const toggleAddDelegee = () =>\r\n dispatch({\r\n type: fleetManagerContextTypes.TOGGLE_SHOW_ADD_DELEGEE,\r\n });\r\n\r\n const toggleAssignVehicle = () =>\r\n dispatch({\r\n type: fleetManagerContextTypes.TOGGLE_SHOW_ASSIGN_VEHICLE,\r\n });\r\n\r\n const toggleWhitelistVehicles = () =>\r\n dispatch({\r\n type: fleetManagerContextTypes.TOGGLE_SHOW_WHITELIST_VEHICLES,\r\n });\r\n\r\n const toggleEditVehicleAssignment = (vehicleAssignment?: AssignedVehicleRow) =>\r\n dispatch({\r\n type: fleetManagerContextTypes.TOGGLE_SHOW_EDIT_VEHICLE_ASSIGNMENT,\r\n payload: vehicleAssignment,\r\n });\r\n\r\n const toggleEditDelegee = (registrationId: string) =>\r\n dispatch({\r\n type: fleetManagerContextTypes.TOGGLE_SHOW_EDIT_DELEGEE,\r\n payload: registrationId,\r\n });\r\n\r\n const toggleDeleteDelegeeWarning = () =>\r\n dispatch({\r\n type: fleetManagerContextTypes.TOGGLE_SHOW_DELETE_DELEGEE,\r\n });\r\n\r\n const toggleBatchRevokeParkingRightsWarning = () =>\r\n dispatch({\r\n type: fleetManagerContextTypes.TOGGLE_SHOW_BATCH_REVOKE_PARKINGRIGHTS,\r\n });\r\n\r\n const toggleBatchRevokeVehicleAssignmentsWarning = () =>\r\n dispatch({\r\n type: fleetManagerContextTypes.TOGGLE_SHOW_BATCH_REVOKE_VEHICLE_ASSIGNMENT,\r\n });\r\n\r\n const toggleRevokeParkingRightsWarning = () =>\r\n dispatch({\r\n type: fleetManagerContextTypes.TOGGLE_SHOW_REVOKE_PARKINGRIGHTS,\r\n });\r\n\r\n const toggleRevokeVehicleAssignmentsWarning = (vehicleAssignment?: AssignedVehicleRow) =>\r\n dispatch({\r\n type: fleetManagerContextTypes.TOGGLE_SHOW_REVOKE_VEHICLE_ASSIGNMENT,\r\n payload: vehicleAssignment\r\n });\r\n\r\n const toggleDeleteVehicleAssignmentsWarning = (vehicleAssignment?: AssignedVehicleRow) =>\r\n dispatch({\r\n type: fleetManagerContextTypes.TOGGLE_SHOW_DELETE_VEHICLE_ASSIGNMENT,\r\n payload: vehicleAssignment\r\n });\r\n\r\n const toggleBatchDeleteDelegationsWarning = () =>\r\n dispatch({\r\n type: fleetManagerContextTypes.TOGGLE_SHOW_BATCH_DELETE_DELEGATIONS,\r\n });\r\n\r\n const toggleCloseImportWarning = () =>\r\n dispatch({\r\n type: fleetManagerContextTypes.TOGGLE_SHOW_IMPORT_WARNING,\r\n });\r\n\r\n const resetContext = () =>\r\n dispatch({\r\n type: fleetManagerContextTypes.RESET_FLEET_MANAGER_CONTEXT,\r\n });\r\n\r\n const store: FleetManagerContextType = {\r\n fleetManagerState,\r\n setSelectedRegistrationId,\r\n setSelectedDelegeeRowKey,\r\n setSelectedParkingRightIds,\r\n setDelegationType,\r\n setAssignmentType,\r\n setNumberPlateWarning,\r\n setNumberPlateError,\r\n setDragAndDropView,\r\n setVehicleDragAndDropView,\r\n toggleAddDelegee,\r\n toggleAssignVehicle,\r\n toggleWhitelistVehicles,\r\n toggleEditVehicleAssignment,\r\n toggleEditDelegee,\r\n resetContext,\r\n toggleDeleteDelegeeWarning,\r\n toggleBatchRevokeParkingRightsWarning,\r\n toggleBatchRevokeVehicleAssignmentsWarning,\r\n toggleRevokeParkingRightsWarning,\r\n toggleRevokeVehicleAssignmentsWarning,\r\n toggleDeleteVehicleAssignmentsWarning,\r\n toggleBatchDeleteDelegationsWarning,\r\n toggleCloseImportWarning,\r\n };\r\n\r\n const memoStore = useMemo(\r\n () => ({\r\n store,\r\n }),\r\n [store]\r\n );\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport default FleetManagerContextProvider;\r\n","import { useContext } from \"react\";\r\nimport { FleetManagerContext } from \"../FleetManagerContextProvider\";\r\n\r\nconst useFleetManagerContext = () => {\r\n const fleetManagerContext = useContext(FleetManagerContext);\r\n\r\n return fleetManagerContext;\r\n};\r\n\r\nexport default useFleetManagerContext;\r\n","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11, _path12;\nconst _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }\nimport React from \"react\";\nconst SvgGermanLicensePlateSeals = _ref => {\n let {\n svgRef,\n title\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 19,\n height: 32,\n viewBox: \"0 0 19 32\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.165 6C15.165 9.31371 12.4787 12 9.16497 12C5.85126 12 3.16497 9.31371 3.16497 6C3.16497 2.68629 5.85126 6.55673e-08 9.16497 6.55673e-08C12.4787 6.55673e-08 15.165 2.68629 15.165 6Z\",\n fill: \"#FFDD1F\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M15.165 6.8H3.16497V5.3H15.165V6.8Z\",\n fill: \"black\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M8.41497 3.0298V0L9.91497 6.55673e-08V3.0298H8.41497Z\",\n fill: \"black\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M6.32568 4.7285L4.20436 2.58611L5.26502 1.51491L7.38634 3.6573L6.32568 4.7285Z\",\n fill: \"black\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M10.9331 3.65724L13.0544 1.51485L14.1151 2.58605L11.9938 4.72844L10.9331 3.65724Z\",\n fill: \"black\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M9.90431 8.9702L9.90431 12H8.40431L8.40431 8.9702H9.90431Z\",\n fill: \"black\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M11.9936 7.27157L14.1149 9.41396L13.0543 10.4852L10.9329 8.34276L11.9936 7.27157Z\",\n fill: \"black\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M7.38619 8.34269L5.26487 10.4851L4.20421 9.41389L6.32553 7.2715L7.38619 8.34269Z\",\n fill: \"black\"\n })), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18.1649 23C18.1649 27.9706 14.1355 32 9.16492 32C4.19435 32 0.164917 27.9706 0.164917 23C0.164917 18.0294 4.19435 14 9.16492 14C14.1355 14 18.1649 18.0294 18.1649 23Z\",\n fill: \"#F4F4F4\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.02209 19.1428H14.3078V24.2857C14.3078 27.126 12.0053 29.4285 9.16495 29.4285C6.32463 29.4285 4.02209 27.126 4.02209 24.2857V19.1428Z\",\n fill: \"#0EB332\"\n })), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.3078 19.1428H9.1649L6.86494 23.7427C5.5588 26.355 7.45836 29.4285 10.3789 29.4285C12.5488 29.4285 14.3077 27.6696 14.3077 25.4998L14.3078 19.1428Z\",\n fill: \"#D30000\"\n })), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.1649 26.5C11.1649 27.3284 10.4933 28 9.66492 28C8.83649 28 8.16492 27.3284 8.16492 26.5C8.16492 25.6716 8.83649 25 9.66492 25C10.4933 25 11.1649 25.6716 11.1649 26.5Z\",\n fill: \"white\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgGermanLicensePlateSeals, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/german-license-plate-seals.e86a2e47.svg\";\nexport { ForwardRef as ReactComponent };","import React from \"react\";\r\nimport { isEmpty } from \"underscore\";\r\nimport { MuiHelperTextProps } from \"./MuiHelperText.types\";\r\n\r\nconst MuiHelperText = (props: MuiHelperTextProps) => {\r\n if (!props.error || isEmpty(props.error)) {\r\n return null;\r\n }\r\n\r\n if (!Boolean(props.error)) {\r\n return null;\r\n }\r\n\r\n return (\r\n

\r\n {props.error}\r\n

\r\n );\r\n};\r\n\r\nexport default MuiHelperText;\r\n","import { findWhere, isUndefined } from \"underscore\";\r\nimport { CountryNumberPlate } from \"./CountryNumberPlate\";\r\nimport { languages } from \"../translations\";\r\n\r\nexport class CountriesNumberPlates {\r\n private numberPlates: CountryNumberPlate[];\r\n\r\n constructor() {\r\n this.numberPlates = this.getNumberPlates();\r\n }\r\n\r\n private getNumberPlates = (): CountryNumberPlate[] => [\r\n this.mapNumberPlate(\"Austria\", \"A\", \"AT\", \"+44\"),\r\n this.mapNumberPlate(\"Albania\", \"AL\", \"AL\", \"+335\"),\r\n this.mapNumberPlate(\"Angola\", \"ANG\", \"AO\", \"+244\"),\r\n this.mapNumberPlate(\"Australia\", \"AUS\", \"AU\", \"+43\"),\r\n this.mapNumberPlate(\"Azerbaijan\", \"AZ\", \"AZ\", \"+994\"),\r\n this.mapNumberPlate(\"Belgium\", \"B\", \"BE\", \"+32\"),\r\n this.mapNumberPlate(\"Bulgaria\", \"BG\", \"BG\", \"+359\"),\r\n this.mapNumberPlate(\"Bahrain\", \"BH\", \"BH\", \"+973\"),\r\n this.mapNumberPlate(\"Bosnia and Herzegovina\", \"BIH\", \"BA\", \"+387\"),\r\n this.mapNumberPlate(\"Brazil\", \"BR\", \"BR\", \"+55\"),\r\n this.mapNumberPlate(\"Belarus\", \"BY\", \"BY\", \"+375\"),\r\n this.mapNumberPlate(\"Canada\", \"CAN\", \"CA\", \"+1\"),\r\n this.mapNumberPlate(\"Switzerland\", \"CH\", \"CH\", \"+41\"),\r\n this.mapNumberPlate(\"China\", \"CHN\", \"CN\", \"+86\"),\r\n this.mapNumberPlate(\"Colombia\", \"CO\", \"CO\", \"+57\"),\r\n this.mapNumberPlate(\"Czech Republic\", \"CZ\", \"CZ\", \"+420\"),\r\n this.mapNumberPlate(\"Germany\", \"D\", \"DE\", \"+49\"),\r\n this.mapNumberPlate(\"Denmark\", \"DK\", \"DK\", \"+45\"),\r\n this.mapNumberPlate(\"Algeria\", \"DZ\", \"DZ\", \"+213\"),\r\n this.mapNumberPlate(\"Spain\", \"E\", \"ES\", \"+34\"),\r\n this.mapNumberPlate(\"Kenia\", \"EAK\", \"KE\", \"+254\"),\r\n this.mapNumberPlate(\"Ecuador\", \"EC\", \"EC\", \"+593\"),\r\n this.mapNumberPlate(\"Egypt\", \"EG\", \"EG\", \"+20\"),\r\n this.mapNumberPlate(\"Estonia\", \"EST\", \"EE\", \"+372\"),\r\n this.mapNumberPlate(\"France\", \"F\", \"FR\", \"+33\"),\r\n this.mapNumberPlate(\"Finland\", \"FIN\", \"FI\", \"+358\"),\r\n this.mapNumberPlate(\"Liechtenstein\", \"FL\", \"LI\", \"+423\"),\r\n this.mapNumberPlate(\"Guatemala\", \"G\", \"GT\", \"+502\"),\r\n this.mapNumberPlate(\"Great Britain\", \"GB\", \"GB\", \"+44\"),\r\n this.mapNumberPlate(\"Georgia\", \"GE\", \"GE\", \"+995\"),\r\n this.mapNumberPlate(\"Greece\", \"GR\", \"GR\", \"+30\"),\r\n this.mapNumberPlate(\"Hungary\", \"H\", \"HU\", \"+36\"),\r\n this.mapNumberPlate(\"Hong Kong\", \"HK\", \"HK\", \"+852\"),\r\n this.mapNumberPlate(\"Croatia\", \"HR\", \"HR\", \"+385\"),\r\n this.mapNumberPlate(\"Italy\", \"I\", \"IT\", \"+39\"),\r\n this.mapNumberPlate(\"Israel\", \"IL\", \"IL\", \"+972\"),\r\n this.mapNumberPlate(\"India\", \"IND\", \"IN\", \"+91\"),\r\n this.mapNumberPlate(\"Ireland\", \"IRL\", \"IE\", \"+353\"),\r\n this.mapNumberPlate(\"Iceland\", \"ISL\", \"IS\", \"+354\"),\r\n this.mapNumberPlate(\"Saudi Arabia\", \"KSA\", \"SA\", \"+966\"),\r\n this.mapNumberPlate(\"Kuwait\", \"KWT\", \"KW\", \"+965\"),\r\n this.mapNumberPlate(\"Kazakhstan\", \"KZ\", \"KZ\", \"+7\"),\r\n this.mapNumberPlate(\"Luxemburg\", \"L\", \"LU\", \"+352\"),\r\n this.mapNumberPlate(\"Lebanon\", \"LIB\", \"LB\", \"+961\"),\r\n this.mapNumberPlate(\"Lithuania\", \"LT\", \"LT\", \"+370\"),\r\n this.mapNumberPlate(\"Latvia\", \"LV\", \"LV\", \"+371\"),\r\n this.mapNumberPlate(\"Macao\", \"MAC\", \"MO\", \"+853\"),\r\n this.mapNumberPlate(\"Morocco\", \"MAR\", \"MA\", \"+212\"),\r\n this.mapNumberPlate(\"Monaco\", \"MC\", \"MC\", \"+377\"),\r\n this.mapNumberPlate(\"Mexico\", \"MEX\", \"MX\", \"+52\"),\r\n this.mapNumberPlate(\"Macedonia\", \"MK\", \"MK\", \"+389\"),\r\n this.mapNumberPlate(\"Montenegro\", \"MNE\", \"ME\", \"+382\"),\r\n this.mapNumberPlate(\"Mauritius\", \"MS\", \"MU\", \"+230\"),\r\n this.mapNumberPlate(\"Malaysia\", \"MY\", \"MY\", \"+60\"),\r\n this.mapNumberPlate(\"Norway\", \"N\", \"NO\", \"+47\"),\r\n this.mapNumberPlate(\"Netherlands\", \"NL\", \"NL\", \"+31\"),\r\n this.mapNumberPlate(\"New Zealand\", \"NZL\", \"NZ\", \"+64\"),\r\n this.mapNumberPlate(\"Oman\", \"OM\", \"OM\", \"+968\"),\r\n this.mapNumberPlate(\"Portugal\", \"P\", \"PT\", \"+351\"),\r\n this.mapNumberPlate(\"Peru\", \"PE\", \"PE\", \"+51\"),\r\n this.mapNumberPlate(\"Poland\", \"PL\", \"PL\", \"+48\"),\r\n this.mapNumberPlate(\"Qatar\", \"QA\", \"QA\", \"+974\"),\r\n this.mapNumberPlate(\"Argentina\", \"RA\", \"AR\", \"+54\"),\r\n this.mapNumberPlate(\"Chile\", \"RCH\", \"CL\", \"+56\"),\r\n this.mapNumberPlate(\"Romania\", \"RO\", \"RO\", \"+40\"),\r\n this.mapNumberPlate(\"Uruguay\", \"ROU\", \"UY\", \"+598\"),\r\n this.mapNumberPlate(\"Russia\", \"RUS\", \"RU\", \"+7\"),\r\n this.mapNumberPlate(\"Sweden\", \"S\", \"SE\", \"+46\"),\r\n this.mapNumberPlate(\"Slovakia\", \"SK\", \"SK\", \"+421\"),\r\n this.mapNumberPlate(\"Slovenia\", \"SLO\", \"SI\", \"+386\"),\r\n this.mapNumberPlate(\"Turkey\", \"TR\", \"TR\", \"+90\"),\r\n this.mapNumberPlate(\"Ukraine\", \"UA\", \"UA\", \"+380\"),\r\n this.mapNumberPlate(\"United Arab Emirates\", \"UAE\", \"AE\", \"+971\"),\r\n this.mapNumberPlate(\"United States of America\", \"USA\", \"US\", \"+1\"),\r\n this.mapNumberPlate(\"Serbia\", \"YU\", \"RS\", \"+381\"),\r\n this.mapNumberPlate(\"Venezuela\", \"YV\", \"VU\", \"+58\"),\r\n this.mapNumberPlate(\"South Africa\", \"ZA\", \"ZA\", \"+27\"),\r\n ];\r\n\r\n private getNumberPlatesDVA = (): CountryNumberPlate[] => [\r\n this.mapNumberPlate(\"Belgium\", \"B\", \"BE\", \"+32\"),\r\n this.mapNumberPlate(\"Germany\", \"D\", \"DE\", \"+49\"),\r\n this.mapNumberPlate(\"Denmark\", \"DK\", \"DK\", \"+45\"),\r\n this.mapNumberPlate(\"France\", \"F\", \"FR\", \"+33\"),\r\n this.mapNumberPlate(\"Great Britain\", \"GB\", \"GB\", \"+44\"),\r\n this.mapNumberPlate(\"Ireland\", \"IRL\", \"IE\", \"+353\"),\r\n this.mapNumberPlate(\"Netherlands\", \"NL\", \"NL\", \"+31\"),\r\n ];\r\n\r\n private mapNumberPlate = (\r\n name: string,\r\n numberPlateCode: string,\r\n countryCode: string,\r\n phoneNumberPrefix: string\r\n ): CountryNumberPlate => ({\r\n name,\r\n countryCode,\r\n numberPlateCode,\r\n phoneNumberPrefix,\r\n });\r\n\r\n public getCountriesNumberPlates = () => this.numberPlates;\r\n public getTopCountriesNumberPlatesDVA = () => this.getNumberPlatesDVA();\r\n\r\n public findNumberPlatePrefix = (countryCode?: string): string => {\r\n if (isUndefined(countryCode) || countryCode === \"\") {\r\n return \"\";\r\n }\r\n\r\n const found = findWhere(this.numberPlates, { countryCode : countryCode.toUpperCase() });\r\n if (isUndefined(found)) {\r\n return \"\";\r\n }\r\n\r\n return found.numberPlateCode;\r\n };\r\n\r\n public isValidNumberPlateCode = (countryCode?: string): boolean => {\r\n if (isUndefined(countryCode) || countryCode === \"\") {\r\n return false;\r\n }\r\n\r\n return this.numberPlates.some(plate => plate.numberPlateCode === countryCode.toUpperCase());\r\n };\r\n\r\n public isValidCountryCode = (countryCode?: string): boolean => {\r\n if (isUndefined(countryCode) || countryCode === \"\") {\r\n return false;\r\n }\r\n\r\n return this.numberPlates.some(plate => plate.countryCode === countryCode.toUpperCase());\r\n };\r\n}\r\n\r\nconst numberPlatePrefixToIsoCountryCode = Object.fromEntries(\r\n new CountriesNumberPlates()\r\n .getCountriesNumberPlates()\r\n .map((x) => [x.numberPlateCode, x.countryCode])\r\n);\r\n\r\nconst isoCountryCodeToNumberPlatePrefix = Object.fromEntries(\r\n new CountriesNumberPlates()\r\n .getCountriesNumberPlates()\r\n .map((x) => [x.countryCode, x.numberPlateCode])\r\n);\r\n\r\n\r\nexport function convertNumberPlatePrefixToIsoCountryCode(\r\n numberPlateCode: string\r\n): string {\r\n const isoCountryCode = numberPlatePrefixToIsoCountryCode[numberPlateCode];\r\n if (!isoCountryCode) {\r\n throw new Error(`Can't find country code that corresponds to ${numberPlateCode}`);\r\n }\r\n return isoCountryCode;\r\n}\r\n\r\nexport function convertIsoCountryCodeToNumberPlatePrefix(\r\n isoCode: string\r\n): string {\r\n const numberPlatePrefix = isoCountryCodeToNumberPlatePrefix[isoCode.toUpperCase()];\r\n if (!numberPlatePrefix) {\r\n throw new Error(`Can't find country code that corresponds to ${isoCode}`);\r\n }\r\n return numberPlatePrefix;\r\n}\r\n\r\nexport function moveCountryToTop(countryCode: string, countryNumberplates: CountryNumberPlate[]): CountryNumberPlate[]{\r\n const countryNumberPlate = findWhere(countryNumberplates, { countryCode : countryCode.toUpperCase() });\r\n\r\n if(!countryNumberPlate){\r\n return countryNumberplates;\r\n }\r\n\r\n const index = countryNumberplates.indexOf(countryNumberPlate,0);\r\n\r\n if (index > -1) {\r\n countryNumberplates.splice(index, 1);\r\n }\r\n\r\n countryNumberplates.unshift(countryNumberPlate)\r\n\r\n return countryNumberplates;\r\n}\r\n\r\nexport function getCountryCodeByLanguage(language: string): string {\r\n switch(language) { \r\n case languages.en: { \r\n return \"NL\";\r\n } \r\n case languages.nl: { \r\n return \"NL\";\r\n } \r\n case languages.de: { \r\n return \"DE\";\r\n } \r\n case languages.fr: { \r\n return \"FR\";\r\n }\r\n default: { \r\n return \"NL\";\r\n } \r\n } \r\n}\r\n","export type DeRegion = {\r\n code: string\r\n name: string\r\n}\r\n\r\nfunction region(code: string, name: string) : DeRegion {\r\n return { code, name };\r\n}\r\n\r\nconst deRegions : DeRegion[] = [\r\n region(\"0\", \"Diplomaten\"),\r\n region(\"A\", \"Augsburg, Bayern\"),\r\n region(\"AA\", \"Ostalbkreis (Aalen), Baden-Württemberg\"),\r\n region(\"AB\", \"Aschaffenburg, Bayern\"),\r\n region(\"ABG\", \"Altenburger Land, Thüringen\"),\r\n region(\"ABI\", \"Anhalt-Bitterfeld, Sachsen-Anhalt\"),\r\n region(\"AC\", \"Aachen, Nordrhein-Westfalen\"),\r\n region(\"AE\", \"Auerbach, Sachsen\"),\r\n region(\"AH\", \"Ahaus, Nordrhein-Westfalen\"),\r\n region(\"AIB\", \"Bad Aibling, Bayern\"),\r\n region(\"AIC\", \"Aichach-Friedberg, Bayern\"),\r\n region(\"AK\", \"Altenkirchen, Rheinland-Pfalz\"),\r\n region(\"AL\", \"Altena, Nordrhein-Westfalen\"),\r\n region(\"ALF\", \"Alfeld (Leine), Niedersachsen\"),\r\n region(\"ALS\", \"Alsfeld, Hessen\"),\r\n region(\"ALZ\", \"Alzenau, Bayern\"),\r\n region(\"AM\", \"Amberg, Bayern\"),\r\n region(\"AN\", \"Ansbach, Bayern\"),\r\n region(\"ANA\", \"Annaberg, Sachsen\"),\r\n region(\"ANG\", \"Angermünde, Brandenburg\"),\r\n region(\"ANK\", \"Anklam, Mecklenburg-Vorpommern\"),\r\n region(\"AÖ\", \"Altötting, Bayern\"),\r\n region(\"AP\", \"Weimarer Land (Apolda), Thüringen\"),\r\n region(\"APD\", \"Apolda, Thüringen\"),\r\n region(\"AR\", \"Arnsberg, Nordrhein-Westfalen\"),\r\n region(\"ARN\", \"Arnstadt, Thüringen\"),\r\n region(\"ART\", \"Artern, Thüringen\"),\r\n region(\"AS\", \"Amberg-Sulzbach, Bayern\"),\r\n region(\"ASD\", \"Aschendorf-Hümmling, Niedersachsen\"),\r\n region(\"ASL\", \"Aschersleben-Staßfurt, Sachsen-Anhalt\"),\r\n region(\"ASZ\", \"Aue-Schwarzenberg, Sachsen\"),\r\n region(\"AT\", \"Altentreptow, Mecklenburg-Vorpommern\"),\r\n region(\"AU\", \"Aue, Sachsen\"),\r\n region(\"AUR\", \"Aurich, Niedersachsen\"),\r\n region(\"AW\", \"Ahrweiler, Rheinland-Pfalz\"),\r\n region(\"AZ\", \"Alzey-Worms, Rheinland-Pfalz\"),\r\n region(\"AZE\", \"Anhalt-Zerbst, Sachsen-Anhalt\"),\r\n region(\"B\", \"Berlin, Berlin\"),\r\n region(\"BA\", \"Bamberg, Bayern\"),\r\n region(\"BAD\", \"Baden-Baden, Baden-Württemberg\"),\r\n region(\"BAR\", \"Barnim, Brandenburg\"),\r\n region(\"BB\", \"Böblingen, Baden-Württemberg\"),\r\n region(\"BBG\", \"Bernburg, Sachsen-Anhalt\"),\r\n region(\"BC\", \"Biberach, Baden-Württemberg\"),\r\n region(\"BCH\", \"Buchen (Odenwald), Baden-Württemberg\"),\r\n region(\"BD\", \"Bundestag, -rat, -präsidialamt,-regierung und -verfassungsgericht\"),\r\n region(\"BE\", \"Beckum, Nordrhein-Westfalen\"),\r\n region(\"BED\", \"Brand-Erbisdorf, Sachsen\"),\r\n region(\"BEI\", \"Beilngries, Bayern\"),\r\n region(\"BEL\", \"Belzig, Brandenburg\"),\r\n region(\"BER\", \"Bernau, Brandenburg\"),\r\n region(\"BF\", \"Burgsteinfurt, Nordrhein-Westfalen\"),\r\n region(\"BGD\", \"Berchtesgaden, Bayern\"),\r\n region(\"BGL\", \"Berchtesgadener Land, Bayern\"),\r\n region(\"BH\", \"Bühl, Baden-Württemberg\"),\r\n region(\"BI\", \"Bielefeld, Nordrhein-Westfalen\"),\r\n region(\"BID\", \"Biedenkopf, Hessen\"),\r\n region(\"BIN\", \"Bingen am Rhein, Rheinland-Pfalz\"),\r\n region(\"BIR\", \"Birkenfeld, Rheinland-Pfalz\"),\r\n region(\"BIT\", \"Bitburg-Prüm (Eifelkreis), Rheinland-Pfalz\"),\r\n region(\"BIW\", \"Bischofswerda, Sachsen\"),\r\n region(\"BK\", \"Backnang, Baden-Württemberg; Landkreis Börde Sachsen-Anhalt\"),\r\n region(\"BKS\", \"Bernkastel-Kues, Rheinland-Pfalz\"),\r\n region(\"BL\", \"Zollernalbkreis (Balingen), Baden-Württemberg\"),\r\n region(\"BLB\", \"Berleburg, Nordrhein-Westfalen\"),\r\n region(\"BLK\", \"Burgenlandkreis, Sachsen-Anhalt\"),\r\n region(\"BM\", \"Rhein-Erft-Kreis (Bergheim), Nordrhein-Westfalen\"),\r\n region(\"BN\", \"Bonn, Nordrhein-Westfalen\"),\r\n region(\"BNA\", \"Borna, Sachsen\"),\r\n region(\"BO\", \"Bochum, Nordrhein-Westfalen\"),\r\n region(\"BÖ\", \"Bördekreis, Sachsen-Anhalt\"),\r\n region(\"BOG\", \"Bogen, Bayern\"),\r\n region(\"BOH\", \"Bocholt, Nordrhein-Westfalen\"),\r\n region(\"BOR\", \"Borken, Nordrhein-Westfalen\"),\r\n region(\"BOT\", \"Bottrop, Nordrhein-Westfalen\"),\r\n region(\"BP\", \"Bundespolizei\"),\r\n region(\"BR\", \"Bruchsal, Baden-Württemberg\"),\r\n region(\"BRA\", \"Wesermarsch (Brake), Niedersachsen\"),\r\n region(\"BRB\", \"Brandenburg, Brandenburg\"),\r\n region(\"BRG\", \"Burg, Sachsen-Anhalt\"),\r\n region(\"BRI\", \"Brilon, Nordrhein-Westfalen\"),\r\n region(\"BRK\", \"Bad Brückenau, Bayern\"),\r\n region(\"BRL\", \"Blankenburg (Braunlage), Niedersachsen\"),\r\n region(\"BRV\", \"Bremervörde, Niedersachsen\"),\r\n region(\"BS\", \"Braunschweig, Niedersachsen\"),\r\n region(\"BSB\", \"Bersenbrück, Niedersachsen\"),\r\n region(\"BSK\", \"Beeskow, Brandenburg\"),\r\n region(\"BT\", \"Bayreuth, Bayern\"),\r\n region(\"BTF\", \"Bitterfeld, Sachsen-Anhalt\"),\r\n region(\"BU\", \"Burgdorf, Niedersachsen\"),\r\n region(\"BÜD\", \"Büdingen, Hessen\"),\r\n region(\"BUL\", \"Burglengenfeld, Bayern\"),\r\n region(\"BÜR\", \"Büren, Nordrhein-Westfalen\"),\r\n region(\"BÜS\", \"Büsingen (Konstanz), Baden-Württemberg\"),\r\n region(\"BÜZ\", \"Bützow, Mecklenburg-Vorpommern\"),\r\n region(\"BW\", \"Wasser- und Schifffahrtsverwaltung des Bundes\"),\r\n region(\"BZ\", \"Bautzen, Sachsen\"),\r\n region(\"BZA\", \"Bergzabern, Rheinland-Pfalz\"),\r\n region(\"C\", \"Chemnitz, Sachsen\"),\r\n region(\"CA\", \"Calau, Brandenburg\"),\r\n region(\"CAS\", \"Castrop-Rauxel, Nordrhein-Westfalen\"),\r\n region(\"CB\", \"Cottbus, Brandenburg\"),\r\n region(\"CE\", \"Celle, Niedersachsen\"),\r\n region(\"CHA\", \"Cham, Bayern\"),\r\n region(\"CLP\", \"Cloppenburg, Niedersachsen\"),\r\n region(\"CLZ\", \"Clausthal-Zellerfeld, Niedersachsen\"),\r\n region(\"CO\", \"Coburg, Bayern\"),\r\n region(\"COC\", \"Cochem-Zell, Rheinland-Pfalz\"),\r\n region(\"COE\", \"Coesfeld, Nordrhein-Westfalen\"),\r\n region(\"CR\", \"Crailsheim, Baden-Württemberg\"),\r\n region(\"CUX\", \"Cuxhaven, Niedersachsen\"),\r\n region(\"CW\", \"Calw, Baden-Württemberg\"),\r\n region(\"D\", \"Düsseldorf, Nordrhein-Westfalen\"),\r\n region(\"DA\", \"Darmstadt, Hessen\"),\r\n region(\"DAH\", \"Dachau, Bayern\"),\r\n region(\"DAN\", \"Lüchow-Dannenberg, Niedersachsen\"),\r\n region(\"DAU\", \"Daun, Rheinland-Pfalz\"),\r\n region(\"DBR\", \"Bad Doberan, Mecklenburg-Vorpommern\"),\r\n region(\"DD\", \"Dresden, Sachsen\"),\r\n region(\"DE\", \"Dessau-Roßlau, Sachsen-Anhalt\"),\r\n region(\"DEG\", \"Deggendorf, Bayern\"),\r\n region(\"DEL\", \"Delmenhorst, Niedersachsen\"),\r\n region(\"DGF\", \"Dingolfing-Landau, Bayern\"),\r\n region(\"DH\", \"Diepholz, Niedersachsen\"),\r\n region(\"DI\", \"Dieburg, Hessen\"),\r\n region(\"DIL\", \"Dillkreis (Dillenburg), Hessen\"),\r\n region(\"DIN\", \"Dinslaken, Nordrhein-Westfalen\"),\r\n region(\"DIZ\", \"Diez, Rheinland-Pfalz\"),\r\n region(\"DKB\", \"Dinkelsbühl, Bayern\"),\r\n region(\"DL\", \"Döbeln, Sachsen\"),\r\n region(\"DLG\", \"Dillingen a.d. Donau, Bayern\"),\r\n region(\"DM\", \"Demmin, Mecklenburg-Vorpommern\"),\r\n region(\"DN\", \"Düren, Nordrhein-Westfalen\"),\r\n region(\"DO\", \"Dortmund, Nordrhein-Westfalen\"),\r\n region(\"DON\", \"Donau-Ries (Donauwörth), Bayern\"),\r\n region(\"DS\", \"Donaueschingen, Baden-Württemberg\"),\r\n region(\"DT\", \"Lippe (Detmold), Nordrhein-Westfalen\"),\r\n region(\"DU\", \"Duisburg, Nordrhein-Westfalen\"),\r\n region(\"DUD\", \"Duderstadt, Niedersachsen\"),\r\n region(\"DÜW\", \"Bad Dürkheim, Rheinland-Pfalz\"),\r\n region(\"DW\", \"Dippoldiswalde, Sachsen\"),\r\n region(\"DZ\", \"Delitzsch, Sachsen\"),\r\n region(\"E\", \"Essen, Nordrhein-Westfalen\"),\r\n region(\"EA\", \"Eisenach, Thüringen\"),\r\n region(\"EB\", \"Eilenburg, Sachsen\"),\r\n region(\"EBE\", \"Ebersberg, Bayern\"),\r\n region(\"EBN\", \"Ebern, Bayern\"),\r\n region(\"EBS\", \"Ebermannstadt, Bayern\"),\r\n region(\"ECK\", \"Eckernförde, Schleswig-Holstein\"),\r\n region(\"ED\", \"Erding, Bayern\"),\r\n region(\"EE\", \"Elbe-Elster, Brandenburg\"),\r\n region(\"EF\", \"Erfurt, Thüringen\"),\r\n region(\"EG\", \"Eggenfelden, Bayern\"),\r\n region(\"EH\", \"Eisenhüttenstadt, Brandenburg\"),\r\n region(\"EHI\", \"Ehingen (Donau), Baden-Württemberg\"),\r\n region(\"EI\", \"Eichstätt, Bayern\"),\r\n region(\"EIC\", \"Eichsfeld, Thüringen\"),\r\n region(\"EIH\", \"Eichstätt, Bayern\"),\r\n region(\"EIL\", \"Eisleben, Sachsen-Anhalt\"),\r\n region(\"EIN\", \"Einbeck, Niedersachsen\"),\r\n region(\"EIS\", \"Eisenberg, Thüringen\"),\r\n region(\"EL\", \"Emsland, Niedersachsen\"),\r\n region(\"EM\", \"Emmendingen, Baden-Württemberg\"),\r\n region(\"EMD\", \"Emden, Niedersachsen\"),\r\n region(\"EMS\", \"Rhein-Lahn-Kreis (Bad Ems), Rheinland-Pfalz\"),\r\n region(\"EN\", \"Ennepe-Ruhr-Kreis, Nordrhein-Westfalen\"),\r\n region(\"ER\", \"Erlangen, Bayern\"),\r\n region(\"ERB\", \"Odenwaldkreis (Erbach), Hessen\"),\r\n region(\"ERH\", \"Erlangen-Höchstadt, Bayern\"),\r\n region(\"ERK\", \"Erkelenz, Nordrhein-Westfalen\"),\r\n region(\"ERZ\", \"Erzgebirgskreis, Sachsen\"),\r\n region(\"ES\", \"Esslingen, Baden-Württemberg\"),\r\n region(\"ESA\", \"Eisenach, Thüringen\"),\r\n region(\"ESB\", \"Eschenbach in der Oberpfalz, Bayern\"),\r\n region(\"ESW\", \"Werra-Meißner-Kreis (Eschwege), Hessen\"),\r\n region(\"EU\", \"Euskirchen, Nordrhein-Westfalen\"),\r\n region(\"EUT\", \"Eutin, Schleswig-Holstein\"),\r\n region(\"EW\", \"Eberswalde, Brandenburg\"),\r\n region(\"F\", \"Frankfurt am Main, Hessen\"),\r\n region(\"FAL\", \"Fallingbostel, Niedersachsen\"),\r\n region(\"FB\", \"Wetteraukreis (Friedberg), Hessen\"),\r\n region(\"FD\", \"Fulda, Hessen\"),\r\n region(\"FDB\", \"Friedberg, Bayern\"),\r\n region(\"FDS\", \"Freudenstadt, Baden-Württemberg\"),\r\n region(\"FEU\", \"Feuchtwangen, Bayern\"),\r\n region(\"FF\", \"Frankfurt (Oder), Brandenburg\"),\r\n region(\"FFB\", \"Fürstenfeldbruck, Bayern\"),\r\n region(\"FG\", \"Mittelsachsen (Freiberg), Sachsen\"),\r\n region(\"FH\", \"Main-Taunus-Kreis (Frankfurt/Main-Höchst), Hessen\"),\r\n region(\"FI\", \"Finsterwalde, Brandenburg\"),\r\n region(\"FKB\", \"Frankenberg (Eder), Hessen\"),\r\n region(\"FL\", \"Flensburg, Schleswig-Holstein\"),\r\n region(\"FLÖ\", \"Flöha, Sachsen\"),\r\n region(\"FN\", \"Bodenseekreis (Friedrichshafen), Baden-Württemberg\"),\r\n region(\"FO\", \"Forchheim, Bayern\"),\r\n region(\"FOR\", \"Forst, Brandenburg\"),\r\n region(\"FR\", \"Freiburg im Breisgau, Baden-Württemberg\"),\r\n region(\"FRG\", \"Freyung-Grafenau, Bayern\"),\r\n region(\"FRI\", \"Friesland, Niedersachsen\"),\r\n region(\"FRW\", \"Bad Freienwalde, Brandenburg\"),\r\n region(\"FS\", \"Freising, Bayern\"),\r\n region(\"FT\", \"Frankenthal, Rheinland-Pfalz\"),\r\n region(\"FTL\", \"Freital, Sachsen\"),\r\n region(\"FÜ\", \"Fürth, Bayern\"),\r\n region(\"FÜS\", \"Füssen, Bayern\"),\r\n region(\"FW\", \"Fürstenwalde, Brandenburg\"),\r\n region(\"FZ\", \"Fritzlar-Homberg, Hessen\"),\r\n region(\"G\", \"Gera, Thüringen\"),\r\n region(\"GA\", \"Gardelegen, Sachsen-Anhalt\"),\r\n region(\"GAN\", \"Bad Gandersheim, Niedersachsen\"),\r\n region(\"GAP\", \"Garmisch-Partenkirchen, Bayern\"),\r\n region(\"GC\", \"Glauchau, Sachsen\"),\r\n region(\"GD\", \"Schwäbisch Gmünd, Baden-Württemberg\"),\r\n region(\"GDB\", \"Gadebusch, Mecklenburg-Vorpommern\"),\r\n region(\"GE\", \"Gelsenkirchen, Nordrhein-Westfalen\"),\r\n region(\"GEL\", \"Geldern, Nordrhein-Westfalen\"),\r\n region(\"GEM\", \"Gmünden am Main, Bayern\"),\r\n region(\"GEO\", \"Gerolzhofen, Bayern\"),\r\n region(\"GER\", \"Germersheim, Rheinland-Pfalz\"),\r\n region(\"GF\", \"Gifhorn, Niedersachsen\"),\r\n region(\"GG\", \"Groß-Gerau, Hessen\"),\r\n region(\"GHA\", \"Geithain, Sachsen\"),\r\n region(\"GHC\", \"Gräfenhainichen, Sachsen-Anhalt\"),\r\n region(\"GI\", \"Gießen, Hessen\"),\r\n region(\"GK\", \"Geilenkirchen-Heinsberg, Nordrhein-Westfalen\"),\r\n region(\"GL\", \"Rheinisch-Bergischer Kreis (Bergisch Gladbach), Nordrhein-Westfalen\"),\r\n region(\"GLA\", \"Gladbeck, Nordrhein-Westfalen\"),\r\n region(\"GM\", \"Oberbergischer Kreis (Gummersbach), Nordrhein-Westfalen\"),\r\n region(\"GMN\", \"Grimmen, Mecklenburg-Vorpommern\"),\r\n region(\"GN\", \"Gelnhausen, Hessen\"),\r\n region(\"GNT\", \"Genthin, Sachsen-Anhalt\"),\r\n region(\"GÖ\", \"Göttingen, Niedersachsen\"),\r\n region(\"GOA\", \"Sankt Goar, Rheinland-Pfalz\"),\r\n region(\"GOH\", \"St. Goarshausen, Rheinland-Pfalz\"),\r\n region(\"GP\", \"Göppingen, Baden-Württemberg\"),\r\n region(\"GR\", \"Görlitz, Sachsen\"),\r\n region(\"GRA\", \"Grafenau, Bayern\"),\r\n region(\"GRH\", \"Großenhain, Sachsen\"),\r\n region(\"GRI\", \"Bad Griesbach i. Rottal, Bayern\"),\r\n region(\"GRM\", \"Grimma, Sachsen\"),\r\n region(\"GRS\", \"Gransee, Brandenburg\"),\r\n region(\"GRZ\", \"Greiz, Thüringen\"),\r\n region(\"GS\", \"Goslar, Niedersachsen\"),\r\n region(\"GT\", \"Gütersloh, Nordrhein-Westfalen\"),\r\n region(\"GTH\", \"Gotha, Thüringen\"),\r\n region(\"GÜ\", \"Güstrow, Mecklenburg-Vorpommern\"),\r\n region(\"GUB\", \"Guben, Brandenburg\"),\r\n region(\"GUN\", \"Gunzenhausen, Bayern\"),\r\n region(\"GV\", \"Grevenbroich, Nordrhein-Westfalen\"),\r\n region(\"GVM\", \"Grevesmühlen, Mecklenburg-Vorpommern\"),\r\n region(\"GW\", \"Vorpommern-Greifswald, Mecklenburg-Vorpommern\"),\r\n region(\"GZ\", \"Günzburg, Bayern\"),\r\n region(\"H\", \"Hannover, Niedersachsen\"),\r\n region(\"HA\", \"Hagen, Nordrhein-Westfalen\"),\r\n region(\"HAB\", \"Hammelburg, Bayern\"),\r\n region(\"HAL\", \"Halle, Sachsen-Anhalt\"),\r\n region(\"HAM\", \"Hamm, Nordrhein-Westfalen\"),\r\n region(\"HAS\", \"Haßberge (Haßfurt), Bayern\"),\r\n region(\"HB\", \"Hansestadt Bremen, Freie Hansestadt Bremen\"),\r\n region(\"HBN\", \"Hildburghausen, Thüringen\"),\r\n region(\"HBS\", \"Halberstadt, Sachsen-Anhalt\"),\r\n region(\"HC\", \"Hainichen, Sachsen\"),\r\n region(\"HCH\", \"Hechingen, Baden-Württemberg\"),\r\n region(\"HD\", \"Heidelberg, Baden-Württemberg\"),\r\n region(\"HDH\", \"Heidenheim (Brenz), Baden-Württemberg\"),\r\n region(\"HDL\", \"Haldensleben, Sachsen-Anhalt\"),\r\n region(\"HE\", \"Helmstedt, Niedersachsen\"),\r\n region(\"HEB\", \"Hersbruck, Bayern\"),\r\n region(\"HEF\", \"Hersfeld-Rotenburg, Hessen\"),\r\n region(\"HEI\", \"Dithmarschen (Heide), Schleswig-Holstein\"),\r\n region(\"HER\", \"Herne, Nordrhein-Westfalen\"),\r\n region(\"HET\", \"Hettstedt, Sachsen-Anhalt\"),\r\n region(\"HF\", \"Herford, Nordrhein-Westfalen\"),\r\n region(\"HG\", \"Hochtaunuskreis (Bad Homburg), Hessen\"),\r\n region(\"HGN\", \"Hagenow, Mecklenburg-Vorpommern\"),\r\n region(\"HGW\", \"Hansestadt Greifswald, Mecklenburg-Vorpommern\"),\r\n region(\"HH\", \"Hansestadt Hamburg, Freie und Hansestadt Hamburg\"),\r\n region(\"HHM\", \"Hohenmölsen, Sachsen-Anhalt\"),\r\n region(\"HI\", \"Hildesheim, Niedersachsen\"),\r\n region(\"HIG\", \"Heiligenstadt, Thüringen\"),\r\n region(\"HIP\", \"Hilpoltstein, Bayern\"),\r\n region(\"HK\", \"Heidekreis, Niedersachsen\"),\r\n region(\"HL\", \"Hansestadt Lübeck, Schleswig-Holstein\"),\r\n region(\"HM\", \"Hameln-Pyrmont, Niedersachsen\"),\r\n region(\"HMÜ\", \"Hann. Münden, Niedersachsen\"),\r\n region(\"HN\", \"Heilbronn, Baden-Württemberg\"),\r\n region(\"HO\", \"Hof, Bayern\"),\r\n region(\"HOG\", \"Hofgeismar, Hessen\"),\r\n region(\"HOH\", \"Hofheim in Unterfranken, Bayern\"),\r\n region(\"HOL\", \"Holzminden, Niedersachsen\"),\r\n region(\"HOM\", \"Saarpfalz-Kreis (Homburg), Saarland\"),\r\n region(\"HOR\", \"Freudenstadt (Horb am Neckar), Baden-Württemberg\"),\r\n region(\"HÖS\", \"Erlangen-Höchstadt, Bayern\"),\r\n region(\"HOT\", \"Hohenstein-Ernstthal, Sachsen\"),\r\n region(\"HP\", \"Bergstraße (Heppenheim), Hessen\"),\r\n region(\"HR\", \"Schwalm-Eder-Kreis (Homberg), Hessen\"),\r\n region(\"HRO\", \"Hansestadt Rostock, Mecklenburg-Vorpommern\"),\r\n region(\"HS\", \"Heinsberg, Nordrhein-Westfalen\"),\r\n region(\"HSK\", \"Hochsauerlandkreis, Nordrhein-Westfalen\"),\r\n region(\"HST\", \"Hansestadt Stralsund, Mecklenburg-Vorpommern\"),\r\n region(\"HU\", \"Hanau, Hessen\"),\r\n region(\"HÜN\", \"Hünfeld, Hessen\"),\r\n region(\"HUS\", \"Husum, Schleswig-Holstein\"),\r\n region(\"HV\", \"Havelberg, Sachsen-Anhalt\"),\r\n region(\"HVL\", \"Havelland (Rathenow), Brandenburg\"),\r\n region(\"HW\", \"Halle (Westfalen), Nordrhein-Westfalen\"),\r\n region(\"HWI\", \"Hansestadt Wismar, Mecklenburg-Vorpommern\"),\r\n region(\"HX\", \"Höxter, Nordrhein-Westfalen\"),\r\n region(\"HY\", \"Hoyerswerda, Sachsen\"),\r\n region(\"HZ\", \"Landkreis Harz, Sachsen-Anhalt (früher: Herzberg, Brandenburg)\"),\r\n region(\"IGB\", \"St. Ingbert, Saarland\"),\r\n region(\"IK\", \"Ilm-Kreis, Thüringen\"),\r\n region(\"IL\", \"Ilmenau, Thüringen\"),\r\n region(\"ILL\", \"Illertissen, Bayern\"),\r\n region(\"IN\", \"Ingolstadt, Bayern\"),\r\n region(\"IS\", \"Iserlohn, Nordrhein-Westfalen\"),\r\n region(\"IZ\", \"Steinburg (Itzehoe), Schleswig-Holstein\"),\r\n region(\"J\", \"Jena, Thüringen\"),\r\n region(\"JB\", \"Jüterbog, Brandenburg\"),\r\n region(\"JE\", \"Jessen, Sachsen-Anhalt\"),\r\n region(\"JEV\", \"Friesland (Jever), Niedersachsen\"),\r\n region(\"JL\", \"Jerichower Land, Sachsen-Anhalt\"),\r\n region(\"JÜL\", \"Jülich, Nordrhein-Westfalen\"),\r\n region(\"K\", \"Köln, Nordrhein-Westfalen\"),\r\n region(\"KA\", \"Karlsruhe, Baden-Württemberg\"),\r\n region(\"KAR\", \"Main-Spessart (Karlstadt), Bayern\"),\r\n region(\"KB\", \"Waldeck-Frankenberg (Korbach), Hessen\"),\r\n region(\"KC\", \"Kronach, Bayern\"),\r\n region(\"KE\", \"Kempten (Allgäu), Bayern\"),\r\n region(\"KEH\", \"Kelheim, Bayern\"),\r\n region(\"KEL\", \"Kehl, Baden-Württemberg\"),\r\n region(\"KEM\", \"Kemnath, Bayern\"),\r\n region(\"KF\", \"Kaufbeuren, Bayern\"),\r\n region(\"KG\", \"Bad Kissingen, Bayern\"),\r\n region(\"KH\", \"Bad Kreuznach, Rheinland-Pfalz\"),\r\n region(\"KI\", \"Kiel, Schleswig-Holstein\"),\r\n region(\"KIB\", \"Donnersbergkreis (Kirchheimbolanden), Rheinland-Pfalz\"),\r\n region(\"KK\", \"Kempen-Krefeld, Nordrhein-Westfalen\"),\r\n region(\"KL\", \"Kaiserslautern, Rheinland-Pfalz\"),\r\n region(\"KLE\", \"Kleve, Nordrhein-Westfalen\"),\r\n region(\"KLZ\", \"Klötze, Sachsen-Anhalt\"),\r\n region(\"KM\", \"Kamenz, Sachsen\"),\r\n region(\"KN\", \"Konstanz, Baden-Württemberg\"),\r\n region(\"KO\", \"Koblenz, Rheinland-Pfalz\"),\r\n region(\"KÖN\", \"Bad Königshofen i. Grabfeld, Bayern\"),\r\n region(\"KÖT\", \"Köthen, Sachsen-Anhalt\"),\r\n region(\"KÖZ\", \"Kötzting, Bayern\"),\r\n region(\"KR\", \"Krefeld, Nordrhein-Westfalen\"),\r\n region(\"KRU\", \"Krumbach, Bayern\"),\r\n region(\"KS\", \"Kassel, Hessen\"),\r\n region(\"KT\", \"Kitzingen, Bayern\"),\r\n region(\"KU\", \"Kulmbach, Bayern\"),\r\n region(\"KÜN\", \"Hohenlohekreis (Künzelsau), Baden-Württemberg\"),\r\n region(\"KUS\", \"Kusel, Rheinland-Pfalz\"),\r\n region(\"KW\", \"Königs Wusterhausen, Brandenburg\"),\r\n region(\"KY\", \"Kyritz, Brandenburg\"),\r\n region(\"KYF\", \"Kyffhäuserkreis, Thüringen\"),\r\n region(\"L\", \"Leipzig, Sachsen (früher: Lahn-Dill-Kreis (Wetzlar), Hessen)\"),\r\n region(\"LA\", \"Landshut, Bayern\"),\r\n region(\"LAN\", \"Dingolfing-Landau, Bayern\"),\r\n region(\"LAT\", \"Vogelsbergkreis (Lauterbach), Hessen\"),\r\n region(\"LAU\", \"Nürnberger Land (Lauf a.d. Pegnitz), Bayern\"),\r\n region(\"LB\", \"Ludwigsburg, Baden-Württemberg\"),\r\n region(\"LBS\", \"Lobenstein, Thüringen\"),\r\n region(\"LBZ\", \"Lübz, Mecklenburg-Vorpommern\"),\r\n region(\"LC\", \"Luckau, Brandenburg\"),\r\n region(\"LD\", \"Landau in der Pfalz, Rheinland-Pfalz\"),\r\n region(\"LDK\", \"Lahn-Dill-Kreis (Wetzlar), Hessen\"),\r\n region(\"LDS\", \"Dahme-Spreewald, Brandenburg\"),\r\n region(\"LE\", \"Lemgo, Nordrhein-Westfalen\"),\r\n region(\"LEO\", \"Leonberg (Württemberg), Baden-Württemberg\"),\r\n region(\"LER\", \"Leer (Ostfriesland), Niedersachsen\"),\r\n region(\"LEV\", \"Leverkusen, Nordrhein-Westfalen\"),\r\n region(\"LF\", \"Laufen, Bayern\"),\r\n region(\"LG\", \"Lüneburg, Niedersachsen\"),\r\n region(\"LH\", \"Lüdinghausen, Nordrhein-Westfalen\"),\r\n region(\"LI\", \"Lindau (Bodensee), Bayern\"),\r\n region(\"LIB\", \"Bad Liebenwerda, Brandenburg\"),\r\n region(\"LIF\", \"Lichtenfels, Bayern\"),\r\n region(\"LIN\", \"Lingen (Ems), Niedersachsen\"),\r\n region(\"LIP\", \"Lippe (Detmold), Nordrhein-Westfalen\"),\r\n region(\"LK\", \"Lübbecke, Nordrhein-Westfalen\"),\r\n region(\"LL\", \"Landsberg am Lech, Bayern\"),\r\n region(\"LM\", \"Limburg-Weilburg, Hessen\"),\r\n region(\"LN\", \"Lübben, Brandenburg\"),\r\n region(\"LÖ\", \"Lörrach, Baden-Württemberg\"),\r\n region(\"LÖB\", \"Löbau, Sachsen\"),\r\n region(\"LOH\", \"Lohr am Main, Bayern\"),\r\n region(\"LOS\", \"Oder-Spree, Brandenburg\"),\r\n region(\"LP\", \"Lippstadt, Nordrhein-Westfalen\"),\r\n region(\"LR\", \"Lahr (Schwarzwald), Baden-Württemberg\"),\r\n region(\"LRO\", \"Landkreis Rostock, Mecklenburg-Vorpommern\"),\r\n region(\"LS\", \"Märkischer Kreis (Lüdenscheid), Nordrhein-Westfalen\"),\r\n region(\"LSZ\", \"Bad Langensalza, Thüringen\"),\r\n region(\"LU\", \"Ludwigshafen am Rhein, Rheinland-Pfalz\"),\r\n region(\"LÜD\", \"Lüdenscheid, Nordrhein-Westfalen\"),\r\n region(\"LUK\", \"Luckenwalde, Brandenburg\"),\r\n region(\"LÜN\", \"Lünen, Nordrhein-Westfalen\"),\r\n region(\"LUP\", \"Ludwigslust-Parchim, Mecklenburg-Vorpommern\"),\r\n region(\"LWL\", \"Ludwigslust, Mecklenburg-Vorpommern\"),\r\n region(\"M\", \"München, Bayern\"),\r\n region(\"MA\", \"Mannheim, Baden-Württemberg\"),\r\n region(\"MAB\", \"Marienberg, Sachsen\"),\r\n region(\"MAI\", \"Mainburg, Bayern\"),\r\n region(\"MAK\", \"Marktredwitz, Bayern\"),\r\n region(\"MAL\", \"Mallersdorf, Bayern\"),\r\n region(\"MAR\", \"Marktheidenfeld, Bayern\"),\r\n region(\"MB\", \"Miesbach, Bayern\"),\r\n region(\"MC\", \"Malchin, Mecklenburg-Vorpommern\"),\r\n region(\"MD\", \"Magdeburg, Sachsen-Anhalt\"),\r\n region(\"ME\", \"Mettmann, Nordrhein-Westfalen\"),\r\n region(\"MED\", \"Süderdithmarschen (Meldorf/Holstein), Schleswig-Holstein\"),\r\n region(\"MEG\", \"Melsungen, Hessen\"),\r\n region(\"MEI\", \"Meißen, Sachsen\"),\r\n region(\"MEK\", \"Mittlerer Erzgebirgskreis, Sachsen\"),\r\n region(\"MEL\", \"Melle, Niedersachsen\"),\r\n region(\"MEP\", \"Meppen, Niedersachsen\"),\r\n region(\"MER\", \"Merseburg, Sachsen-Anhalt\"),\r\n region(\"MES\", \"Hochsauerlandkreis (Meschede), Nordrhein-Westfalen\"),\r\n region(\"MET\", \"Mellrichstadt, Bayern\"),\r\n region(\"MG\", \"Mönchengladbach, Nordrhein-Westfalen\"),\r\n region(\"MGH\", \"Bad Mergentheim, Baden-Württemberg\"),\r\n region(\"MGN\", \"Meiningen, Thüringen\"),\r\n region(\"MH\", \"Mühlheim an der Ruhr, Nordrhein-Westfalen\"),\r\n region(\"MHL\", \"Mühlhausen, Thüringen\"),\r\n region(\"MI\", \"Minden-Lübbecke, Nordrhein-Westfalen\"),\r\n region(\"MIL\", \"Miltenberg, Bayern\"),\r\n region(\"MK\", \"Märkischer Kreis, Nordrhein-Westfalen\"),\r\n region(\"MKK\", \"Main-Kinzig-Kreis, Hessen\"),\r\n region(\"ML\", \"Mansfelder Land, Sachsen-Anhalt\"),\r\n region(\"MM\", \"Memmingen, Bayern\"),\r\n region(\"MN\", \"Unterallgäu (Mindelheim), Bayern\"),\r\n region(\"MO\", \"Moers, Nordrhein-Westfalen\"),\r\n region(\"MOD\", \"Marktoberdorf, Bayern\"),\r\n region(\"MOL\", \"Märkisch-Oderland, Brandenburg\"),\r\n region(\"MON\", \"Monschau, Nordrhein-Westfalen\"),\r\n region(\"MOS\", \"Neckar-Odenwald-Kreis (Mosbach), Baden-Württemberg\"),\r\n region(\"MQ\", \"Merseburg-Querfurt, Sachsen-Anhalt\"),\r\n region(\"MR\", \"Marburg-Biedenkopf, Hessen\"),\r\n region(\"MS\", \"Münster, Nordrhein-Westfalen\"),\r\n region(\"MSE\", \"Mecklenburgische Seenplatte, Mecklenburg-Vorpommern\"),\r\n region(\"MSH\", \"Mansfeld-Südharz, Sachsen-Anhalt\"),\r\n region(\"MSP\", \"Main-Spessart (Karlstadt), Bayern\"),\r\n region(\"MST\", \"Mecklenburg-Strelitz, Mecklenburg-Vorpommern\"),\r\n region(\"MT\", \"Westerwald (Montabur), Rheinland-Pfalz\"),\r\n region(\"MTK\", \"Main-Taunus-Kreis, Hessen\"),\r\n region(\"MTL\", \"Muldentalkreis, Sachsen\"),\r\n region(\"MÜ\", \"Mühldorf am Inn, Bayern\"),\r\n region(\"MÜB\", \"Münchberg, Bayern\"),\r\n region(\"MUC\", \"München, Bayern\"),\r\n region(\"MÜL\", \"Müllheim, Baden-Württemberg\"),\r\n region(\"MÜN\", \"Münsingen (Württemberg), Baden-Württemberg\"),\r\n region(\"MÜR\", \"Müritz, Mecklenburg-Vorpommern\"),\r\n region(\"MW\", \"Mittweida, Sachsen\"),\r\n region(\"MY\", \"Mayen, Rheinland-Pfalz\"),\r\n region(\"MYK\", \"Mayen-Koblenz, Rheinland-Pfalz\"),\r\n region(\"MZ\", \"Mainz, Mainz-Bingen, Rheinland-Pfalz\"),\r\n region(\"MZG\", \"Merzig-Wadern, Saarland\"),\r\n region(\"N\", \"Nürnberg, Bayern\"),\r\n region(\"NAB\", \"Nabburg, Bayern\"),\r\n region(\"NAI\", \"Naila, Bayern\"),\r\n region(\"NAU\", \"Nauen, Brandenburg\"),\r\n region(\"NB\", \"Neubrandenburg, Mecklenburg-Vorpommern\"),\r\n region(\"ND\", \"Neuburg-Schrobenhausen, Bayern\"),\r\n region(\"NDH\", \"Nordhausen, Thüringen\"),\r\n region(\"NE\", \"Neuss, Nordrhein-Westfalen\"),\r\n region(\"NEA\", \"Neustadt an der Aisch-Bad Windsheim, Bayern\"),\r\n region(\"NEB\", \"Nebra, Sachsen-Anhalt\"),\r\n region(\"NEC\", \"Neustadt b. Coburg, Bayern\"),\r\n region(\"NEN\", \"Neunburg vorm Wald, Bayern\"),\r\n region(\"NES\", \"Rhön-Grabfeld (Bad Neustadt a.d. Saale), Bayern\"),\r\n region(\"NEU\", \"Hochschwarzwald (Titisee-Neustadt), Baden-Württemberg\"),\r\n region(\"NEW\", \"Neustadt an der Waldnaab, Bayern\"),\r\n region(\"NF\", \"Nordfriesland (Husum), Schleswig-Holstein\"),\r\n region(\"NH\", \"Neuhaus, Thüringen\"),\r\n region(\"NIB\", \"Süd Tondern (Niebüll), Schleswig-Holstein\"),\r\n region(\"NK\", \"Neunkirchen (Saar), Saarland\"),\r\n region(\"NM\", \"Neumarkt in der Oberpfalz, Bayern\"),\r\n region(\"NMB\", \"Naumburg, Sachsen-Anhalt\"),\r\n region(\"NMS\", \"Neumünster, Schleswig-Holstein\"),\r\n region(\"NÖ\", \"Nördlingen, Bayern\"),\r\n region(\"NOH\", \"Grafschaft Bentheim (Nordhorn), Niedersachsen\"),\r\n region(\"NOL\", \"Niederschlesischer Oberlausitzkreis, Sachsen\"),\r\n region(\"NOM\", \"Northeim, Niedersachsen\"),\r\n region(\"NOR\", \"Norden, Niedersachsen\"),\r\n region(\"NP\", \"Neuruppin, Brandenburg\"),\r\n region(\"NR\", \"Neuwied, Rheinland-Pfalz\"),\r\n region(\"NRÜ\", \"Neustadt am Rübenberge, Niedersachsen\"),\r\n region(\"NT\", \"Nürtingen, Baden-Württemberg\"),\r\n region(\"NU\", \"Neu-Ulm, Bayern\"),\r\n region(\"NVP\", \"Nordvorpommern, Mecklenburg-Vorpommern\"),\r\n region(\"NW\", \"Neustadt an der Weinstraße, Rheinland-Pfalz\"),\r\n region(\"NWM\", \"Nordwestmecklenburg, Mecklenburg-Vorpommern\"),\r\n region(\"NY\", \"Niesky, Sachsen\"),\r\n region(\"NZ\", \"Neustrelitz, Mecklenburg-Vorpommern\"),\r\n region(\"OA\", \"Oberallgäu, Bayern\"),\r\n region(\"OAL\", \"Ostallgäu, Bayern\"),\r\n region(\"OB\", \"Oberhausen, Nordrhein-Westfalen\"),\r\n region(\"OBB\", \"Obernburg a. Main, Bayern\"),\r\n region(\"OBG\", \"Osterburg, Sachsen-Anhalt\"),\r\n region(\"OC\", \"Oschersleben, Sachsen-Anhalt\"),\r\n region(\"OCH\", \"Ochsenfurt, Bayern\"),\r\n region(\"OD\", \"Stormarn (Bad Oldesloe), Schleswig-Holstein\"),\r\n region(\"OE\", \"Olpe, Nordrhein-Westfalen\"),\r\n region(\"OF\", \"Offenbach am Main, Hessen\"),\r\n region(\"OG\", \"Ortenaukreis (Offenburg), Baden-Württemberg\"),\r\n region(\"OH\", \"Ostholstein, Schleswig-Holstein\"),\r\n region(\"OHA\", \"Osterode am Harz, Niedersachsen\"),\r\n region(\"ÖHR\", \"Öhringen, Baden-Württemberg\"),\r\n region(\"OHV\", \"Oberhavel, Brandenburg\"),\r\n region(\"OHZ\", \"Osterholz, Niedersachsen\"),\r\n region(\"OK\", \"Ohrekreis, Sachsen-Anhalt\"),\r\n region(\"OL\", \"Oldenburg, Niedersachsen\"),\r\n region(\"OLD\", \"Oldenburg in Holstein, Schleswig-Holstein\"),\r\n region(\"OP\", \"Rhein-Wupper-Kreis (Opladen), Nordrhein-Westfalen\"),\r\n region(\"OPR\", \"Ostprignitz-Ruppin, Brandenburg\"),\r\n region(\"OR\", \"Oranienburg, Brandenburg\"),\r\n region(\"OS\", \"Osnabrück, Niedersachsen\"),\r\n region(\"OSL\", \"Oberspreewald-Lausitz, Brandenburg\"),\r\n region(\"OTT\", \"Otterndorf, Niedersachsen\"),\r\n region(\"OTW\", \"Ottweiler, Saarland\"),\r\n region(\"OVI\", \"Oberviechtach, Bayern\"),\r\n region(\"OVL\", \"Obervogtland, Sachsen\"),\r\n region(\"OVP\", \"Ostvorpommern, Mecklenburg-Vorpommern\"),\r\n region(\"OZ\", \"Oschatz, Sachsen\"),\r\n region(\"P\", \"Potsdam, Brandenburg\"),\r\n region(\"PA\", \"Passau, Bayern\"),\r\n region(\"PAF\", \"Pfaffenhofen a.d. Ilm, Bayern\"),\r\n region(\"PAN\", \"Rottal-Inn (Pfarrkirchen), Bayern\"),\r\n region(\"PAR\", \"Parsberg, Bayern\"),\r\n region(\"PB\", \"Paderborn, Nordrhein-Westfalen\"),\r\n region(\"PCH\", \"Parchim, Mecklenburg-Vorpommern\"),\r\n region(\"PE\", \"Peine, Niedersachsen\"),\r\n region(\"PEG\", \"Pegnitz, Bayern\"),\r\n region(\"PER\", \"Perleberg, Brandenburg\"),\r\n region(\"PF\", \"Pforzheim, Baden-Württemberg\"),\r\n region(\"PI\", \"Pinneberg, Schleswig-Holstein\"),\r\n region(\"PIR\", \"Sächsische Schweiz-Osterzgebirge (Pirna), Sachsen\"),\r\n region(\"PK\", \"Pritzwalk, Brandenburg\"),\r\n region(\"PL\", \"Plauen, Sachsen\"),\r\n region(\"PLÖ\", \"Plön, Schleswig-Holstein\"),\r\n region(\"PM\", \"Potsdam-Mittelmark, Brandenburg\"),\r\n region(\"PN\", \"Pößneck, Thüringen\"),\r\n region(\"PR\", \"Prignitz (Perleberg), Brandenburg\"),\r\n region(\"PRÜ\", \"Prüm, Rheinland-Pfalz\"),\r\n region(\"PS\", \"Pirmasens, Rheinland-Pfalz\"),\r\n region(\"PW\", \"Pasewalk, Mecklenburg-Vorpommern\"),\r\n region(\"PZ\", \"Prenzlau, Brandenburg\"),\r\n region(\"QFT\", \"Querfurt, Sachsen-Anhalt\"),\r\n region(\"QLB\", \"Quedlinburg, Sachsen-Anhalt\"),\r\n region(\"R\", \"Regensburg, Bayern\"),\r\n region(\"RA\", \"Rastatt, Baden-Württemberg\"),\r\n region(\"RC\", \"Reichenbach, Sachsen\"),\r\n region(\"RD\", \"Rendsburg-Eckernförde, Schleswig-Holstein\"),\r\n region(\"RDG\", \"Ribnitz-Damgarten, Mecklenburg-Vorpommern\"),\r\n region(\"RE\", \"Recklinghausen, Nordrhein-Westfalen\"),\r\n region(\"REG\", \"Regen, Bayern\"),\r\n region(\"REH\", \"Rehau, Bayern\"),\r\n region(\"REI\", \"Bad Reichenhall, Bayern\"),\r\n region(\"RG\", \"Riesa-Großenhain, Sachsen\"),\r\n region(\"RH\", \"Roth, Bayern\"),\r\n region(\"RI\", \"Rinteln, Niedersachsen\"),\r\n region(\"RID\", \"Riedenburg, Bayern\"),\r\n region(\"RIE\", \"Riesa, Sachsen\"),\r\n region(\"RL\", \"Rochlitz, Sachsen\"),\r\n region(\"RM\", \"Röbel (Müritz), Mecklenburg-Vorpommern\"),\r\n region(\"RN\", \"Rathenow, Brandenburg\"),\r\n region(\"RO\", \"Rosenheim, Bayern\"),\r\n region(\"ROD\", \"Roding, Bayern\"),\r\n region(\"ROF\", \"Rotenburg an der Fulda, Hessen\"),\r\n region(\"ROK\", \"Rockenhausen, Rheinland-Pfalz\"),\r\n region(\"ROL\", \"Rottenburg a.d. Laaber, Bayern\"),\r\n region(\"ROS\", \"Rostock, Mecklenburg-Vorpommern\"),\r\n region(\"ROT\", \"Rothenburg o.d. Tauber, Bayern\"),\r\n region(\"ROW\", \"Rotenburg (Wümme), Niedersachsen\"),\r\n region(\"RP\", \"Rhein-Pfalz-Kreis, Rheinland-Pfalz\"),\r\n region(\"RS\", \"Remscheid, Nordrhein-Westfalen\"),\r\n region(\"RSL\", \"Roßlau, Sachsen-Anhalt\"),\r\n region(\"RT\", \"Reutlingen, Baden-Württemberg\"),\r\n region(\"RU\", \"Rudolstadt, Thüringen\"),\r\n region(\"RÜD\", \"Rheingau-Taunus-Kreis, Hessen\"),\r\n region(\"RÜG\", \"Rügen, Mecklenburg-Vorpommern\"),\r\n region(\"RV\", \"Ravensburg, Baden-Württemberg\"),\r\n region(\"RW\", \"Rottweil, Baden-Württemberg\"),\r\n region(\"RY\", \"Rheydt, Nordrhein-Westfalen\"),\r\n region(\"RZ\", \"Herzogtum Lauenburg (Ratzeburg), Schleswig-Holstein\"),\r\n region(\"S\", \"Stuttgart, Baden-Württemberg\"),\r\n region(\"SAB\", \"Saarburg, Rheinland-Pfalz\"),\r\n region(\"SAD\", \"Schwandorf, Bayern\"),\r\n region(\"SÄK\", \"Säckingen, Baden-Württemberg\"),\r\n region(\"SAN\", \"Stadtsteinach, Bayern\"),\r\n region(\"SAW\", \"Altmarkkreis Salzwedel, Sachsen-Anhalt\"),\r\n region(\"SB\", \"Saarbrücken, Saarland\"),\r\n region(\"SBG\", \"Strasburg, Mecklenburg-Vorpommern\"),\r\n region(\"SBK\", \"Schönebeck, Sachsen-Anhalt\"),\r\n region(\"SC\", \"Schwabach, Bayern\"),\r\n region(\"SCZ\", \"Schleiz, Thüringen\"),\r\n region(\"SDH\", \"Sondershausen, Thüringen\"),\r\n region(\"SDL\", \"Stendal, Sachsen-Anhalt\"),\r\n region(\"SDT\", \"Schwedt (Oder), Brandenburg\"),\r\n region(\"SE\", \"Segeberg, Schleswig-Holstein\"),\r\n region(\"SEB\", \"Sebnitz, Sachsen\"),\r\n region(\"SEE\", \"Seelow, Brandenburg\"),\r\n region(\"SEF\", \"Scheinfeld, Bayern\"),\r\n region(\"SEL\", \"Selb, Bayern\"),\r\n region(\"SF\", \"Sonthofen, Bayern\"),\r\n region(\"SFA\", \"Soltau-Fallingbostel, Niedersachsen\"),\r\n region(\"SFB\", \"Senftenberg, Brandenburg\"),\r\n region(\"SFT\", \"Staßfurt, Sachsen-Anhalt\"),\r\n region(\"SG\", \"Solingen, Nordrhein-Westfalen\"),\r\n region(\"SGH\", \"Sangerhausen, Sachsen-Anhalt\"),\r\n region(\"SHA\", \"Schwäbisch Hall, Baden-Württemberg\"),\r\n region(\"SHG\", \"Schaumburg, Niedersachsen\"),\r\n region(\"SHK\", \"Saale-Holzland-Kreis, Thüringen\"),\r\n region(\"SHL\", \"Suhl, Thüringen\"),\r\n region(\"SI\", \"Siegen-Wittgenstein, Nordrhein-Westfalen\"),\r\n region(\"SIG\", \"Sigmaringen, Baden-Württemberg\"),\r\n region(\"SIM\", \"Rhein-Hunsrück-Kreis (Simmern), Rheinland-Pfalz\"),\r\n region(\"SK\", \"Saalekreis, Sachsen-Anhalt\"),\r\n region(\"SL\", \"Schleswig-Flensburg, Schleswig-Holstein\"),\r\n region(\"SLE\", \"Schleiden, Nordrhein-Westfalen\"),\r\n region(\"SLF\", \"Saalfeld-Rudolstadt, Thüringen\"),\r\n region(\"SLG\", \"Saulgau (Württemberg), Baden-Württemberg\"),\r\n region(\"SLK\", \"Salzlandkreis, Sachsen-Anhalt\"),\r\n region(\"SLN\", \"Schmölln, Thüringen\"),\r\n region(\"SLS\", \"Saarlouis, Saarland\"),\r\n region(\"SLÜ\", \"Schlüchtern, Hessen\"),\r\n region(\"SLZ\", \"Bad Salzungen, Thüringen\"),\r\n region(\"SM\", \"Schmalkalden-Meiningen, Thüringen\"),\r\n region(\"SMÜ\", \"Schwabmünchen, Bayern\"),\r\n region(\"SN\", \"Schwerin, Mecklenburg-Vorpommern\"),\r\n region(\"SNH\", \"Sinsheim, Baden-Württemberg\"),\r\n region(\"SO\", \"Soest, Nordrhein-Westfalen\"),\r\n region(\"SOB\", \"Schrobenhausen, Bayern\"),\r\n region(\"SOG\", \"Schongau, Bayern\"),\r\n region(\"SOK\", \"Saale-Orla-Kreis (Schleiz), Thüringen\"),\r\n region(\"SOL\", \"Soltau, Niedersachsen\"),\r\n region(\"SÖM\", \"Sömmerda, Thüringen\"),\r\n region(\"SON\", \"Sonneberg, Thüringen\"),\r\n region(\"SP\", \"Speyer, Rheinland-Pfalz\"),\r\n region(\"SPB\", \"Spremberg, Brandenburg\"),\r\n region(\"SPN\", \"Spree-Neiße, Brandenburg\"),\r\n region(\"SPR\", \"Springe, Niedersachsen\"),\r\n region(\"SR\", \"Straubing (-Bogen), Bayern\"),\r\n region(\"SRB\", \"Strausberg, Brandenburg\"),\r\n region(\"SRO\", \"Stadtroda, Thüringen\"),\r\n region(\"ST\", \"Steinfurt, Nordrhein-Westfalen\"),\r\n region(\"STA\", \"Starnberg, Bayern\"),\r\n region(\"STB\", \"Sternberg, Mecklenburg-Vorpommern\"),\r\n region(\"STD\", \"Stade, Niedersachsen\"),\r\n region(\"STE\", \"Staffelstein, Bayern\"),\r\n region(\"STH\", \"Schaumburg-Lippe (Stadthagen), Niedersachsen\"),\r\n region(\"STL\", \"Stollberg, Sachsen\"),\r\n region(\"STO\", \"Stockach (Sigmaringen), Baden-Württemberg\"),\r\n region(\"SU\", \"Rhein-Sieg-Kreis (Siegburg), Nordrhein-Westfalen\"),\r\n region(\"SUL\", \"Sulzbach-Rosenberg, Bayern\"),\r\n region(\"SÜW\", \"Südliche Weinstraße, Rheinland-Pfalz\"),\r\n region(\"SW\", \"Schweinfurt, Bayern\"),\r\n region(\"SWA\", \"Rheingau-Taunus-Kreis (Bad Schwalbach), Hessen\"),\r\n region(\"SY\", \"Grafschaft Hoya (Syke), Niedersachsen\"),\r\n region(\"SZ\", \"Salzgitter, Niedersachsen\"),\r\n region(\"SZB\", \"Schwarzenberg, Sachsen\"),\r\n region(\"TBB\", \"Main-Tauber-Kreis (Tauberbischofsheim), Baden-Württemberg\"),\r\n region(\"TDO\", \"Torgau, Delitzsch, Oschatz (Nordsachsen), Sachsen\"),\r\n region(\"TE\", \"Tecklenburg, Nordrhein-Westfalen\"),\r\n region(\"TET\", \"Teterow, Mecklenburg-Vorpommern\"),\r\n region(\"TF\", \"Teltow-Fläming, Brandenburg\"),\r\n region(\"TG\", \"Torgau, Sachsen\"),\r\n region(\"THW\", \"Technisches Hilfswerk\"),\r\n region(\"TIR\", \"Tirschenreuth, Bayern\"),\r\n region(\"TO\", \"Torgau-Oschatz, Sachsen\"),\r\n region(\"TÖL\", \"Bad Tölz-Wolfratshausen, Bayern\"),\r\n region(\"TÖN\", \"Eiderstedt (Tönning), Schleswig-Holstein\"),\r\n region(\"TP\", \"Templin, Brandenburg\"),\r\n region(\"TR\", \"Trier, Rheinland-Pfalz\"),\r\n region(\"TS\", \"Traunstein, Bayern\"),\r\n region(\"TT\", \"Tettnang (Württemberg), Baden-Württemberg\"),\r\n region(\"TÜ\", \"Tübingen, Baden-Württemberg\"),\r\n region(\"TUT\", \"Tuttlingen, Baden-Württemberg\"),\r\n region(\"ÜB\", \"Überlingen am Bodensee, Baden-Württemberg\"),\r\n region(\"UE\", \"Uelzen, Niedersachsen\"),\r\n region(\"UEM\", \"Ueckermünde, Mecklenburg-Vorpommern\"),\r\n region(\"UER\", \"Uecker-Randow, Mecklenburg-Vorpommern\"),\r\n region(\"UFF\", \"Uffenheim, Bayern\"),\r\n region(\"UH\", \"Unstrut-Hainich-Kreis, Thüringen\"),\r\n region(\"UL\", \"Ulm, Baden-Württemberg\"),\r\n region(\"UM\", \"Uckermark, Brandenburg\"),\r\n region(\"UN\", \"Unna, Nordrhein-Westfalen\"),\r\n region(\"USI\", \"Usingen, Hessen\"),\r\n region(\"V\", \"Vogtlandkreis, Sachsen\"),\r\n region(\"VAI\", \"Vaihingen an der Enz, Baden-Württemberg\"),\r\n region(\"VB\", \"Vogelsbergkreis, Hessen\"),\r\n region(\"VEC\", \"Vechta, Niedersachsen\"),\r\n region(\"VER\", \"Verden, Niedersachsen\"),\r\n region(\"VG\", \"Vorpommern-Greifswald, Mecklenburg-Vorpommern\"),\r\n region(\"VIB\", \"Vilsbiburg, Bayern\"),\r\n region(\"VIE\", \"Viersen, Nordrhein-Westfalen\"),\r\n region(\"VIT\", \"Viechtach, Bayern\"),\r\n region(\"VK\", \"Völklingen, Saarland\"),\r\n region(\"VL\", \"Villingen (Schwarzwald), Baden-Württemberg\"),\r\n region(\"VOF\", \"Vilshofen, Bayern\"),\r\n region(\"VOH\", \"Vohenstrauß, Bayern\"),\r\n region(\"VR\", \"Vorpommern-Rügen, Mecklenburg-Vorpommern\"),\r\n region(\"VS\", \"Schwarzwald-Baar-Kreis (Villingen-Schwenningen), Baden-Württemberg\"),\r\n region(\"W\", \"Wuppertal, Nordrhein-Westfalen\"),\r\n region(\"WA\", \"Waldeck, Hessen\"),\r\n region(\"WAF\", \"Warendorf, Nordrhein-Westfalen\"),\r\n region(\"WAK\", \"Wartburgkreis, Thüringen\"),\r\n region(\"WAN\", \"Wanne-Eickel, Nordrhein-Westfalen\"),\r\n region(\"WAR\", \"Warburg, Nordrhein-Westfalen\"),\r\n region(\"WAT\", \"Wattenscheid, Nordrhein-Westfalen\"),\r\n region(\"WB\", \"Wittenberg, Sachsen-Anhalt\"),\r\n region(\"WBS\", \"Worbis, Thüringen\"),\r\n region(\"WD\", \"Wiedenbrück, Nordrhein-Westfalen\"),\r\n region(\"WDA\", \"Werdau, Sachsen\"),\r\n region(\"WE\", \"Weimar, Thüringen\"),\r\n region(\"WEB\", \"Oberwesterwaldkreis (Westerburg), Rheinland-Pfalz\"),\r\n region(\"WEG\", \"Wegscheid, Bayern\"),\r\n region(\"WEL\", \"Weilburg, Hessen\"),\r\n region(\"WEM\", \"Wesermünde (Bremerhaven), Niedersachsen\"),\r\n region(\"WEN\", \"Weiden i. d. Oberpfalz, Bayern\"),\r\n region(\"WER\", \"Wertingen, Bayern\"),\r\n region(\"WES\", \"Wesel, Nordrhein-Westfalen\"),\r\n region(\"WF\", \"Wolfenbüttel, Niedersachsen\"),\r\n region(\"WG\", \"Wangen im Allgäu, Baden-Württemberg\"),\r\n region(\"WHV\", \"Wilhelmshaven, Niedersachsen\"),\r\n region(\"WI\", \"Wiesbaden, Hessen\"),\r\n region(\"WIL\", \"Wittlich, Rheinland-Pfalz\"),\r\n region(\"WIS\", \"Wismar, Mecklenburg-Vorpommern\"),\r\n region(\"WIT\", \"Witten, Nordrhein-Westfalen\"),\r\n region(\"WIZ\", \"Witzenhausen, Hessen\"),\r\n region(\"WK\", \"Wittstock, Brandenburg\"),\r\n region(\"WL\", \"Harburg (Winsen/Luhe), Niedersachsen\"),\r\n region(\"WLG\", \"Wolgast, Mecklenburg-Vorpommern\"),\r\n region(\"WM\", \"Weilheim-Schongau, Bayern\"),\r\n region(\"WMS\", \"Wolmirstedt, Sachsen-Anhalt\"),\r\n region(\"WN\", \"Rems-Murr-Kreis (Waiblingen), Baden-Württemberg\"),\r\n region(\"WND\", \"St. Wendel, Saarland\"),\r\n region(\"WO\", \"Worms, Rheinland-Pfalz\"),\r\n region(\"WOB\", \"Wolfsburg, Niedersachsen\"),\r\n region(\"WOH\", \"Wolfhagen, Hessen\"),\r\n region(\"WOL\", \"Wolfach, Baden-Württemberg\"),\r\n region(\"WOR\", \"Wolfratshausen, Bayern\"),\r\n region(\"WOS\", \"Wolfstein, Bayern\"),\r\n region(\"WR\", \"Wernigerode, Sachsen-Anhalt\"),\r\n region(\"WRN\", \"Waren, Mecklenburg-Vorpommern\"),\r\n region(\"WS\", \"Wasserburg am Inn, Bayern\"),\r\n region(\"WSF\", \"Weißenfels, Sachsen-Anhalt\"),\r\n region(\"WST\", \"Ammerland (Westerstede), Niedersachsen\"),\r\n region(\"WSW\", \"Weißwasser, Sachsen\"),\r\n region(\"WT\", \"Waldshut, Baden-Württemberg\"),\r\n region(\"WTL\", \"Wittlage, Niedersachsen\"),\r\n region(\"WTM\", \"Wittmund, Niedersachsen\"),\r\n region(\"WÜ\", \"Würzburg, Bayern\"),\r\n region(\"WUG\", \"Weißenburg-Gunzenhausen, Bayern\"),\r\n region(\"WÜM\", \"Waldmünchen, Bayern\"),\r\n region(\"WUN\", \"Wunsiedel, Bayern\"),\r\n region(\"WUR\", \"Wurzen, Sachsen\"),\r\n region(\"WW\", \"Westerwaldkreis, Rheinland-Pfalz\"),\r\n region(\"WZ\", \"Wetzlar, Hessen\"),\r\n region(\"WZL\", \"Wanzleben, Sachsen-Anhalt\"),\r\n region(\"Z\", \"Zwickau, Sachsen\"),\r\n region(\"ZE\", \"Zerbst, Sachsen-Anhalt\"),\r\n region(\"ZEL\", \"Zell (Mosel), Rheinland-Pfalz\"),\r\n region(\"ZI\", \"Löbau-Zittau, Sachsen\"),\r\n region(\"ZIG\", \"Ziegenhain (Schwalm-Eder-Kreis), Hessen\"),\r\n region(\"ZP\", \"Zschopau, Sachsen\"),\r\n region(\"ZR\", \"Zeulenroda, Thüringen\"),\r\n region(\"ZS\", \"Zossen, Brandenburg\"),\r\n region(\"ZW\", \"Zweibrücken, Rheinland-Pfalz\"),\r\n region(\"ZZ\", \"Zeitz, Sachsen-Anhalt\"),\r\n];\r\n\r\n\r\nconst lookUp = deRegions.reduce((acc, region) => {\r\n acc[region.code] = region;\r\n return acc;\r\n}, {} as Record);\r\n\r\nexport function findRegionByCode(code: string): DeRegion | null {\r\n const ret = lookUp[code.toUpperCase()];\r\n return ret ? ret : null;\r\n}\r\n\r\nexport default deRegions;","import React, { useMemo, useRef, useState, useEffect } from \"react\";\r\nimport { NumberPlateModel, NumberPlateProps } from \"./NumberPlate.types\";\r\nimport Flag from \"react-world-flags\";\r\nimport { KeyboardArrowDownRounded, CheckRounded, WarningOutlined, ErrorOutline } from \"@material-ui/icons\";\r\nimport useOutsideClick from \"../../utils/hooks/useOutsideClick\";\r\nimport { findWhere, isEmpty, isUndefined } from \"underscore\";\r\nimport { ReactComponent as Seals } from \"../../assets/images/german-license-plate-seals.svg\";\r\nimport \"./_numberPlate.scss\";\r\nimport { MuiHelperText } from \"../../components/MuiHelperText\";\r\nimport { CountriesNumberPlates } from \"../../lib/countriesNumberPlates\";\r\nimport { Autocomplete } from \"@material-ui/lab\";\r\nimport deRegions, { findRegionByCode } from \"../../lib/deRegions\";\r\n\r\nconst defaultSupportedNumberPlate : NumberPlateModel[] = new CountriesNumberPlates().getCountriesNumberPlates().map((s) => ({\r\n numberPlatePrefix: s.numberPlateCode,\r\n countryCode: s.countryCode,\r\n}));\r\n\r\ntype DeRegionSelectProps = {\r\n onChange: (value: string) => void;\r\n onBlur: () => void;\r\n popRef: React.MutableRefObject\r\n placeholder?: string;\r\n value: string;\r\n};\r\n\r\nfunction DeRegionSelect(props: DeRegionSelectProps) {\r\n let muiAutoCompleteRef: React.Ref;\r\n \r\n const [open, setOpen] = useState(false);\r\n\r\n // hacks to anchor dropdown popper to the bigger input wrapper, not the small region input\r\n useEffect(() => {\r\n if (!muiAutoCompleteRef) return;\r\n if (typeof muiAutoCompleteRef === \"function\") {\r\n muiAutoCompleteRef(props.popRef.current);\r\n } else {\r\n // @ts-ignore\r\n muiAutoCompleteRef.current = props.popRef.current;\r\n }\r\n });\r\n\r\n return (\r\n setOpen(true)}\r\n onClose={() => setOpen(false)}\r\n renderOption={(o) => (\r\n <>\r\n
{o.code}
\r\n
{o.name}
\r\n \r\n )}\r\n renderInput={(params) => {\r\n muiAutoCompleteRef = params.InputProps.ref;\r\n return (\r\n <>\r\n {\r\n const region = findRegionByCode(e.target.value);\r\n if (region) {\r\n props.onChange(region.code);\r\n } else {\r\n props.onChange(\"\");\r\n }\r\n setOpen(false);\r\n props.onBlur();\r\n }}\r\n />\r\n \r\n \r\n );\r\n }}\r\n onChange={(e, v) => props.onChange(v?.code || \"\")}\r\n options={deRegions}\r\n value={findRegionByCode(props.value)}\r\n getOptionLabel={(o) => o.code}\r\n filterOptions={(options, params) => {\r\n return options.filter(\r\n (o) =>\r\n o.code.startsWith(params.inputValue.toUpperCase()) ||\r\n o.name.toLowerCase().includes(params.inputValue.toLowerCase())\r\n );\r\n }}\r\n classes={{ popper: \"de-option-container\", option: \"de-option\" }}\r\n />\r\n );\r\n}\r\n\r\nconst NumberPlateDeSupport = React.memo((props: NumberPlateProps) => {\r\n const {\r\n id,\r\n name,\r\n placeholder,\r\n regionPlaceholder,\r\n onValueChange,\r\n onPrefixSelect,\r\n validateNumberPlate,\r\n prefix,\r\n value,\r\n warning,\r\n error,\r\n supportedNumberPlates = defaultSupportedNumberPlate,\r\n numberToSkipOnKeyPress = -1,\r\n setFieldValue,\r\n readOnly,\r\n compact,\r\n } = props;\r\n const [open, setOpen] = useState(false);\r\n\r\n const [regionCode, setRegionCode] = useState(\"\");\r\n const [deValue, setDeValue] = useState(\"\");\r\n\r\n const dropdownRef = useRef(null);\r\n const closeDropdown = () => setOpen(false);\r\n useOutsideClick(dropdownRef, closeDropdown);\r\n\r\n const popRef = useRef(null);\r\n\r\n const openDropdown = () => {\r\n if (!readOnly) {\r\n setOpen(true);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n const handleKeyPress = (e: KeyboardEvent) => {\r\n if (!open || !dropdownRef?.current) {\r\n return;\r\n }\r\n\r\n const key = e.key.toUpperCase();\r\n const firstMatchIndex = supportedNumberPlates.findIndex(\r\n (c, i) => i > numberToSkipOnKeyPress && c.countryCode.startsWith(key)\r\n );\r\n\r\n if (firstMatchIndex !== -1) {\r\n const countryElements = dropdownRef.current.querySelectorAll(\"li.country\");\r\n const targetElement = countryElements[firstMatchIndex];\r\n if (targetElement) {\r\n targetElement.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\r\n }\r\n }\r\n };\r\n\r\n window.addEventListener(\"keydown\", handleKeyPress);\r\n\r\n return () => {\r\n window.removeEventListener(\"keydown\", handleKeyPress);\r\n };\r\n }, [open, supportedNumberPlates]);\r\n\r\n // Handle to and from full numberplate <=> german numberplate\r\n const onHandleDeNumberplateChanged = (\r\n val: string,\r\n isRegion: boolean\r\n ) => {\r\n\r\n let value = isRegion ? `${val}-${deValue}` : `${regionCode}-${val}`;\r\n\r\n if (value === \"-\") {\r\n value = \"\";\r\n }\r\n\r\n const event = {\r\n target: {\r\n value: value,\r\n },\r\n } as React.ChangeEvent;\r\n\r\n if (onValueChange) {\r\n onValueChange(event);\r\n }\r\n };\r\n\r\n const splitRegionAndNumber = () => {\r\n if (value?.includes(\"-\")) {\r\n let numberPlateComponents = value.split(\"-\");\r\n\r\n setRegionCode(numberPlateComponents[0]);\r\n setDeValue(numberPlateComponents[1]);\r\n } else {\r\n setDeValue(value);\r\n }\r\n };\r\n\r\n const parseValue = (val: string, isRegion: boolean) => {\r\n const splitIndex = val.indexOf(\"-\");\r\n if (splitIndex < 0) {\r\n return isRegion ? \"\" : val;\r\n }\r\n\r\n const region = val.substring(0, splitIndex);\r\n const deVal = val.substring(splitIndex + 1);\r\n\r\n return isRegion ? region : deVal;\r\n };\r\n //\r\n\r\n // Region handlers\r\n const onRegionChange = (regionValue: string) => {\r\n regionValue = sanitize(regionValue);\r\n setRegionCode(() => regionValue);\r\n onHandleDeNumberplateChanged(regionValue, true);\r\n\r\n if (validateNumberPlate) {\r\n validateNumberPlate(undefined);\r\n }\r\n };\r\n\r\n const onRegionBlur = () => {\r\n if (validateNumberPlate) {\r\n validateNumberPlate(undefined);\r\n }\r\n };\r\n\r\n // De Value handlers\r\n const onDeValueChange = (val: string) => {\r\n val= sanitize(val);\r\n setDeValue(() => val);\r\n\r\n onHandleDeNumberplateChanged(val, false);\r\n };\r\n\r\n const onDeValueBlur = (val: string) => {\r\n val = sanitize(val);\r\n setDeValue(() => val);\r\n\r\n onHandleDeNumberplateChanged(val, false);\r\n\r\n if (validateNumberPlate) {\r\n validateNumberPlate(undefined);\r\n }\r\n };\r\n //\r\n\r\n // Other countries handlers\r\n const onValueChanged = (e: React.ChangeEvent) => {\r\n e.persist();\r\n e.preventDefault();\r\n if (onValueChange) {\r\n onValueChange(e);\r\n }\r\n };\r\n\r\n const onNumberPlateBlured = (e: React.ChangeEvent) => {\r\n e.persist();\r\n e.preventDefault();\r\n e.target.value = sanitize(e.target.value);\r\n setDeValue(() => e.target.value);\r\n if (onValueChange) {\r\n onValueChange(e);\r\n }\r\n\r\n if (validateNumberPlate) {\r\n validateNumberPlate(undefined);\r\n }\r\n };\r\n //\r\n\r\n const onPrefixSelected = (np: NumberPlateModel) => (e: React.MouseEvent) => {\r\n e.preventDefault();\r\n if (onPrefixSelect) {\r\n onPrefixSelect(np.numberPlatePrefix, np.countryCode);\r\n }\r\n closeDropdown();\r\n };\r\n\r\n const selectedCountryCode = useMemo(() => {\r\n const found = findWhere(supportedNumberPlates, {\r\n numberPlatePrefix: prefix,\r\n });\r\n if (isUndefined(found)) {\r\n return \"\";\r\n }\r\n\r\n return found.countryCode;\r\n }, [prefix]);\r\n\r\n const isGermanNumberPlate = useMemo(() => selectedCountryCode === \"DE\", [selectedCountryCode]);\r\n\r\n useEffect(() => {\r\n if (isUndefined(setFieldValue) || isUndefined(name)) {\r\n return;\r\n }\r\n\r\n if (isGermanNumberPlate) {\r\n if (isEmpty(regionCode) && !isEmpty(value)) {\r\n splitRegionAndNumber();\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (value.includes(\"-\")) {\r\n const valueCopy = value;\r\n setRegionCode(\"\");\r\n setFieldValue(name, valueCopy.replace(\"-\", \"\"));\r\n }\r\n }, [isGermanNumberPlate]);\r\n\r\n const sanitize = (val: string) => val.replaceAll(\" \", \"\").replaceAll(\"-\", \"\");\r\n\r\n return (\r\n <>\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n {prefix}\r\n
\r\n {!readOnly && (\r\n \r\n )}\r\n
\r\n
\r\n {isGermanNumberPlate ? (\r\n
\r\n {readOnly ? (\r\n
\r\n \r\n
\r\n ) : (\r\n {\r\n onRegionChange(v);\r\n }}\r\n placeholder={regionPlaceholder}\r\n value={parseValue(value, true)}\r\n onBlur={onRegionBlur}\r\n popRef={popRef}\r\n />\r\n )}\r\n
\r\n \r\n
\r\n
\r\n onDeValueChange(e.target.value)}\r\n onBlur={(e) => onDeValueBlur(e.target.value)}\r\n readOnly={readOnly}\r\n size={parseValue(value, false).length + 1}\r\n />\r\n
\r\n
\r\n ) : (\r\n \r\n )}\r\n {Boolean(error) && (\r\n
\r\n \r\n
\r\n )}\r\n {Boolean(warning) && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n \r\n
    \r\n {supportedNumberPlates.map((c, i) => (\r\n \r\n
    \r\n \r\n {c.numberPlatePrefix}\r\n
    \r\n \r\n \r\n ))}\r\n
\r\n \r\n \r\n \r\n \r\n );\r\n});\r\n\r\nexport default NumberPlateDeSupport;\r\n","export type DelegeesWithPagination = {\r\n totalRecords: number;\r\n pages: number;\r\n delegees: DelegeeWithProductsModel[];\r\n};\r\n\r\nexport type DelegeeWithProductsModel = {\r\n registrationId: string;\r\n name: string;\r\n emailAddress: string;\r\n invitationAccepted: boolean;\r\n invitationDate: string;\r\n products: DelegatedParkingProductModel[];\r\n};\r\n\r\nexport type DelegatedParkingRightsWithPagination = {\r\n totalRecords: number;\r\n pages: number;\r\n delegatedParkingRights: DelegatedParkingRight[];\r\n}\r\n\r\nexport type AssignedParkingRightsWithPagination = {\r\n totalRecords: number;\r\n pages: number;\r\n assignedParkingRights: AssignedParkingRight[];\r\n};\r\n\r\nexport type VehicleAssignmentsMyFleetWithPagination = {\r\n totalRecords: number;\r\n pages: number;\r\n vehicleAssignments: VehicleAssignment[];\r\n};\r\n\r\nexport type VehicleAssignmentModel = {\r\n assignedProducts: AssignedProduct[];\r\n customerId: string;\r\n vehicle: {\r\n countryCode: string,\r\n description: string,\r\n value: string\r\n };\r\n};\r\n\r\nexport type DelegatedParkingRight = {\r\n parkingRight : DelegatedParkingProductModel,\r\n delegee : DelegeeModel,\r\n}\r\n\r\nexport type Vehicle = {\r\n countryCode: string;\r\n identifier: string;\r\n description?: string;\r\n};\r\n\r\nexport type AssignedParkingRight = {\r\n vehicleAssignmentId: string;\r\n parkingRight: {\r\n id: string;\r\n pmc: number;\r\n name: string;\r\n location: string;\r\n };\r\n assigned: Date;\r\n vehicle: Vehicle;\r\n startedAt: Date | null;\r\n flexBudgetRemainingTime: string | undefined;\r\n flexBudgetUnitType: FlexBudgetUnitType | undefined;\r\n};\r\n\r\nexport type VehicleAssignmentProduct = {\r\n parkingRightId: string;\r\n pmcId: number;\r\n pmcName: string;\r\n locationName: string;\r\n}\r\n\r\nexport type VehicleAssignment = {\r\n vehicleAssignmentId: string;\r\n vehicle: Vehicle;\r\n products: VehicleAssignmentProduct[];\r\n assignedAt: Date;\r\n}\r\n\r\nexport type DelegatedParkingProductModel = {\r\n parkingRightId: string,\r\n id: number;\r\n pmcId: number;\r\n name: string;\r\n location: string;\r\n created: Date;\r\n status: number;\r\n flexBudgetRemainingTime: string | undefined;\r\n flexBudgetUnitType: FlexBudgetUnitType | undefined;\r\n};\r\n\r\nexport type DelegeeModel = {\r\n registrationId: string;\r\n name: string;\r\n emailAddress: string;\r\n invitationAccepted: boolean;\r\n}\r\n\r\nexport type AssignedProduct = {\r\n assignedOn: Date;\r\n orderLineId: number;\r\n parkingRightId: string;\r\n pmcId: number;\r\n}\r\n\r\nexport enum FlexBudgetUnitType {\r\n Hours = 1,\r\n Quarters = 2,\r\n Minutes = 3\r\n}","import React, { useCallback, useMemo } from \"react\";\r\nimport { QParkChip } from \"../../../../components/QParkChip\";\r\nimport { RootState, useAppSelector } from \"../../../../store\";\r\nimport useMyProductsContext from \"../../../../context/hooks/useMyProductsContext\";\r\nimport { ISelectOption } from \"../../../../components/DataTable/DataTableFilters/DataTableFilterTypes/SelectFilter\";\r\nimport { MenuAction } from \"../../../../components/DataTable/DataTableHeading/DataTableHeading\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nimport PersonIcon from \"@material-ui/icons/Person\";\r\nimport VehicleIcon from \"../../../../ui/Icons/Vehicle\";\r\nimport useFleetManagerContext from \"../../../../context/hooks/useFleetManagerContext\";\r\nimport { isNil } from \"lodash\";\r\nimport { NumberPlateDeSupport } from \"../../../../ui/NumberPlate\";\r\nimport { convertIsoCountryCodeToNumberPlatePrefix } from \"../../../../lib/countriesNumberPlates\";\r\nimport { FlexBudgetUnitType } from \"../../../../models/delegations/DelegatedParkingProductsModel\";\r\n\r\nexport type ProductChipProps = Readonly<{\r\n name: string;\r\n location: string;\r\n}>;\r\n\r\nexport function ProductChip(props: ProductChipProps) {\r\n return ;\r\n}\r\n\r\nexport type NumberPlateProps = Readonly<{\r\n countryCode: string;\r\n identifier: string;\r\n}>;\r\n\r\nexport function NumberPlate(props: NumberPlateProps) {\r\n const numberPlatePrefix = convertIsoCountryCodeToNumberPlatePrefix(props.countryCode);\r\n return (\r\n \r\n );\r\n}\r\n\r\nexport function selectUseSingleDirectVehicleAssignment(state: RootState) {\r\n return state.environment.featureFlags.find(f => f.name === \"UseSingleDirectVehicleAssignment\")?.value;\r\n}\r\n\r\nexport function selectUseFlexBudgetColumn(state: RootState) {\r\n return state.environment.featureFlags.find(f => f.name === \"UseFlexBudgetColumn\")?.value;\r\n}\r\n\r\nexport function selectUseBulkVehicleAssignments(state: RootState) {\r\n return state.environment.featureFlags.find(f => f.name === \"BulkVehicleAssignments\")?.value && state.parkingProducts.hasUnlimitedEntryRights;\r\n}\r\n\r\nexport function useGetOccupiedParkingRightsCount() {\r\n const useSingleDirectVehicleAssignment = useAppSelector(selectUseSingleDirectVehicleAssignment);\r\n\r\n return useCallback((pr: {totalAssignedParkingRights?: number, totalDelegatedParkingRights?: number}) => {\r\n if (useSingleDirectVehicleAssignment) {\r\n return (pr.totalAssignedParkingRights ?? 0) + (pr.totalDelegatedParkingRights ?? 0);\r\n }\r\n\r\n return pr.totalDelegatedParkingRights ?? 0;\r\n }, [useSingleDirectVehicleAssignment])\r\n}\r\n\r\nexport function useSharedProductsMenuAction(): {\r\n menu: MenuAction;\r\n onAddDelegee: () => void;\r\n onAssignVehicle: () => void;\r\n} {\r\n const { t } = useTranslation();\r\n const useSingleDirectVehicleAssignment = useAppSelector(selectUseSingleDirectVehicleAssignment);\r\n\r\n const { toggleAssignVehicle, toggleAddDelegee, setSelectedParkingRightIds, toggleWhitelistVehicles } =\r\n useFleetManagerContext();\r\n \r\n const useBulkVehicleAssignments = useAppSelector(selectUseBulkVehicleAssignments);\r\n\r\n return useMemo(() => {\r\n const onInviteFleetMemberClicked = () => {\r\n setSelectedParkingRightIds([]);\r\n toggleAddDelegee();\r\n };\r\n const onAssignVehicleClicked = () => {\r\n setSelectedParkingRightIds([]);\r\n toggleAssignVehicle();\r\n }; \r\n const onWhitelistVehiclesClicked = () => {\r\n setSelectedParkingRightIds([]);\r\n toggleWhitelistVehicles();\r\n };\r\n\r\n const getMenuItems = () => {\r\n const menuItems = [\r\n {\r\n label: t(\"fleetManagerTable:assignVehicle\"),\r\n action: onAssignVehicleClicked,\r\n icon: \r\n }\r\n ];\r\n \r\n if (!useBulkVehicleAssignments) {\r\n menuItems.unshift({\r\n label: t(\"fleetManagerTable:inviteFleetMember\"),\r\n action: onInviteFleetMemberClicked,\r\n icon: \r\n });\r\n } else {\r\n menuItems.push({\r\n label: t(\"fleetManagerTable:whitelistVehicles\"),\r\n action: onWhitelistVehiclesClicked,\r\n icon: \r\n });\r\n }\r\n \r\n return menuItems;\r\n };\r\n\r\n return {\r\n menu: {\r\n useMenu: useSingleDirectVehicleAssignment,\r\n showMenu: useSingleDirectVehicleAssignment,\r\n menuItems: getMenuItems()\r\n },\r\n onAddDelegee: onInviteFleetMemberClicked,\r\n onAssignVehicle: onAssignVehicleClicked,\r\n };\r\n }, [toggleAssignVehicle, toggleAddDelegee, setSelectedParkingRightIds, toggleWhitelistVehicles]);\r\n}\r\n\r\nexport function useProductOptions(): ISelectOption[] {\r\n const currentLocation = useCurrentlySelectedParkingProduct();\r\n\r\n return useMemo(() => {\r\n if (isNil(currentLocation)) return [];\r\n return currentLocation.parkingProducts.map((product) => ({\r\n label: product.pmcName,\r\n value: product.pmcId ?? 0,\r\n }));\r\n }, [currentLocation]);\r\n}\r\n\r\nexport function useCurrentlySelectedParkingProduct() {\r\n const {\r\n myProductsState: { selectedLocation },\r\n } = useMyProductsContext();\r\n const locatedProduct = useAppSelector((state) =>\r\n state.parkingProducts.locatedParkingProducts.data?.find?.(\r\n (loc) => loc.placeId === selectedLocation\r\n )\r\n );\r\n return locatedProduct;\r\n}\r\n\r\nexport function convertToRemainingFlex(flexBudRemainingTime: string | undefined, flexBudUnitType: FlexBudgetUnitType | undefined): string {\r\n if (!flexBudRemainingTime || flexBudRemainingTime == '') {\r\n return 'N/A';\r\n }\r\n\r\n const match = flexBudRemainingTime.match(/(?:(\\d+)\\.)?(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d+))?/);\r\n\r\n if(!match) {\r\n return '';\r\n }\r\n\r\n const [_, dayPart, hoursPart, minutesPart] = match;\r\n const days: number = dayPart ? Number(dayPart) : 0;\r\n const hours: number = Number(hoursPart);\r\n const minutes: number = Number(minutesPart);\r\n\r\n const totalMinutes = days * 24 * 60 + hours * 60 + minutes;\r\n const totalHours = Math.floor(totalMinutes / 60);\r\n\r\n if (flexBudUnitType === FlexBudgetUnitType.Hours) {\r\n return `${totalHours}h`;\r\n }\r\n\r\n if (flexBudUnitType === FlexBudgetUnitType.Minutes) {\r\n if (totalHours !== 0) {\r\n return `${totalHours}h ${minutes}min`;\r\n }\r\n\r\n return `${minutes}min`;\r\n }\r\n\r\n if (flexBudUnitType === FlexBudgetUnitType.Quarters) {\r\n const roundedMinutes = Math.floor(minutes / 15) * 15;\r\n if (totalHours != 0) {\r\n return `${totalHours}h ${roundedMinutes}min`;\r\n }\r\n\r\n return `${roundedMinutes}min`;\r\n }\r\n\r\n return '';\r\n}","import React from \"react\";\r\nimport { ICheckParkingRight } from \"../ParkingRightsGrid\";\r\nimport Data from \"../../DataRowCol/DataRowCol\";\r\nimport CustomCheckbox from \"../../../../ui/CustomCheckbox/CustomCheckbox\";\r\nimport { Box } from \"@material-ui/core\";\r\nimport { DirectionsCarOutlined, ErrorOutline } from \"@material-ui/icons\";\r\nimport Skeleton from \"@material-ui/lab/Skeleton\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../../../theme/variables\";\r\nimport {isUndefined} from \"underscore\"\r\nimport { selectUseBulkVehicleAssignments, useGetOccupiedParkingRightsCount } from \"../../../../containers/FleetManager/MyProducts/ParkingRightsDataTable/common\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useAppSelector } from \"../../../../store\";\r\n\r\nconst { colors } = variables;\r\n\r\nconst StyledErrorOutline = styled(ErrorOutline)`\r\n fill: ${colors.red.hex};\r\n width: 20px;\r\n`;\r\n\r\ninterface IGridBodyProps {\r\n loading: boolean;\r\n state: ICheckParkingRight[];\r\n onChecked?: (event: React.ChangeEvent) => void;\r\n disableEditing?: boolean;\r\n}\r\n\r\nconst GridBody = (props: IGridBodyProps) => {\r\n const getTotalOccupiedParkingRights = useGetOccupiedParkingRightsCount();\r\n const { t } = useTranslation([\"vehicleAssignment\"]);\r\n const useBulkVehicleAssignments = useAppSelector(selectUseBulkVehicleAssignments);\r\n\r\n if (!props.loading && props.state) {\r\n return (\r\n <>\r\n {props.state.map((pr: ICheckParkingRight, index: number) => (\r\n \r\n \r\n {!props.disableEditing && }\r\n {props.disableEditing && \r\n {`${pr.right?.location} - ${pr.right?.pmcName}`}}\r\n \r\n \r\n \r\n \r\n {!isUndefined(pr.right) && (getTotalOccupiedParkingRights(pr.right) > pr.right.totalParkingRights!) && ()}\r\n {`${pr.right && getTotalOccupiedParkingRights(pr.right)} / ${pr.right?.hasUnlimitedEntryRights && useBulkVehicleAssignments ? t(\"unlimited\") : pr.right?.totalParkingRights}`}\r\n \r\n  \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n );\r\n } else {\r\n return (\r\n <>\r\n {[1, 2, 3, 4].map((skeleton) => (\r\n \r\n ))}\r\n \r\n );\r\n }\r\n};\r\n\r\nconst SkeletonGrid = () => (\r\n \r\n \r\n \r\n \r\n \r\n <>\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default GridBody;\r\n","import React from \"react\";\r\nimport { ICheckParkingRight } from \"../ParkingRightsGrid\";\r\nimport { isEmpty } from \"underscore\";\r\nimport CircleImage from \"../../../../ui/CircleImage/CircleImage\";\r\nimport { Grid, Box } from \"@material-ui/core\";\r\nimport GridBody from \"../GridBody/GridBody\";\r\nimport ticket from \"../../../../assets/images/ticket.svg\";\r\nimport Spacer from \"../../../../ui/Spacer/Spacer\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../../../theme/variables\";\r\n\r\nconst { typography, colors } = variables;\r\n\r\nconst StyledStrong = styled.strong`\r\n font-size: ${typography.fontSizeLarge};\r\n`;\r\n\r\nconst StyledSpan = styled.span`\r\n color: ${colors.gray.hex};\r\n font-size: ${typography.fontSizeBase};\r\n text-align: center;\r\n`;\r\n\r\nconst NoResultsWrapper = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n max-width: 70%;\r\n`;\r\n\r\ninterface IResultsGridProps {\r\n loading?: boolean;\r\n state?: ICheckParkingRight[];\r\n onChecked?: (event: React.ChangeEvent) => void;\r\n disableEditing?: boolean;\r\n}\r\n\r\nconst ResultsGrid = (props: IResultsGridProps) => {\r\n const { t } = useTranslation(\"delegeeForm\");\r\n\r\n if (!props.loading && isEmpty(props.state)) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(\"noProductsTitle\")}\r\n \r\n {t(\"noProductsBody\")}\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ResultsGrid;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { Grid, FormHelperText } from \"@material-ui/core\";\r\nimport { variables } from \"../../../theme/variables\";\r\nimport { ParkingProductModel } from \"../../../models/ParkingProductModel\";\r\nimport Heading from \"../../../ui/Heading/Heading\";\r\nimport { isEmpty } from \"underscore\";\r\nimport ToggleSelectAll from \"../ToggleSelectAll/ToggleSelectAll\";\r\nimport ResultsGrid from \"./ResultsGrid/ResultsGrid\";\r\nimport \"./_parkingRights.scss\";\r\nimport { useGetOccupiedParkingRightsCount } from \"../../../containers/FleetManager/MyProducts/ParkingRightsDataTable/common\";\r\nimport { isNil } from \"lodash\";\r\n\r\nconst { typography } = variables;\r\n\r\ntype ErrorType = {\r\n hasError: boolean;\r\n message: string | string[] | undefined;\r\n};\r\n\r\nconst initialState: ICheckParkingRight[] = [];\r\n\r\nexport interface IParkingRightsGridProps {\r\n data: ParkingProductModel[] | null;\r\n initiallySelectedPmcIds?: number[];\r\n loading?: boolean;\r\n onChange: (event: React.ChangeEvent) => void;\r\n onStateChange?: (state: typeof initialState) => void;\r\n onSelectAll: (ids: number[]) => void;\r\n onDeselectAll: () => void;\r\n error?: ErrorType;\r\n title: string;\r\n required: boolean;\r\n selectAllTooltipText: string;\r\n deselectAllTooltipText: string;\r\n selectAllText: string;\r\n deselectAllText: string;\r\n}\r\n\r\nexport type ICheckParkingRight = {\r\n id: number;\r\n right?: ParkingProductModel;\r\n checked: boolean;\r\n disabled: boolean;\r\n};\r\n\r\nfunction isChecked(right: ParkingProductModel, selectedPmcIds?: number[]): boolean {\r\n return selectedPmcIds?.some((pmcId) => right.pmcId === pmcId) ?? false;\r\n}\r\n\r\nconst ParkingRightsGrid = (props: IParkingRightsGridProps) => {\r\n const [state, setState] = useState(initialState);\r\n\r\n const getTotalOccupiedParkingRights = useGetOccupiedParkingRightsCount();\r\n\r\n const onChecked = (event: React.ChangeEvent) => {\r\n const { id } = event.target;\r\n const stateCopyShallow = [...state];\r\n const parsedId = parseInt(id);\r\n const foundIndex = stateCopyShallow.findIndex((x) => x.id === parsedId);\r\n\r\n if (foundIndex !== -1) {\r\n const { checked } = event.currentTarget;\r\n\r\n stateCopyShallow[foundIndex] = { ...stateCopyShallow[foundIndex], checked };\r\n }\r\n\r\n setState(stateCopyShallow);\r\n props.onChange(event);\r\n };\r\n\r\n const onSelectAll = () => {\r\n const newState = state.map((pr) => {\r\n if (pr?.checked) {\r\n return pr;\r\n }\r\n\r\n if (!pr?.disabled) {\r\n return {\r\n ...pr,\r\n checked: true,\r\n };\r\n }\r\n\r\n return pr;\r\n });\r\n\r\n props.onSelectAll(newState.filter((pr) => pr.checked).map((pr) => pr.right?.pmcId!));\r\n\r\n setState(newState);\r\n };\r\n\r\n const onDeselectAll = () => {\r\n setState((state) =>\r\n state.map((pr) => {\r\n if (!pr.checked) {\r\n return pr;\r\n }\r\n\r\n return { ...pr, checked: false };\r\n })\r\n );\r\n props.onDeselectAll();\r\n };\r\n\r\n useEffect(() => {\r\n const isParkingRightDisabled = (\r\n parkingProductModel: ParkingProductModel,\r\n isAssignedOrDelegated: boolean\r\n ): boolean => {\r\n if (\r\n parkingProductModel?.totalDelegatedParkingRights !== undefined &&\r\n parkingProductModel?.totalParkingRights !== undefined\r\n ) {\r\n return (\r\n getTotalOccupiedParkingRights(parkingProductModel) >=\r\n parkingProductModel.totalParkingRights && !isAssignedOrDelegated\r\n );\r\n }\r\n\r\n return true;\r\n };\r\n\r\n if (!isNil(props.data) && !isEmpty(props.data)) {\r\n setState(\r\n props.data.map((right) => {\r\n const checked = isChecked(right, props.initiallySelectedPmcIds);\r\n const disabled = isParkingRightDisabled(right, checked);\r\n return {\r\n id: right.pmcId ?? 0,\r\n right,\r\n checked,\r\n disabled,\r\n };\r\n })\r\n );\r\n }\r\n\r\n return () => setState(initialState);\r\n // eslint-disable-next-line\r\n }, [props.data, props.initiallySelectedPmcIds]);\r\n\r\n useEffect(() => {\r\n if (props.onStateChange) {\r\n props.onStateChange(state);\r\n }\r\n }, [state]);\r\n\r\n const showSelectAll = () =>\r\n state.every((parkingRight) => parkingRight.checked || parkingRight.disabled);\r\n\r\n return (\r\n \r\n \r\n \r\n {props.title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {props.error?.message}\r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nexport default ParkingRightsGrid;\r\n","import axios from \"axios\";\r\nimport { isEmpty } from \"underscore\";\r\nimport storageService from \"./services/storage.service\";\r\n\r\nconst instance = axios.create();\r\n\r\ninstance.interceptors.request.use((config) => {\r\n const storedToken = storageService.getTokenFromStorage();\r\n\r\n if (!isEmpty(storedToken)) {\r\n config.headers.Authorization = `Bearer ${storedToken}`;\r\n }\r\n\r\n return config;\r\n});\r\n\r\nexport default instance;\r\n","const baseUrl = \"/api/parkingproducts\";\r\n\r\ntype ParkingProductsApiType = {\r\n getParkingProductsUrl: (\r\n seasonTicketOwnerCrmId: string,\r\n location: string\r\n ) => string;\r\n getDelegateParkingRightsUrl: () => string;\r\n getUpdateDelegationUrl: () => string;\r\n getDelegatedParkingRightsUrl: (\r\n seasonTicketOwnerCrmId: string,\r\n language: string\r\n ) => string;\r\n getLocatedParkingProductsUrl: (\r\n seasonTicketOwnerCrmId: string,\r\n language: string\r\n ) => string;\r\n getDelegeeDetailsUrl: (registrationId: string, language: string) => string;\r\n getDeleteDelegeeUrl: (registrationId: string) => string;\r\n getResendDelegeeInviteUrl: (\r\n registrationId: string,\r\n seasonTicketOwnerCrmId: string\r\n ) => string;\r\n getRevokeParkingRightsUrl: () => string;\r\n getDelegeesUrl: (seasonTicketOwnerCrmId: string, language: string) => string;\r\n getDeleteDelegeesUrl: () => string;\r\n getValidateDelegeesUrl: (seasonTicketOwnerCrmId: string) => string;\r\n getDelegeesValidationResultUrl: (seasonTicketOwnerCrmId: string, fileReference: string, language: string) => string;\r\n getDelegeesInvitationResultUrl: (seasonTicketOwnerCrmId: string, fileReference: string, language: string) => string;\r\n getStartBulkInvitationsUrl: (seasonTicketOwnerCrmId: string, fileReference: string) => string;\r\n getBulkImportProgressUrl: (seasonTicketOwnerCrmId: string, fileReference: string) => string;\r\n getBulkImportStatusUrl: (seasonTicketOwnerCrmId: string) => string;\r\n getAssignVehicleUrl: (seasonTicketOwnerCrmId: string) => string;\r\n getUpdateVehicleAssignmentUrl: (seasonTicketOwnerCrmId: string, aggregateId: string) => string;\r\n getVehicleAssignmentsUrl: (req: GetVehicleAssignmentsQuery) => string;\r\n getVehicleAssignmentUrl: (aggregateId: string) => string;\r\n getRevokeVehicleAssignmentsUrl: () => string;\r\n getDeleteVehicleAssignmentsUrl: () => string;\r\n getVehicleAssignmentsMyFleetUrl: (req: GetVehicleAssignmentsQuery) => string;\r\n getCalculateWhitelistDeltaUrl: () => string;\r\n getStartBulkVehicleAssignmentUrl: (seasonTicketOwnerCrmId: string, fileReference: string) => string;\r\n};\r\n\r\nconst getParkingProductsUrl = (\r\n seasonTicketOwnerCrmId: string,\r\n location: string\r\n) => `${baseUrl}/getparkingproducts/${seasonTicketOwnerCrmId}/${location}`;\r\n\r\nconst getDelegateParkingRightsUrl = () => `${baseUrl}/delegateparkingrights`;\r\n\r\nconst getUpdateDelegationUrl = () => `${baseUrl}/updatedelegation`;\r\n\r\nconst getDelegatedParkingRightsUrl = (\r\n seasonTicketOwnerCrmId: string,\r\n language: string\r\n) =>\r\n `${baseUrl}/getdelegatedparkingrights/${seasonTicketOwnerCrmId}/${language}`;\r\n\r\nconst getLocatedParkingProductsUrl = (\r\n seasonTicketOwnerCrmId: string,\r\n language: string\r\n) =>\r\n `${baseUrl}/getlocatedparkingproducts/${seasonTicketOwnerCrmId}/${language}`;\r\n\r\nconst getDelegeeDetailsUrl = (registrationId: string, language: string) =>\r\n `${baseUrl}/getdelegeedetails/${registrationId}/${language}`;\r\n\r\nconst getDeleteDelegeeUrl = (registrationId: string) =>\r\n `${baseUrl}/deletedelegee/${registrationId}`;\r\n\r\nconst getResendDelegeeInviteUrl = (\r\n registrationId: string,\r\n seasonTicketOwnerCrmId: string\r\n) =>\r\n `${baseUrl}/ResendDelegeeInvitation/${registrationId}/${seasonTicketOwnerCrmId}`;\r\n\r\nconst getDelegeesUrl = (seasonTicketOwnerCrmId: string, language: string) =>\r\n `${baseUrl}/delegees/${seasonTicketOwnerCrmId}/${language}`;\r\n\r\nconst getRevokeParkingRightsUrl = () => `${baseUrl}/revokeparkingrights`;\r\n\r\nconst getDeleteDelegeesUrl = () => `${baseUrl}/deletedelegations`;\r\n\r\nconst getValidateDelegeesUrl = (seasonTicketOwnerCrmId: string) =>\r\n `${baseUrl}/ValidateDelegees/${seasonTicketOwnerCrmId}`;\r\n\r\nconst getDelegeesValidationResultUrl = (seasonTicketOwnerCrmId: string, fileReference: string, language: string) =>\r\n `${baseUrl}/BulkInvitations/${seasonTicketOwnerCrmId}/file-reference/${fileReference}/validationresults/${language}`;\r\n\r\nconst getDelegeesInvitationResultUrl = (seasonTicketOwnerCrmId: string, fileReference: string, language: string) =>\r\n `${baseUrl}/BulkInvitations/${seasonTicketOwnerCrmId}/file-reference/${fileReference}/invitationresults/${language}`;\r\n\r\nconst getStartBulkInvitationsUrl = (seasonTicketOwnerCrmId: string, fileReference: string) =>\r\n `${baseUrl}/BulkInvitations/${seasonTicketOwnerCrmId}/file-reference/${fileReference}`;\r\n\r\nconst getBulkImportProgressUrl = (seasonTicketOwnerCrmId: string, fileReference: string) =>\r\n `${baseUrl}/BulkInvitations/${seasonTicketOwnerCrmId}/file-reference/${fileReference}/progress`;\r\n\r\nconst getBulkImportStatusUrl = (seasonTicketOwnerCrmId: string) =>\r\n `${baseUrl}/BulkInvitations/${seasonTicketOwnerCrmId}/status`;\r\n\r\nconst getAssignVehicleUrl = (seasonTicketOwnerCrmId: string) =>\r\n `${baseUrl}/VehicleAssignments/${seasonTicketOwnerCrmId}`;\r\n\r\nconst getUpdateVehicleAssignmentUrl = (seasonTicketOwnerCrmId: string, aggregateId: string) =>\r\n `${baseUrl}/VehicleAssignments/${seasonTicketOwnerCrmId}/${aggregateId}`;\r\n\r\nconst getVehicleAssignmentUrl = (aggregateId: string) =>\r\n `${baseUrl}/VehicleAssignments/${aggregateId}`;\r\n\r\nconst getRevokeVehicleAssignmentsUrl = () => `${baseUrl}/VehicleAssignments/revoke`;\r\n\r\nconst getDeleteVehicleAssignmentsUrl = () => `${baseUrl}/VehicleAssignments/delete`;\r\n\r\nconst getStartBulkVehicleAssignmentUrl = (seasonTicketOwnerCrmId: string, fileReference: string) =>\r\n `${baseUrl}/VehicleAssignments/${seasonTicketOwnerCrmId}/file-reference/${fileReference}`;\r\n\r\nexport type GetVehicleAssignmentsQuery = {\r\n seasonTicketOwnerCrmId: string;\r\n placeId: number;\r\n language: string;\r\n pmcIds?: number[];\r\n numberPlateValue?: string;\r\n page: number;\r\n pageSize: number;\r\n assignedDateStart?: string;\r\n assignedDateEnd?: string;\r\n sortBy?: 'description' | 'numberPlate' | 'assignedDate' | 'StartDate';\r\n ascending?: boolean;\r\n description?: string;\r\n StartedDateStart?: string;\r\n StartedDateEnd?: string;\r\n};\r\n\r\nfunction getVehicleAssignmentsUrl(req: GetVehicleAssignmentsQuery) {\r\n const { seasonTicketOwnerCrmId, placeId, ...others } = req;\r\n const qs = getQueryString(others);\r\n\r\n return `${baseUrl}/VehicleAssignments/${seasonTicketOwnerCrmId}/${placeId}?${qs}`\r\n}\r\n\r\nfunction getVehicleAssignmentsMyFleetUrl(req: GetVehicleAssignmentsQuery) {\r\n const { seasonTicketOwnerCrmId, ...others } = req;\r\n\r\n const qs = getQueryString(others);\r\n return `${baseUrl}/VehicleAssignments/fleet/${req.seasonTicketOwnerCrmId}?${qs}`;\r\n}\r\n\r\nconst getCalculateWhitelistDeltaUrl = () =>\r\n `${baseUrl}/VehicleAssignments/calculate-whitelist-delta`;\r\n\r\nfunction getQueryString(others: any) {\r\n const params = new URLSearchParams();\r\n\r\n for (const [key, val] of Object.entries(others)) {\r\n if (Array.isArray(val)) {\r\n for (const x of val) {\r\n if (!x) continue;\r\n params.append(key, x.toString());\r\n }\r\n }\r\n else {\r\n if (!val) continue;\r\n params.append(key, val.toString());\r\n }\r\n }\r\n\r\n const qs = params.toString();\r\n return qs;\r\n}\r\n\r\nconst mod: ParkingProductsApiType = {\r\n getParkingProductsUrl,\r\n getDelegateParkingRightsUrl,\r\n getUpdateDelegationUrl,\r\n getDelegatedParkingRightsUrl,\r\n getLocatedParkingProductsUrl,\r\n getDelegeeDetailsUrl,\r\n getDeleteDelegeeUrl,\r\n getResendDelegeeInviteUrl,\r\n getDelegeesUrl,\r\n getRevokeParkingRightsUrl,\r\n getDeleteDelegeesUrl,\r\n getValidateDelegeesUrl,\r\n getDelegeesValidationResultUrl,\r\n getDelegeesInvitationResultUrl,\r\n getStartBulkInvitationsUrl,\r\n getBulkImportProgressUrl,\r\n getBulkImportStatusUrl,\r\n getAssignVehicleUrl,\r\n getVehicleAssignmentsUrl,\r\n getUpdateVehicleAssignmentUrl,\r\n getVehicleAssignmentUrl,\r\n getVehicleAssignmentsMyFleetUrl,\r\n getRevokeVehicleAssignmentsUrl,\r\n getDeleteVehicleAssignmentsUrl,\r\n getCalculateWhitelistDeltaUrl,\r\n getStartBulkVehicleAssignmentUrl\r\n};\r\n\r\nexport default mod;\r\n","var _path;\nconst _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }\nimport React from \"react\";\nconst SvgPaperPlane = _ref => {\n let {\n svgRef,\n title\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16.001,\n height: 16,\n viewBox: \"0 0 16.001 16\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_15759\",\n \"data-name\": \"Path 15759\",\n d: \"M13.75-13.8.75-6.3A1.5,1.5,0,0,0,.928-3.616L4.5-2.138V.5a1.5,1.5,0,0,0,2.706.894L8.575-.453l3.5,1.444a1.516,1.516,0,0,0,.572.112,1.5,1.5,0,0,0,.738-.194,1.51,1.51,0,0,0,.747-1.078l1.856-12.1A1.5,1.5,0,0,0,13.75-13.8ZM6,.5V-1.519l1.144.472Zm6.644-.9L7.837-2.381,12.219-8.7a.5.5,0,0,0-.741-.663L4.869-3.606,1.5-5l13-7.5Z\",\n transform: \"translate(-0.001 13.999)\",\n fill: \"#cbcbd1\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgPaperPlane, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/paper-plane.d7e7110c.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nconst _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }\nimport React from \"react\";\nconst SvgDelete = _ref => {\n let {\n svgRef,\n title\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 12.25,\n height: 14,\n viewBox: \"0 0 12.25 14\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_15761\",\n \"data-name\": \"Path 15761\",\n d: \"M7.328-.875h.656A.328.328,0,0,0,8.312-1.2V-7.109a.328.328,0,0,0-.328-.328H7.328A.328.328,0,0,0,7-7.109V-1.2A.328.328,0,0,0,7.328-.875Zm4.484-9.187H9.559l-.93-1.55A1.455,1.455,0,0,0,7.5-12.25H4.747a1.455,1.455,0,0,0-1.125.637l-.93,1.55H.437A.438.438,0,0,0,0-9.625v.437a.438.438,0,0,0,.437.437H.875V.437A1.313,1.313,0,0,0,2.187,1.75h7.875A1.313,1.313,0,0,0,11.375.437V-8.75h.437a.438.438,0,0,0,.437-.437v-.437A.438.438,0,0,0,11.812-10.062Zm-7.114-.8a.182.182,0,0,1,.141-.08H7.41a.182.182,0,0,1,.141.08l.477.8H4.222ZM10.062.437H2.187V-8.75h7.875ZM4.266-.875h.656A.328.328,0,0,0,5.25-1.2V-7.109a.328.328,0,0,0-.328-.328H4.266a.328.328,0,0,0-.328.328V-1.2A.328.328,0,0,0,4.266-.875Z\",\n transform: \"translate(0 12.25)\",\n fill: \"#d90327\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgDelete, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/delete.0e593893.svg\";\nexport { ForwardRef as ReactComponent };","import {\r\n FormControl,\r\n Grid,\r\n IconButton,\r\n MenuItem,\r\n Select,\r\n TableContainer,\r\n} from \"@material-ui/core\";\r\nimport { Close, EditOutlined, MoreHorizRounded } from \"@material-ui/icons\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../theme/variables\";\r\nimport { ReactComponent as PaperPlane } from \"../../assets/images/paper-plane.svg\";\r\nimport { ReactComponent as DeleteIcon } from \"../../assets/images/delete.svg\";\r\nimport CustomInput from \"../../ui/CustomInput/CustomInput\";\r\n\r\nconst { colors } = variables;\r\n\r\nexport const ActionsIcon = styled(MoreHorizRounded)`\r\n color: ${colors.grayishBlue.hex};\r\n`;\r\n\r\nexport const ActionsIconButton = styled(IconButton)`\r\n padding: 0;\r\n`;\r\n\r\n// Opacity is set via _dataTable.scss\r\nexport const ActionsIconHoverButton = styled(IconButton)`\r\n opacity: 0;\r\n padding: 0;\r\n`;\r\n\r\nexport const StyledTableContainer = styled(TableContainer)`\r\n display: flex;\r\n flex-flow: column nowrap;\r\n padding-bottom: 0;\r\n`;\r\n\r\nexport const CancelIcon = styled(Close)`\r\n color: ${colors.red.hex};\r\n margin-right: 0.25em;\r\n height: 1em;\r\n background-color: rgb(${colors.red.rgb}, 0.2);\r\n border-radius: 16px;\r\n padding: 5px;\r\n`;\r\n\r\nexport const EditIcon = styled(EditOutlined)`\r\n color: ${colors.lightGrayishBlue.hex};\r\n margin-right: 0.25em;\r\n height: 0.75em;\r\n`;\r\n\r\nexport const ResendInvitationIcon = styled(PaperPlane)`\r\n color: ${colors.lightGrayishBlue.hex};\r\n margin-right: 1em;\r\n margin-left: 0.2em;\r\n`;\r\n\r\nexport const DeleteDelegeeMenuItem = styled(MenuItem)`\r\n color: #d90327;\r\n`;\r\n\r\nexport const DeleteDelegeeIcon = styled(DeleteIcon)`\r\n margin-right: 1em;\r\n margin-left: 0.2em;\r\n`;\r\n\r\nexport const NoPaddingBottomGrid = styled(Grid)`\r\n padding-bottom: 0;\r\n`;\r\n\r\nexport const HorizontalPaddingGrid = styled(Grid)`\r\n padding: 0 0.5em;\r\n`;\r\n\r\nexport const PaddingRightGrid = styled(Grid)`\r\n padding: 0 0.5em 0 0;\r\n`;\r\n\r\nexport const PaddingLeftGrid = styled(Grid)`\r\n padding: 0 0 0 0.5em;\r\n`;\r\n\r\nexport const TextFilterInput = styled(CustomInput)`\r\n width: 100%;\r\n`;\r\n\r\nexport const FilterFormControl = styled(FormControl)`\r\n width: 100%;\r\n`;\r\n\r\nexport const FilterSelect = styled(Select)`\r\n padding-right: 45px;\r\n`;\r\n\r\nexport const HeaderPaddedGrid = styled(Grid)`\r\n padding: 0.7em 1em;\r\n border-bottom: 1px solid ${colors.lightGrayishBlue.hex};\r\n background-color: ${colors.mostlyWhite};\r\n`;\r\n\r\nexport const StyledDataTableWrapper = styled(Grid)`\r\n padding: 0;\r\n margin: 0;\r\n`;\r\n","import { Grid, MenuItem } from \"@material-ui/core\";\r\nimport { EditOutlined } from \"@material-ui/icons\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../../theme/variables\";\r\nimport { ReactComponent as PaperPlane } from \"../../../assets/images/paper-plane.svg\";\r\nimport { ReactComponent as DeleteIcon } from \"../../../assets/images/delete.svg\";\r\n\r\nconst { colors } = variables;\r\n\r\nexport const NoPaddingGrid = styled(Grid)`\r\n padding-bottom: 0;\r\n`;\r\n\r\nexport const EditIcon = styled(EditOutlined)`\r\n color: ${colors.lightGrayishBlue.hex};\r\n margin-right: 0.25em;\r\n height: 0.75em;\r\n`;\r\n\r\nexport const ResendInvitationIcon = styled(PaperPlane)`\r\n color: ${colors.lightGrayishBlue.hex};\r\n margin-right: 0.8em;\r\n margin-left: 0.2em;\r\n`;\r\n\r\nexport const DeleteDelegeeMenuItem = styled(MenuItem)`\r\n color: #d90327;\r\n`;\r\n\r\nexport const DeleteDelegeeIcon = styled(DeleteIcon)`\r\n margin-right: 1em;\r\n margin-left: 0.2em;\r\n`;\r\n","import styled from \"styled-components\";\r\nimport CancelIcon from \"@material-ui/icons/Cancel\";\r\nimport { KeyboardArrowDownRounded, KeyboardArrowUpRounded, SearchOutlined } from \"@material-ui/icons\";\r\nimport { variables } from \"../../../theme/variables\";\r\nimport { FormControl } from \"@material-ui/core\";\r\nimport CustomInput from \"../../../ui/CustomInput/CustomInput\";\r\nimport { ReactComponent as DeleteIcon } from \"../../../assets/images/delete.svg\";\r\n\r\nconst { colors, typography } = variables;\r\n\r\nexport const FilterWrapper = styled.div`\r\n position: relative;\r\n`;\r\n\r\nexport const ClearInputIcon = styled(CancelIcon)`\r\n height: 14px;\r\n cursor: pointer;\r\n color: ${colors.darkGraySecondary};\r\n`;\r\n\r\nexport const SeachIcon = styled(SearchOutlined)`\r\n height: 18px;\r\n color: ${colors.lightGray};\r\n`;\r\n\r\n\r\nexport const PaddingFormControl = styled(FormControl)`\r\n padding: 0 5px;\r\n position: relative;\r\n width: 100%;\r\n`;\r\n\r\nexport const FilterNumberBubble = styled.div`\r\n border: 1px solid ${colors.grayishBlue.hex};\r\n background-color: ${colors.mostlyWhite};\r\n font-size: ${typography.fontSizeExtraSmall};\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 0px 7px;\r\n border-radius: 500px;\r\n max-width: 70%;\r\n margin: 0 5px;\r\n`;\r\n\r\nexport const AbsoluteClearInputIcon = styled(ClearInputIcon)`\r\n position: absolute;\r\n top: 13px;\r\n right: 12px;\r\n`;\r\n\r\nexport const LightGraySpan = styled.span`\r\n color: ${colors.gray.hex};\r\n`;\r\n\r\nexport const GrayDownArrow = styled(KeyboardArrowDownRounded)`\r\n color: ${colors.darkGraySecondary};\r\n width: 20px;\r\n height: 20px;\r\n margin-right: 12px;\r\n`;\r\n\r\nexport const GrayUpArrow = styled(KeyboardArrowUpRounded)`\r\n color: ${colors.darkGraySecondary};\r\n width: 20px;\r\n height: 20px;\r\n margin-right: 12px;\r\n`;\r\n\r\nexport const GrayFilterArrow = styled(KeyboardArrowUpRounded)`\r\n background-color: white;\r\n color: ${colors.darkGraySecondary};\r\n border: 1px solid ${colors.lightGray};\r\n border-radius: 20px;\r\n\r\n width: 38px;\r\n height: 38px;\r\n margin-right: 12px;\r\n position: absolute;\r\n\r\n transform: rotate(-90deg);\r\n flex-basis: 5%;\r\n z-index: 1;\r\n top: 2px;\r\n\r\n cursor: pointer;\r\n display: none;\r\n`;\r\n\r\nexport const CenterdSpan = styled.span`\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n`;\r\n\r\nexport const PaddingCustomInput = styled(CustomInput)`\r\n padding: 0 5px;\r\n`;\r\n\r\nexport const DeleteWrapper = styled.div`\r\n color: ${colors.red.hex};\r\n position: absolute;\r\n left: 24px;\r\n padding: 0;\r\n cursor: pointer;\r\n font-size: 1rem;\r\n box-sizing: border-box;\r\n font-family: FuturaT;\r\n font-weight: 400;\r\n max-width: 25%;\r\n`;\r\n\r\nexport const DeleteText = styled.div`\r\n padding-left: 25px;\r\n`;\r\n\r\n\r\nexport const DeleteDelegeeIcon = styled(DeleteIcon)`\r\n position: absolute;\r\n top: 25%;\r\n margin-right: 0.6em;\r\n margin-left: 0.2em;\r\n`;\r\n","import { MenuItem, Select } from \"@material-ui/core\";\r\nimport React, { useState } from \"react\";\r\nimport { NoPaddingGrid } from \"../../../../containers/FleetManager/FleetManagerDataTable/StyledComponents\";\r\nimport CustomCheckbox from \"../../../../ui/CustomCheckbox/CustomCheckbox\";\r\nimport {\r\n DataTableContextFilters,\r\n useDataTableContext,\r\n} from \"../../DataTableContext/DataTableContextProvider\";\r\nimport { contains, filter as $filter } from \"underscore\";\r\nimport { FilterType, IFilter } from \"../DataTableFilters\";\r\nimport {\r\n GrayUpArrow,\r\n GrayDownArrow,\r\n PaddingFormControl,\r\n LightGraySpan,\r\n CenterdSpan,\r\n FilterNumberBubble,\r\n AbsoluteClearInputIcon,\r\n} from \"../CommonStyledComponents\";\r\nimport styled from \"styled-components\";\r\n\r\nexport interface ISelectOption {\r\n label: string;\r\n value: any;\r\n}\r\n\r\ninterface ISelectFilter {\r\n filter: IFilter;\r\n entity?: DataTableContextFilters;\r\n}\r\n\r\nconst EllipsedGridItem = styled(NoPaddingGrid)`\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n`;\r\n\r\nconst EllipsedSpan = styled.span`\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n`;\r\n\r\nconst NoDecorationAbbr = styled.abbr`\r\n text-decoration: none;\r\n`;\r\n\r\nconst SelectFilter: React.FC = ({ filter, entity }) => {\r\n const { setFilter, resetFilter } = useDataTableContext();\r\n const [opened, setOpened] = useState(false);\r\n\r\n const CustomInputIcon = (count: number) => {\r\n if (count) {\r\n return null;\r\n }\r\n\r\n if (opened) {\r\n return ;\r\n }\r\n\r\n return ;\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n setFilter(entity?.key as string, entity?.type as FilterType, e.target.value as string[])\r\n }\r\n renderValue={(selected) => {\r\n if ((selected as string[]).length === 0) {\r\n return {filter.placeholder};\r\n }\r\n\r\n const selectedValues = $filter(filter.options!, (option) =>\r\n contains(selected as string[], option.value)\r\n ).map((o) => o.label);\r\n\r\n return (\r\n \r\n \r\n {selectedValues.length > 1 ? filter.placeholder : selectedValues[0]}\r\n {selectedValues.length > 1 && (\r\n {selectedValues?.length}\r\n )}\r\n \r\n \r\n );\r\n }}\r\n IconComponent={() => CustomInputIcon((entity?.value as string[]).length)}\r\n onOpen={() => setOpened(true)}\r\n onClose={() => setOpened(false)}\r\n MenuProps={{\r\n anchorOrigin: {\r\n vertical: \"bottom\",\r\n horizontal: \"left\",\r\n },\r\n transformOrigin: {\r\n vertical: \"top\",\r\n horizontal: \"left\",\r\n },\r\n getContentAnchorEl: null,\r\n }}\r\n >\r\n {filter.options?.map((o, index) => (\r\n \r\n \r\n \r\n value === o.value) || false,\r\n }}\r\n />\r\n \r\n \r\n \r\n {o.label}\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n {(entity?.value as string[]).length > 0 && (\r\n resetFilter(entity?.key as string)} />\r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default SelectFilter;\r\n","import { InputAdornment } from \"@material-ui/core\";\r\nimport React from \"react\";\r\nimport { NoPaddingGrid } from \"../../../../containers/FleetManager/FleetManagerDataTable/StyledComponents\";\r\nimport {\r\n DataTableContextFilters,\r\n useDataTableContext,\r\n} from \"../../DataTableContext/DataTableContextProvider\";\r\nimport { FilterType, IFilter } from \"../DataTableFilters\";\r\nimport { ClearInputIcon, SeachIcon } from \"../CommonStyledComponents\";\r\nimport { PaddingCustomInput } from \"../CommonStyledComponents\";\r\n\r\ninterface IInputFilter {\r\n filter: IFilter;\r\n entity?: DataTableContextFilters;\r\n}\r\n\r\nconst InputFilter: React.FC = ({ filter, entity }) => {\r\n const { setFilter, resetFilter } = useDataTableContext();\r\n\r\n return (\r\n \r\n \r\n setFilter(entity?.key as string, entity?.type as FilterType, e.target.value)\r\n }\r\n variant=\"outlined\"\r\n placeholder={filter.placeholder}\r\n autoComplete=\"off\"\r\n InputProps={{\r\n startAdornment: (\r\n \r\n \r\n \r\n ),\r\n endAdornment: (\r\n <>\r\n {entity?.value && (\r\n \r\n resetFilter(entity?.key)} />\r\n \r\n )}\r\n \r\n ),\r\n }}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default InputFilter;\r\n","export const START_DATE = \"startDate\";\r\nexport const END_DATE = \"endDate\";\r\n","import { variables } from \"../../../../../theme/variables\";\r\n\r\nconst { colors } = variables;\r\n\r\nconst hoveredStyles = {\r\n background: `rgba(${colors.lime.rgb}, 0.5)`,\r\n border: \"none\",\r\n color: colors.black,\r\n};\r\n\r\nconst selectedStyles = {\r\n background: colors.lime.hex,\r\n border: \"none\",\r\n color: colors.white,\r\n\r\n hover: {\r\n background: colors.lime.hex,\r\n border: \"none\",\r\n color: colors.white,\r\n },\r\n};\r\n\r\nconst selectedSpanStyles = {\r\n background: colors.lime.hex,\r\n border: \"none\",\r\n color: colors.white,\r\n\r\n hover: {\r\n background: colors.lime.hex,\r\n border: \"none\",\r\n color: colors.white,\r\n },\r\n};\r\n\r\nconst defaultStyles = {\r\n background: colors.mostlyWhite,\r\n border: \"none\",\r\n color: colors.black,\r\n\r\n hover: {\r\n background: colors.veryLightGray,\r\n border: \"none\",\r\n color: colors.black,\r\n },\r\n};\r\n\r\nconst outsideStyles = {\r\n background: colors.white,\r\n border: 0,\r\n color: colors.lightGrayishBlue.hex,\r\n};\r\n\r\nexport const customDayStyles = {\r\n defaultStyles: defaultStyles,\r\n outsideStyles: outsideStyles,\r\n selectedStartStyles: selectedStyles,\r\n selectedEndStyles: selectedStyles,\r\n hoveredSpanStyles: hoveredStyles,\r\n selectedSpanStyles,\r\n selectedStyles: {\r\n ...selectedStyles,\r\n ...{\r\n background: `rgba(${colors.lime.rgb}, 0.5)`,\r\n border: \"none\",\r\n color: colors.black,\r\n },\r\n },\r\n};\r\n","import { Popper } from \"@material-ui/core\";\r\nimport { CancelRounded, DateRangeOutlined } from \"@material-ui/icons\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../../../../theme/variables\";\r\nimport { IDatePickerProps } from \"./DatePicker\";\r\n\r\nconst { colors } = variables;\r\n\r\nexport const StyledPopper = styled(Popper)`\r\n margin-top: 5px;\r\n`;\r\n\r\nexport const DatePickerContainer = styled.div`\r\n position: relative;\r\n width: 100%;\r\n z-index: 2050;\r\n`;\r\n\r\nexport const DatePickerWrapper = styled.div.attrs((props: IDatePickerProps) => ({\r\n size: props.size || \"medium\",\r\n}))`\r\n ${({ size }) => (size === \"small\" ? \"top: 5px;\" : \"top: 55px;\")}\r\n right: 3px;\r\n z-index: 2050;\r\n`;\r\n\r\nexport const DatePickerFieldSet = styled.div`\r\n border: 2px solid transparent;\r\n border-radius: 5px;\r\n outline: none;\r\n padding: 0;\r\n margin: 0;\r\n position: relative;\r\n\r\n &:hover {\r\n cursor: default;\r\n }\r\n\r\n &:focus {\r\n border-color: ${colors.lime.hex};\r\n\r\n & > div {\r\n border-color: transparent;\r\n }\r\n }\r\n`;\r\n\r\nexport const DatePickerInput = styled.div.attrs((props: IDatePickerProps) => ({\r\n size: props.size || \"medium\",\r\n}))`\r\n outline: none;\r\n width: 100%;\r\n ${({ size }) =>\r\n size === \"small\" ? \"padding: 7px 36px 7px 14px;\" : \"padding: 9px 36px 9px 14px;\"}\r\n border-radius: 4px;\r\n border: 1px solid ${colors.lightGrayishBlue.hex};\r\n background-color: ${colors.white};\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n\r\n &:hover {\r\n border-color: ${colors.grayishBlue.hex};\r\n }\r\n`;\r\n\r\nexport const ClearIcon = styled(CancelRounded).attrs((props: IDatePickerProps) => ({\r\n size: props.size || \"medium\",\r\n}))`\r\n width: 14px;\r\n height: 14px;\r\n position: absolute;\r\n right: 10px;\r\n color: ${colors.darkGraySecondary};\r\n ${({ size }) => (size === \"small\" ? \"top: 12px;\" : \"top: 13px;\")}\r\n\r\n &:hover {\r\n cursor: pointer;\r\n }\r\n`;\r\n\r\nexport const DateRangeIcon = styled(DateRangeOutlined).attrs((props: IDatePickerProps) => ({\r\n size: props.size || \"medium\",\r\n}))`\r\n width: 18px;\r\n height: 18px;\r\n position: absolute;\r\n right: 12px;\r\n color: ${colors.lightGray};\r\n ${({ size }) => (size === \"small\" ? \"top: 10px;\" : \"top: 13px;\")}\r\n\r\n &:hover {\r\n cursor: pointer;\r\n }\r\n`;\r\n\r\nexport const Placeholder = styled.span`\r\n color: ${colors.gray.hex};\r\n font-size: 15px;\r\n`;\r\n\r\nexport const DateRange = styled.span`\r\n color: ${colors.black};\r\n font-size: 15px;\r\n`;\r\n","import React, { useCallback, useContext, useEffect, useState } from \"react\";\r\nimport { DayPickerRangeController } from \"react-dates\";\r\nimport CustomizableCalendarDay from \"react-dates/lib/components/CustomizableCalendarDay.js\";\r\nimport moment, { Moment } from \"moment\";\r\nimport { NavigateBeforeRounded, NavigateNextRounded } from \"@material-ui/icons\";\r\nimport { START_DATE } from \"./DatePicker.constants\";\r\nimport { customDayStyles } from \"./DatePicker.styles\";\r\nimport {\r\n ClearIcon,\r\n DatePickerContainer,\r\n DatePickerFieldSet,\r\n DatePickerInput,\r\n DatePickerWrapper,\r\n DateRange,\r\n DateRangeIcon,\r\n Placeholder,\r\n StyledPopper,\r\n} from \"./DatePicker.styledComponents\";\r\nimport { isNull, isUndefined } from \"underscore\";\r\nimport \"react-dates/initialize\";\r\nimport \"react-dates/lib/css/_datepicker.css\";\r\nimport \"./_datepicker-override.scss\";\r\n\r\ntype FocusType = \"startDate\" | \"endDate\" | null;\r\n\r\nexport interface IDatePickerProps {\r\n onDateSelected?: (startDate: Date | null, endDate: Date | null) => void;\r\n onDateReset?: () => void;\r\n size?: \"medium\" | \"small\";\r\n placeholder?: string;\r\n resetRef?: React.MutableRefObject<() => void>;\r\n}\r\n\r\ntype DatePickerState = {\r\n startDate: Moment | null;\r\n endDate: Moment | null;\r\n};\r\n\r\nconst initialState: DatePickerState = {\r\n startDate: null,\r\n endDate: null,\r\n};\r\n\r\nconst DatePicker: React.FC = ({\r\n onDateSelected,\r\n size,\r\n placeholder,\r\n onDateReset,\r\n resetRef,\r\n}) => {\r\n const [dateRange, setDateRange] = useState(initialState);\r\n const [focus, setFocus] = useState(START_DATE);\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n\r\n const onDateSelectedAction = useCallback(() => {\r\n if (isUndefined(onDateSelected)) {\r\n return;\r\n }\r\n\r\n const { startDateJsDate, endDateJsDate } = getStartAndEndDateJsDate();\r\n\r\n onDateSelected(startDateJsDate, endDateJsDate);\r\n }, [dateRange.startDate, dateRange.endDate]);\r\n\r\n useEffect(() => {\r\n onDateSelectedAction();\r\n }, [onDateSelectedAction]);\r\n\r\n useEffect(() => {\r\n if (isUndefined(resetRef)) {\r\n return;\r\n }\r\n\r\n resetRef.current = () => setDateRange(initialState);\r\n }, []);\r\n\r\n const getStartAndEndDateJsDate = (): {\r\n startDateJsDate: Date | null;\r\n endDateJsDate: Date | null;\r\n } => {\r\n if (isUndefined(dateRange.startDate)) {\r\n setDateRange({\r\n ...dateRange,\r\n startDate: null,\r\n });\r\n }\r\n\r\n if (isUndefined(dateRange.endDate)) {\r\n setDateRange({\r\n ...dateRange,\r\n endDate: null,\r\n });\r\n }\r\n\r\n return {\r\n startDateJsDate: !isNull(dateRange.startDate) ? dateRange.startDate.toDate() : null,\r\n endDateJsDate: !isNull(dateRange.endDate) ? dateRange.endDate.toDate() : null,\r\n };\r\n };\r\n\r\n const onDatesChange = ({ startDate, endDate }: DatePickerState) =>\r\n setDateRange({\r\n ...dateRange,\r\n startDate: startDate,\r\n endDate: endDate,\r\n });\r\n\r\n const onFocusChange = (focusedInput: FocusType) => {\r\n const focus = !focusedInput ? START_DATE : focusedInput;\r\n\r\n setFocus(focus);\r\n };\r\n\r\n const clearDateSelection = (event: React.MouseEvent) => {\r\n event.stopPropagation();\r\n setDateRange(initialState);\r\n\r\n if (!isUndefined(onDateReset)) {\r\n onDateReset();\r\n }\r\n };\r\n\r\n const { startDate, endDate } = dateRange;\r\n const startDateString = startDate && moment(startDate).format(\"DD/MM/YYYY\");\r\n const endDateString = endDate && moment(endDate).format(\"DD/MM/YYYY\");\r\n\r\n const DateRangeValue = () => (\r\n <>\r\n {startDate && endDate ? (\r\n {`${startDateString} - ${endDateString}`}\r\n ) : (\r\n {placeholder}\r\n )}\r\n \r\n );\r\n\r\n const InputIcon = ({ size }: IDatePickerProps) => (\r\n <>\r\n {dateRange.startDate && dateRange.endDate ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n );\r\n\r\n const onInputClicked = (e: React.MouseEvent) =>\r\n setAnchorEl(e.currentTarget);\r\n const onOutsideClicked = () => setAnchorEl(null);\r\n\r\n const open = Boolean(anchorEl);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n (\r\n \r\n )}\r\n navNext={}\r\n navPrev={}\r\n />\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default DatePicker;\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport { findWhere, isNull, isUndefined } from \"underscore\";\r\nimport { NoPaddingGrid } from \"../../../../containers/FleetManager/FleetManagerDataTable/StyledComponents\";\r\nimport {\r\n DataTableContextFilters,\r\n DateFilter as DateFilterType,\r\n useDataTableContext,\r\n} from \"../../DataTableContext/DataTableContextProvider\";\r\nimport { FilterType, IFilter } from \"../DataTableFilters\";\r\nimport DatePicker from \"./DatePicker/DatePicker\";\r\n\r\ninterface IDateFilter {\r\n filter: IFilter;\r\n entity?: DataTableContextFilters;\r\n}\r\n\r\nconst DateFilter: React.FC = ({ filter, entity }) => {\r\n const { state, setFilter, resetFilter } = useDataTableContext();\r\n\r\n const resetInternalRef = useRef<() => void>(() => {});\r\n\r\n useEffect(() => {\r\n if (!isUndefined(state.filters)) {\r\n const found = findWhere(state.filters as DataTableContextFilters[], {\r\n key: entity?.key as string,\r\n });\r\n\r\n const { startDate, endDate } = found?.value as DateFilterType;\r\n if (isNull(startDate) && isNull(endDate)) {\r\n resetInternalRef.current();\r\n }\r\n }\r\n }, [state.filters]);\r\n\r\n const setStartEndDate = (startDate: Date | null, endDate: Date | null) => {\r\n if (startDate && !endDate) {\r\n return;\r\n }\r\n\r\n setFilter(entity?.key as string, entity?.type as FilterType, {\r\n startDate,\r\n endDate,\r\n customKeys: filter.customDateKeys,\r\n });\r\n };\r\n\r\n return (\r\n \r\n resetFilter(entity?.key as string)}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default DateFilter;\r\n","import React, { useCallback, useEffect, useState } from \"react\";\r\nimport {\r\n every,\r\n findWhere,\r\n isEmpty,\r\n isNull,\r\n isUndefined,\r\n where,\r\n} from \"underscore\";\r\nimport { NoPaddingGrid } from \"../../UserCard/UserCardStyledComponents\";\r\nimport {\r\n DataTableContextFilters,\r\n useDataTableContext,\r\n DateFilter as DateFilterType,\r\n} from \"../DataTableContext/DataTableContextProvider\";\r\nimport { Column, MultiSelectOption } from \"../DataTableHead/DataTableHead\";\r\nimport { HeaderPaddedGrid } from \"../DataTableStyledComponents\";\r\nimport RefreshIcon from \"@material-ui/icons/Refresh\";\r\nimport CustomButton from \"../../../ui/CustomButton/CustomButton\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport styled from \"styled-components\";\r\nimport SelectFilter from \"./DataTableFilterTypes/SelectFilter\";\r\nimport InputFilter from \"./DataTableFilterTypes/InputFilter\";\r\nimport { variables } from \"../../../theme/variables\";\r\nimport DateFilter from \"./DataTableFilterTypes/DateFilter\";\r\nimport { GrayFilterArrow } from \"./CommonStyledComponents\";\r\n\r\nconst { colors } = variables;\r\n\r\nconst StyledRefreshIcon = styled(RefreshIcon)`\r\n height: 20px;\r\n width: 20px;\r\n color: ${colors.darkGraySecondary};\r\n cursor: pointer;\r\n`;\r\n\r\nexport type FilterRef = {\r\n onFilterClicked: () => void;\r\n};\r\n\r\nexport enum FilterType {\r\n Text,\r\n Multiselect,\r\n Date,\r\n QueryParam,\r\n}\r\n\r\nexport interface IFilter {\r\n key: string;\r\n type?: FilterType;\r\n value?: string;\r\n options?: MultiSelectOption[];\r\n placeholder?: string;\r\n customDateKeys?: { startKey: string; endKey: string };\r\n}\r\n\r\nexport interface IFilteredColumn extends Column {\r\n enableFiltering?: boolean;\r\n filter?: IFilter;\r\n}\r\n\r\nexport interface IDataTableFiltersProps {\r\n columns: IFilteredColumn[];\r\n showFilters: boolean;\r\n onFilterClicked: () => void;\r\n onResetFiltersClicked?: () => void;\r\n filtersRef?: React.MutableRefObject;\r\n}\r\n\r\nconst DataTableFilters = ({\r\n columns,\r\n showFilters,\r\n onFilterClicked,\r\n onResetFiltersClicked,\r\n filtersRef,\r\n}: IDataTableFiltersProps) => {\r\n const filteredColumns = where(columns, { enableFiltering: true });\r\n const { state, setFilter, resetFiltersAsync, resetPageNumber } =\r\n useDataTableContext();\r\n const { t } = useTranslation(\"dataTable\");\r\n\r\n const [filtered, setFiltered] = useState(false);\r\n\r\n const onFiltering = () => {\r\n resetPageNumber();\r\n onFilterClicked();\r\n setFiltered(true);\r\n\r\n if (!isUndefined(filtersRef)) {\r\n filtersRef.current.onFilterClicked();\r\n }\r\n };\r\n\r\n const onResetFilters = () => {\r\n resetFiltersAsync().then((result) => {\r\n setFiltered(false);\r\n\r\n if (result && !isUndefined(onResetFiltersClicked)) {\r\n onResetFiltersClicked();\r\n }\r\n });\r\n };\r\n\r\n const resetWhenInputsAreEmpty = useCallback(() => {\r\n let inputsEmpty = every(\r\n state.filters as DataTableContextFilters[],\r\n (filter) =>\r\n isEmpty(filter.value) ||\r\n isNull((filter.value as DateFilterType).startDate) ||\r\n isNull((filter.value as DateFilterType).endDate)\r\n );\r\n\r\n if (filtered && inputsEmpty && !isUndefined(onResetFiltersClicked)) {\r\n onResetFiltersClicked();\r\n }\r\n\r\n // eslint-disable-next-line\r\n }, [state.filters]);\r\n\r\n const initFilter = (column: IFilteredColumn) => {\r\n if (isUndefined(column.filter)) {\r\n return;\r\n }\r\n\r\n const { filter } = column;\r\n if (filter.type === FilterType.Text) {\r\n setFilter(filter.key, FilterType.Text, \"\");\r\n }\r\n\r\n if (filter.type === FilterType.Multiselect) {\r\n setFilter(filter.key, FilterType.Multiselect, [] as string[]);\r\n }\r\n\r\n if (filter.type === FilterType.Date) {\r\n setFilter(filter.key, FilterType.Date, {\r\n startDate: null,\r\n endDate: null,\r\n customKeys: filter.customDateKeys,\r\n });\r\n }\r\n };\r\n\r\n const determineArrowVisibility = () => {\r\n const filtersBar = document.getElementById(\"filters-bar\");\r\n if (filtersBar) {\r\n const leftArrow = document.getElementById(\"filters-left-arrow\");\r\n const rightArrow = document.getElementById(\"filters-right-arrow\");\r\n const arrowsVisible = filtersBar.scrollWidth > filtersBar.clientWidth;\r\n const leftArrowVisible = arrowsVisible && filtersBar.scrollLeft > 0;\r\n const rightArrowVisible =\r\n arrowsVisible && filtersBar.scrollWidth > filtersBar.clientWidth;\r\n\r\n leftArrow?.style.setProperty(\r\n \"display\",\r\n leftArrowVisible ? \"block\" : \"none\"\r\n );\r\n rightArrow?.style.setProperty(\r\n \"display\",\r\n rightArrowVisible ? \"block\" : \"none\"\r\n );\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (isEmpty(state.filters)) {\r\n filteredColumns.forEach(initFilter);\r\n }\r\n\r\n if (state.showFilters) {\r\n determineArrowVisibility();\r\n window.addEventListener(\"resize\", determineArrowVisibility);\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", determineArrowVisibility);\r\n };\r\n }\r\n\r\n // eslint-disable-next-line\r\n }, [state.showFilters]);\r\n\r\n useEffect(() => {\r\n resetWhenInputsAreEmpty();\r\n }, [resetWhenInputsAreEmpty]);\r\n\r\n if (!showFilters) {\r\n return null;\r\n }\r\n\r\n const Filters = (column: IFilteredColumn, index: number) => {\r\n if (isUndefined(column.filter)) {\r\n return null;\r\n }\r\n\r\n const { filter } = column;\r\n const found = findWhere(state.filters as DataTableContextFilters[], {\r\n key: filter.key,\r\n });\r\n\r\n if (filter.type === FilterType.Text) {\r\n return ;\r\n }\r\n\r\n if (filter.type === FilterType.Multiselect) {\r\n return ;\r\n }\r\n\r\n if (filter.type === FilterType.Date) {\r\n return ;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n const hasAnyValue = (): boolean => {\r\n let result = false;\r\n\r\n if (!isUndefined(state.filters)) {\r\n state.filters.forEach((filter) => {\r\n if (\r\n (filter.type === FilterType.Text ||\r\n filter.type === FilterType.Multiselect) &&\r\n !isEmpty(filter.value)\r\n ) {\r\n result = true;\r\n\r\n return;\r\n }\r\n\r\n if (filter.type === FilterType.Date) {\r\n const { startDate, endDate } = filter.value as DateFilterType;\r\n if (!isNull(startDate) && !isNull(endDate)) {\r\n result = true;\r\n\r\n return;\r\n }\r\n }\r\n });\r\n }\r\n\r\n return result;\r\n };\r\n\r\n const handleArrowClick = (e: React.MouseEvent) => {\r\n const filtersBar = document.getElementById(\"filters-bar\");\r\n if (filtersBar) {\r\n const arrowId = (e.target as HTMLInputElement).id;\r\n\r\n const isLeftArrow = arrowId === \"filters-left-arrow\";\r\n filtersBar.scrollLeft += isLeftArrow ? -150 : 150;\r\n\r\n const leftArrow = document.getElementById(\"filters-left-arrow\");\r\n const rightArrow = document.getElementById(\"filters-right-arrow\");\r\n if (isLeftArrow && leftArrow) {\r\n rightArrow?.style.setProperty(\"display\", \"block\");\r\n\r\n if (filtersBar.scrollLeft <= 0) {\r\n leftArrow.style.setProperty(\"display\", \"none\");\r\n }\r\n } else if (!isLeftArrow && rightArrow) {\r\n leftArrow?.style.setProperty(\"display\", \"block\");\r\n\r\n const maxScrollLeft = filtersBar.scrollWidth - filtersBar.clientWidth;\r\n if (filtersBar.scrollLeft >= maxScrollLeft) {\r\n rightArrow.style.setProperty(\"display\", \"none\");\r\n }\r\n }\r\n }\r\n };\r\n\r\n const filterBtnDisabled = !hasAnyValue();\r\n\r\n return (\r\n \r\n \r\n \r\n handleArrowClick(e)}\r\n >\r\n\r\n
\r\n {filteredColumns.map((col, index) => Filters(col, index))}\r\n
\r\n\r\n handleArrowClick(e)}\r\n >\r\n \r\n \r\n\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {!filterBtnDisabled && (\r\n \r\n \r\n \r\n )}\r\n \r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nexport default DataTableFilters;\r\n","export const FmpFilters = {\r\n pageSize: \"pageSize\",\r\n pageNumber: \"pageNumber\",\r\n placeId: \"placeId\",\r\n name: \"name\",\r\n email: \"email\",\r\n invitationDate: \"invitationDate\",\r\n numberPlate: \"numberPlate\",\r\n description: \"description\",\r\n assignedDate: \"assignedDate\",\r\n startedDate: \"startedDate\",\r\n statuses: \"statuses\",\r\n invitationsAccepted: \"invitationsAccepted\",\r\n products: \"products\",\r\n sortBy: \"sortBy\",\r\n orderDesc: \"orderDesc\",\r\n};\r\n\r\nexport const VisitorBookingFilters = {\r\n name: \"name\",\r\n email: \"email\",\r\n facility: \"physicalZoneUIds\",\r\n products: \"productGuids\",\r\n creationDate: \"creationDate\",\r\n startDate: \"startDate\",\r\n endDate: \"endDate\",\r\n statuses: \"statuses\",\r\n};\r\n","import { isEmpty, isNull, isUndefined } from \"underscore\";\r\nimport {\r\n DataTableContextFilters,\r\n DateFilter,\r\n} from \"../components/DataTable/DataTableContext/DataTableContextProvider\";\r\nimport { FilterType } from \"../components/DataTable/DataTableFilters/DataTableFilters\";\r\nimport { FmpFilters } from \"../constants/filtering.constants\";\r\nimport { Paging } from \"../models/pagination/Paging\";\r\nimport moment from \"moment\";\r\n\r\nconst isEmptyOrUndefined = (value: any): boolean => {\r\n if (isEmpty(value)) {\r\n return true;\r\n }\r\n\r\n if (isUndefined(value)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\ntype QueryParam = {\r\n buildQueryParam: (\r\n model: DataTableContextFilters[],\r\n pagination: Paging\r\n ) => URLSearchParams;\r\n};\r\n\r\nconst queryParam: QueryParam = (() => {\r\n const startDateKey = \"startDate\";\r\n const endDateKey = \"endDate\";\r\n\r\n const getStringDate = (date: Date): string => {\r\n const stringDateFormat = \"YYYY/MM/DD\";\r\n\r\n return moment(date).format(stringDateFormat);\r\n };\r\n\r\n const enrichParamWithFilters = (\r\n filters: DataTableContextFilters[],\r\n param: URLSearchParams\r\n ): void => {\r\n filters?.forEach((f) => {\r\n if (isEmptyOrUndefined(f.value)) {\r\n return;\r\n }\r\n\r\n if (f.type === FilterType.QueryParam && !isEmptyOrUndefined(f.value)) {\r\n param.append(f.key, f.value as string);\r\n }\r\n\r\n if (f.type === FilterType.Multiselect && !isEmptyOrUndefined(f.value)) {\r\n (f.value as string[] | number[]).forEach((value: any) => {\r\n param.append(f.key, value as string);\r\n });\r\n }\r\n\r\n if (f.type === FilterType.Text && !isEmptyOrUndefined(f.value)) {\r\n param.append(f.key, f.value as string);\r\n }\r\n\r\n if (f.type === FilterType.Date && !isEmptyOrUndefined(f.value)) {\r\n const { startDate, endDate, customKeys } = f.value as DateFilter;\r\n\r\n if (isNull(startDate) || isNull(endDate)) {\r\n return;\r\n }\r\n\r\n param.append(\r\n customKeys && customKeys.startKey\r\n ? customKeys.startKey\r\n : startDateKey,\r\n getStringDate(startDate)\r\n );\r\n param.append(\r\n customKeys && customKeys.endKey ? customKeys.endKey : endDateKey,\r\n getStringDate(endDate)\r\n );\r\n }\r\n });\r\n };\r\n\r\n const buildQueryParam = (\r\n model: DataTableContextFilters[],\r\n pagination: Paging\r\n ): URLSearchParams => {\r\n const param: URLSearchParams = new URLSearchParams();\r\n\r\n param.append(FmpFilters.pageSize, pagination.pageSize.toString());\r\n param.append(FmpFilters.pageNumber, pagination.pageNumber.toString());\r\n\r\n enrichParamWithFilters(model, param);\r\n\r\n return param;\r\n };\r\n\r\n return {\r\n buildQueryParam,\r\n };\r\n})();\r\n\r\nexport default queryParam;\r\n","import { ParkingProductModel } from \"../models/ParkingProductModel\";\r\nimport axios from \"../axios\";\r\nimport parkingProductsApi, { GetVehicleAssignmentsQuery } from \"../api/parkingProducts.api\";\r\nimport { AxiosResponse } from \"axios\";\r\nimport { ParkingRightsRequestModel } from \"../models/ParkingRightsRequestModel\";\r\nimport {\r\n AssignedParkingRightsWithPagination,\r\n DelegatedParkingRightsWithPagination,\r\n DelegeesWithPagination,\r\n DelegeeWithProductsModel,\r\n FlexBudgetUnitType,\r\n VehicleAssignmentModel,\r\n VehicleAssignmentsMyFleetWithPagination,\r\n} from \"../models/delegations/DelegatedParkingProductsModel\";\r\nimport { LocatedParkingProduct } from \"../models/LocatedParkingProduct\";\r\nimport { RevokeParkingRightsModel } from \"../models/RevokeParkingRightsModel\";\r\nimport { DeleteDelegationsRequestModel } from \"../models/delegations/DeleteDelegationsRequestModel\";\r\nimport { WithFiltersAndPaging } from \"../models/filters/WithFiltersAndPaging\";\r\nimport { ForFleetManager } from \"../models/ForFleetManager\";\r\nimport queryParam from \"../utils/queryParam.utils\";\r\nimport { DataTableContextFilters, DateFilter } from \"../components/DataTable/DataTableContext/DataTableContextProvider\";\r\nimport { ValidateDelegeesResponseModel } from \"../models/bulkImport/ValidateDelegeesResponseModel\";\r\nimport { ValidateDelegeesRequestModel } from \"../models/bulkImport/ValidateDelegeesRequestModel\";\r\nimport { StartBulkInvitationsRequestModel } from \"../models/bulkImport/StartBulkInvitationsRequestModel\";\r\nimport { GetBulkImportProgressResponseModel } from \"../models/bulkImport/GetBulkImportProgressResponseModel\";\r\nimport { GetBulkImportStatusResponseModel } from \"../models/bulkImport/GetBulkImportStatusResponseModel\";\r\nimport { AssignVehicleRequestModel } from \"../models/vehicle-assignments/AssignVehicleRequestModel\";\r\nimport { UpdateVehicleRequestModel } from \"../models/vehicle-assignments/UpdateVehicleRequestModel\";\r\nimport { AssignVehicleResponseModel } from \"../models/vehicle-assignments/AssignVehicleResponseModel\";\r\nimport { FmpFilters } from \"../constants/filtering.constants\";\r\nimport { isNil } from \"lodash\";\r\nimport { RevokeVehicleAssignmentsModel } from \"../models/vehicle-assignments/RevokeVehicleAssignmentsModel\";\r\nimport { DeleteVehicleAssignmentsModel } from \"../models/vehicle-assignments/DeleteVehicleAssignmentsModel\";\r\nimport moment from \"moment\";\r\nimport { UpdateVehicleResponseModel } from \"../models/vehicle-assignments/UpdateVehicleResponseModel\";\r\nimport { CalculatedWhitelistDeltaResponse, CalculateWhitelistDeltaRequest } from \"../models/vehicle-assignments/CalculateWhitelistDelta\";\r\nimport { StartBulkVehicleAssignmentRequest } from \"../models/vehicle-assignments/StartBulkVehicleAssignmentRequest\";\r\n\r\ntype ParkingProductsService = {\r\n getParkingProducts: (\r\n seasonTicketOwnerCrmId: string,\r\n location: string\r\n ) => Promise>;\r\n delegateParkingRights: (\r\n model: ParkingRightsRequestModel\r\n ) => Promise;\r\n updateDelegation: (\r\n model: ParkingRightsRequestModel\r\n ) => Promise;\r\n getDelegatedParkingProducts: (\r\n delegatedParkingRightsRequest: WithFiltersAndPaging\r\n ) => Promise>;\r\n getVehicles: (query: GetVehicleAssignmentsQuery) => Promise>;\r\n getLocatedParkingProducts: (\r\n seasonTicketOwnerCrmId: string,\r\n language: string\r\n ) => Promise>;\r\n getDelegeeDetails: (\r\n registrationId: string,\r\n language: string\r\n ) => Promise>;\r\n deleteDelegee: (registrationId: string) => Promise;\r\n resendDelegeeInvite: (\r\n registrationId: string,\r\n seasonTicketOwnerCrmId: string\r\n ) => Promise;\r\n getDelegees: (\r\n request: WithFiltersAndPaging\r\n ) => Promise>;\r\n revokeParkingRights: (\r\n model: RevokeParkingRightsModel\r\n ) => Promise;\r\n deleteDelegations: (\r\n request: DeleteDelegationsRequestModel\r\n ) => Promise;\r\n validateDelegees: (\r\n seasonTicketOwnerCrmId: string,\r\n req: ValidateDelegeesRequestModel\r\n ) => Promise>;\r\n getDelegeesValidationResult: (\r\n seasonTicketOwnerCrmId: string,\r\n fileReference: string,\r\n language: string\r\n ) => Promise>;\r\n getDelegeesInvitationResult: (\r\n seasonTicketOwnerCrmId: string,\r\n fileReference: string,\r\n language: string\r\n ) => Promise>;\r\n startBulkInvitations: (\r\n seasonTicketOwnerCrmId: string,\r\n fileReference: string,\r\n request: StartBulkInvitationsRequestModel,\r\n ) => Promise\r\n getBulkImportProgress: (\r\n seasonTicketOwnerCrmId: string,\r\n fileReference: string\r\n ) => Promise>;\r\n getBulkImportStatus: (\r\n seasonTicketOwnerCrmId: string\r\n ) => Promise>;\r\n assignVehicle: (seasonTicketOwnerCrmId: string, req: AssignVehicleRequestModel) => Promise>;\r\n updateVehicleAssignment: (seasonTicketOwnerCrmId: string, aggregateId: string, req: UpdateVehicleRequestModel) => Promise>;\r\n getVehicleAssignment: (aggregateId: string) => Promise>;\r\n revokeVehicleAssignments: (model: RevokeVehicleAssignmentsModel) => Promise;\r\n deleteVehicleAssignments: (model: DeleteVehicleAssignmentsModel) => Promise;\r\n getVehicleAssignmentsMyFleet: (query: GetVehicleAssignmentsQuery) \r\n => Promise>;\r\n calculateWhitelistDelta: (\r\n req: CalculateWhitelistDeltaRequest\r\n ) => Promise>;\r\n startBulkVehicleAssignment: (\r\n seasonTicketOwnerCrmId: string,\r\n fileReference: string,\r\n startBulkVehicleAssignmentRequest: StartBulkVehicleAssignmentRequest\r\n ) => Promise\r\n}\r\n\r\nconst getParkingProducts = (\r\n seasonTicketOwnerCrmId: string,\r\n location: string\r\n): Promise> => {\r\n return axios.get(\r\n parkingProductsApi.getParkingProductsUrl(seasonTicketOwnerCrmId, location)\r\n );\r\n};\r\n\r\nconst getLocatedParkingProducts = (\r\n seasonTicketOwnerCrmId: string,\r\n language: string\r\n) => {\r\n return axios.get(\r\n parkingProductsApi.getLocatedParkingProductsUrl(\r\n seasonTicketOwnerCrmId,\r\n language\r\n )\r\n );\r\n};\r\n\r\nconst delegateParkingRights = (\r\n model: ParkingRightsRequestModel\r\n): Promise => {\r\n return axios.post(parkingProductsApi.getDelegateParkingRightsUrl(), model);\r\n};\r\n\r\nconst updateDelegation = (\r\n model: ParkingRightsRequestModel\r\n): Promise => {\r\n return axios.put(parkingProductsApi.getUpdateDelegationUrl(), model);\r\n};\r\n\r\nconst getDelegatedParkingProducts = (\r\n delegatedParkingRightsRequest: WithFiltersAndPaging\r\n): Promise> => {\r\n const params = queryParam.buildQueryParam(\r\n delegatedParkingRightsRequest.filters as DataTableContextFilters[],\r\n delegatedParkingRightsRequest.pagination\r\n );\r\n\r\n return axios.get(\r\n parkingProductsApi.getDelegatedParkingRightsUrl(\r\n delegatedParkingRightsRequest.entity.seasonTicketOwnerCrmId,\r\n delegatedParkingRightsRequest.entity.language\r\n ),\r\n { params }\r\n );\r\n};\r\n\r\nfunction convertDateFilter(start: Date, end?: Date | null): { start: string; end: string } {\r\n const convertedStart = moment(start).startOf(\"day\");\r\n if (isNil(end)) {\r\n end = start;\r\n }\r\n const convertedEnd = moment(end).startOf(\"day\").add(1, \"day\").subtract(1, \"second\");\r\n\r\n return {\r\n start: convertedStart.toISOString(true),\r\n end: convertedEnd.toISOString(true),\r\n };\r\n}\r\n\r\nexport function convertFiltersToGetVehicleAssignmentsQuery(\r\n r: WithFiltersAndPaging\r\n): GetVehicleAssignmentsQuery {\r\n const { filters } = r;\r\n const assignedDateFilter = filters?.find((x) => x.key === FmpFilters.assignedDate)?.value as\r\n | DateFilter\r\n | undefined;\r\n const startedDateFilter = filters?.find((x) => x.key === FmpFilters.startedDate)?.value as\r\n | DateFilter\r\n | undefined;\r\n\r\n const convertedAssginedDateFilter =\r\n isNil(assignedDateFilter) || isNil(assignedDateFilter.startDate)\r\n ? undefined\r\n : convertDateFilter(assignedDateFilter.startDate, assignedDateFilter.endDate);\r\n const convertedStartedDateFilter =\r\n isNil(startedDateFilter) || isNil(startedDateFilter.startDate)\r\n ? undefined\r\n : convertDateFilter(startedDateFilter.startDate, startedDateFilter.endDate);\r\n\r\n return {\r\n seasonTicketOwnerCrmId: r.entity.seasonTicketOwnerCrmId,\r\n placeId: Number(filters?.find((x) => x.key === FmpFilters.placeId)?.value),\r\n language: r.entity.language,\r\n page: r.pagination.pageNumber,\r\n pageSize: r.pagination.pageSize,\r\n assignedDateStart: convertedAssginedDateFilter?.start,\r\n assignedDateEnd: convertedAssginedDateFilter?.end,\r\n ascending: r.filters?.find((x) => x.key === FmpFilters.orderDesc)?.value === \"false\",\r\n numberPlateValue: filters?.find((x) => x.key === FmpFilters.numberPlate)?.value as any,\r\n pmcIds: filters?.find((x) => x.key === FmpFilters.products)?.value as any,\r\n sortBy: filters?.find((x) => x.key === FmpFilters.sortBy)?.value as any,\r\n description: filters?.find((x) => x.key === FmpFilters.description)?.value as any,\r\n StartedDateStart: convertedStartedDateFilter?.start,\r\n StartedDateEnd: convertedStartedDateFilter?.end\r\n };\r\n}\r\n\r\nasync function getVehicles(\r\n query: GetVehicleAssignmentsQuery\r\n): Promise> {\r\n const url = parkingProductsApi.getVehicleAssignmentsUrl(query);\r\n\r\n type ApiDto = {\r\n items: Array<{\r\n vehicleAssignmentId: string;\r\n parkingRightId: string;\r\n pmcId: number;\r\n pmcName: string;\r\n locationName: string;\r\n description?: string;\r\n numberPlate: {\r\n countryCode: string;\r\n value: string;\r\n };\r\n assignedAt: string;\r\n startedAt: string;\r\n flexBudgetRemainingTime: number | null;\r\n flexBudgetUnitType: FlexBudgetUnitType | null;\r\n }>;\r\n filteredCount: number;\r\n };\r\n\r\n const map = (dto: ApiDto): AssignedParkingRightsWithPagination => {\r\n const pages = Math.ceil(dto.filteredCount / query.pageSize);\r\n\r\n return {\r\n assignedParkingRights: dto.items.map((x) => ({\r\n vehicleAssignmentId: x.vehicleAssignmentId,\r\n parkingRight: {\r\n id: x.parkingRightId,\r\n pmc: x.pmcId,\r\n location: x.locationName,\r\n name: x.pmcName,\r\n },\r\n assigned: new Date(x.assignedAt),\r\n startedAt: x.startedAt ? new Date(x.startedAt) : null,\r\n vehicle: {\r\n countryCode: x.numberPlate.countryCode,\r\n identifier: x.numberPlate.value,\r\n description: x.description,\r\n },\r\n flexBudgetRemainingTime: x.flexBudgetRemainingTime === null ? undefined : x.flexBudgetRemainingTime.toString(),\r\n flexBudgetUnitType: x.flexBudgetUnitType === null ? undefined : x.flexBudgetUnitType\r\n })),\r\n pages,\r\n totalRecords: dto.filteredCount,\r\n };\r\n };\r\n\r\n const response = await axios.get(url);\r\n\r\n return {\r\n ...response,\r\n data: response.data && map(response.data),\r\n };\r\n}\r\n\r\nconst getDelegeeDetails = (\r\n registrationId: string,\r\n language: string\r\n): Promise> => {\r\n return axios.get(\r\n parkingProductsApi.getDelegeeDetailsUrl(registrationId, language)\r\n );\r\n};\r\n\r\nconst deleteDelegee = (registrationId: string): Promise => {\r\n return axios.delete(parkingProductsApi.getDeleteDelegeeUrl(registrationId));\r\n};\r\n\r\nconst resendDelegeeInvite = (\r\n registrationId: string,\r\n seasonTicketOwnerCrmId: string\r\n): Promise => {\r\n return axios.post(\r\n parkingProductsApi.getResendDelegeeInviteUrl(\r\n registrationId,\r\n seasonTicketOwnerCrmId\r\n )\r\n );\r\n};\r\n\r\nconst getDelegees = (\r\n request: WithFiltersAndPaging\r\n): Promise> => {\r\n const params = queryParam.buildQueryParam(\r\n request.filters as DataTableContextFilters[],\r\n request.pagination\r\n );\r\n\r\n return axios.get(\r\n parkingProductsApi.getDelegeesUrl(\r\n request.entity.seasonTicketOwnerCrmId,\r\n request.entity.language\r\n ),\r\n { params }\r\n );\r\n};\r\n\r\nconst validateDelegees = (\r\n seasonTicketOwnerCrmId: string,\r\n req: ValidateDelegeesRequestModel\r\n): Promise> => {\r\n return axios.post(\r\n parkingProductsApi.getValidateDelegeesUrl(seasonTicketOwnerCrmId),\r\n req\r\n );\r\n};\r\n\r\nconst getDelegeesValidationResult = (\r\n seasonTicketOwnerCrmId: string,\r\n fileReference: string,\r\n language: string\r\n): Promise> => {\r\n return axios.get(\r\n parkingProductsApi.getDelegeesValidationResultUrl(seasonTicketOwnerCrmId, fileReference,language),\r\n {\r\n responseType: \"blob\",\r\n }\r\n );\r\n};\r\n\r\nconst getDelegeesInvitationResult = (\r\n seasonTicketOwnerCrmId: string,\r\n fileReference: string,\r\n language: string\r\n): Promise> => {\r\n return axios.get(\r\n parkingProductsApi.getDelegeesInvitationResultUrl(seasonTicketOwnerCrmId, fileReference, language),\r\n {\r\n responseType: \"blob\",\r\n }\r\n );\r\n};\r\n\r\nconst startBulkInvitations = (\r\n seasonTicketOwnerCrmId: string,\r\n fileReference: string,\r\n req: StartBulkInvitationsRequestModel): Promise> => {\r\n return axios.post(parkingProductsApi.getStartBulkInvitationsUrl(seasonTicketOwnerCrmId, fileReference), req);\r\n }\r\n\r\n \r\nconst startBulkVehicleAssignment = (\r\n seasonTicketOwnerCrmId: string,\r\n fileReference: string,\r\n startBulkVehicleAssignmentRequest: StartBulkVehicleAssignmentRequest): Promise => {\r\n return axios.post(parkingProductsApi.getStartBulkVehicleAssignmentUrl(seasonTicketOwnerCrmId, fileReference), startBulkVehicleAssignmentRequest);\r\n }\r\n\r\n\r\nconst getBulkImportProgress = (\r\n seasonTicketOwnerCrmId: string,\r\n fileReference: string\r\n): Promise> => {\r\n return axios.get(parkingProductsApi.getBulkImportProgressUrl(seasonTicketOwnerCrmId, fileReference));\r\n};\r\n\r\nconst getBulkImportStatus = (\r\n seasonTicketOwnerCrmId: string,\r\n): Promise> => {\r\n return axios.get(parkingProductsApi.getBulkImportStatusUrl(seasonTicketOwnerCrmId));\r\n}\r\n\r\nconst assignVehicle = (\r\n seasonTicketOwnerCrmId: string,\r\n req: AssignVehicleRequestModel\r\n): Promise> => {\r\n return axios.post(parkingProductsApi.getAssignVehicleUrl(seasonTicketOwnerCrmId), req);\r\n}\r\n\r\nconst updateVehicleAssignment = (\r\n seasonTicketOwnerCrmId: string,\r\n aggregateId: string,\r\n req: UpdateVehicleRequestModel\r\n): Promise> => {\r\n return axios.post(parkingProductsApi.getUpdateVehicleAssignmentUrl(seasonTicketOwnerCrmId, aggregateId), req);\r\n}\r\n\r\nconst getVehicleAssignment = (\r\n aggregateId: string\r\n): Promise> => {\r\n return axios.get(parkingProductsApi.getVehicleAssignmentUrl(aggregateId));\r\n}\r\n\r\nasync function getVehicleAssignmentsMyFleet(query: GetVehicleAssignmentsQuery): Promise> {\r\n const url = parkingProductsApi.getVehicleAssignmentsMyFleetUrl(query);\r\n\r\n type vehicleAssignmentProductDto = {\r\n parkingRightId: string;\r\n pmcId: number;\r\n pmcName: string;\r\n locationName: string;\r\n }\r\n type vehicleAssignmentsDto = {\r\n items: Array<{\r\n vehicleAssignmentId: string;\r\n description?: string;\r\n numberPlate: {\r\n countryCode: string;\r\n value: string;\r\n };\r\n assignedAt: string;\r\n products: vehicleAssignmentProductDto[]\r\n }>;\r\n filteredCount: number;\r\n };\r\n\r\n const map = (dto: vehicleAssignmentsDto): VehicleAssignmentsMyFleetWithPagination => {\r\n const pages = Math.ceil(dto.filteredCount / query.pageSize);\r\n\r\n return {\r\n vehicleAssignments: dto.items.map((x) => ({\r\n vehicleAssignmentId: x.vehicleAssignmentId, \r\n assignedAt: new Date(x.assignedAt),\r\n vehicle: {\r\n countryCode: x.numberPlate.countryCode,\r\n identifier: x.numberPlate.value,\r\n description: x.description,\r\n },\r\n products: x.products.map(p => { return { parkingRightId: p.parkingRightId, pmcId: p.pmcId, pmcName: p.pmcName, locationName: p.locationName }})\r\n })),\r\n pages,\r\n totalRecords: dto.filteredCount,\r\n };\r\n };\r\n\r\n const response = await axios.get(url);\r\n\r\n return {\r\n ...response,\r\n data: response.data && map(response.data),\r\n };\r\n}\r\n\r\nconst revokeParkingRights = (\r\n model: RevokeParkingRightsModel\r\n): Promise => {\r\n return axios.post(parkingProductsApi.getRevokeParkingRightsUrl(), model);\r\n};\r\n\r\nconst deleteDelegations = (request: DeleteDelegationsRequestModel) => {\r\n return axios.post(parkingProductsApi.getDeleteDelegeesUrl(), request);\r\n};\r\n\r\nconst revokeVehicleAssignments = (\r\n model: RevokeVehicleAssignmentsModel\r\n): Promise => {\r\n return axios.post(parkingProductsApi.getRevokeVehicleAssignmentsUrl(), model);\r\n};\r\n\r\nconst deleteVehicleAssignments = (\r\n model: DeleteVehicleAssignmentsModel\r\n): Promise => {\r\n return axios.post(parkingProductsApi.getDeleteVehicleAssignmentsUrl(), model);\r\n};\r\n\r\nconst calculateWhitelistDelta = (\r\n req: CalculateWhitelistDeltaRequest\r\n): Promise> => {\r\n return axios.post(\r\n parkingProductsApi.getCalculateWhitelistDeltaUrl(),\r\n req\r\n );\r\n};\r\n\r\nconst service: ParkingProductsService = {\r\n getParkingProducts,\r\n getLocatedParkingProducts,\r\n delegateParkingRights,\r\n updateDelegation,\r\n getDelegatedParkingProducts,\r\n getDelegeeDetails,\r\n getVehicles,\r\n deleteDelegee,\r\n resendDelegeeInvite,\r\n getDelegees,\r\n revokeParkingRights,\r\n deleteDelegations,\r\n validateDelegees,\r\n getDelegeesValidationResult,\r\n getDelegeesInvitationResult,\r\n startBulkInvitations,\r\n getBulkImportProgress,\r\n getBulkImportStatus,\r\n assignVehicle,\r\n updateVehicleAssignment,\r\n getVehicleAssignment,\r\n getVehicleAssignmentsMyFleet,\r\n revokeVehicleAssignments,\r\n deleteVehicleAssignments,\r\n calculateWhitelistDelta,\r\n startBulkVehicleAssignment\r\n};\r\n\r\nexport default service;","import { Dispatch } from \"react\";\r\nimport { ToastActionType, ToastTranslationModel } from \"../reducers/toast.reducer\";\r\nimport { toastTypes } from \"../action-types/toast.types\";\r\nimport { ToastType } from \"../../ui/CustomToast/CustomToast\";\r\n\r\nexport type ToastActions = {\r\n success: (translationModel: ToastTranslationModel) => (dispatch: Dispatch) => void;\r\n error: (translationModel: ToastTranslationModel) => (dispatch: Dispatch) => void;\r\n warning: (translationModel: ToastTranslationModel) => (dispatch: Dispatch) => void;\r\n info: (translationModel: ToastTranslationModel) => (dispatch: Dispatch) => void;\r\n hideToast: () => (dispatch: Dispatch) => void;\r\n dispose: () => (dispatch: Dispatch) => void;\r\n};\r\n\r\nconst showToast = (severity: ToastType, translationModel: ToastTranslationModel) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: toastTypes.SHOW_TOAST,\r\n severity,\r\n translationModelPayload: translationModel,\r\n });\r\n };\r\n};\r\n\r\nconst success = (translationModel: ToastTranslationModel) => showToast(\"success\", translationModel);\r\nconst error = (translationModel: ToastTranslationModel) => showToast(\"error\", translationModel);\r\nconst warning = (translationModel: ToastTranslationModel) => showToast(\"warning\", translationModel);\r\nconst info = (translationModel: ToastTranslationModel) => showToast(\"info\", translationModel);\r\n\r\nconst hideToast = () => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: toastTypes.HIDE_TOAST,\r\n });\r\n };\r\n};\r\n\r\nconst dispose = () => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: toastTypes.DISPOSE_TOAST,\r\n });\r\n };\r\n};\r\n\r\nexport const toastActions: ToastActions = {\r\n success,\r\n error,\r\n warning,\r\n info,\r\n hideToast,\r\n dispose,\r\n};\r\n","import store from \"../../store\";\r\nimport { toastActions } from \"../../store/actions/toast.actions\";\r\nimport { ToastTranslationModel } from \"../../store/reducers/toast.reducer\";\r\n\r\nconst success = (translationModel : ToastTranslationModel) => store.dispatch(toastActions.success(translationModel) as any);\r\nconst error = (translationModel : ToastTranslationModel) => store.dispatch(toastActions.error( translationModel) as any);\r\nconst warning = (translationModel: ToastTranslationModel) => store.dispatch(toastActions.warning(translationModel) as any);\r\nconst info = (translationModel : ToastTranslationModel) => store.dispatch(toastActions.info( translationModel ) as any);\r\nconst hideToast = () => store.dispatch(toastActions.hideToast() as any);\r\n\r\nexport const toastTriggers = {\r\n success,\r\n error,\r\n warning,\r\n info,\r\n hideToast,\r\n};\r\n","import { Dispatch } from \"react\";\r\nimport { loaderTypes } from \"../action-types/loader.types\";\r\nimport { LoaderActionType } from \"../reducers/loader.reducer\";\r\n\r\nexport type LoaderActions = {\r\n loadTheLoader: () => (dispatch: Dispatch) => void;\r\n killTheLoader: () => (dispatch: Dispatch) => void;\r\n};\r\n\r\nconst loadTheLoader = () => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: loaderTypes.LOAD_THE_LOADER,\r\n });\r\n };\r\n};\r\n\r\nconst killTheLoader = () => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: loaderTypes.KILL_THE_LOADER,\r\n });\r\n };\r\n};\r\n\r\nexport const loaderActions: LoaderActions = {\r\n loadTheLoader,\r\n killTheLoader,\r\n};\r\n","export const format = (value: string, ...args: any) => {\r\n if (!value.match(/^(?:(?:(?:[^{}]|(?:\\{\\{)|(?:\\}\\}))+)|(?:\\{[0-9]+\\}))+$/)) {\r\n throw new Error(\"invalid format string.\");\r\n }\r\n return value.replace(\r\n /((?:[^{}]|(?:\\{\\{)|(?:\\}\\}))+)|(?:\\{([0-9]+)\\})/g,\r\n (m: string, str: string, index: number) => {\r\n if (str) {\r\n return str.replace(/(?:{{)|(?:}})/g, (m) => m[0]);\r\n } else {\r\n if (index >= args.length) {\r\n throw new Error(\"argument index is out of range in format\");\r\n }\r\n return args[index];\r\n }\r\n }\r\n );\r\n};\r\n\r\nexport const equalsIgnoreCase = (a: string, b: string) => a?.localeCompare(b, undefined, { sensitivity: 'accent' }) === 0;\r\n\r\nexport const stringUtils = {\r\n format,\r\n};\r\n","const errorConstants = {\r\n keys: {\r\n delegeeEmail: \"delegeeEmail\",\r\n delegee: \"delegee\",\r\n accessDeviceRight: \"accessDeviceRight\",\r\n delegationId: \"delegationId\",\r\n parkingRights: \"parkingRights\",\r\n pmc: \"pmc\",\r\n seasonTicket: \"seasonTicket\",\r\n seasonTicketOwnerCrmId: \"seasonTicketOwnerCrmId\",\r\n userId: \"userId\",\r\n serverError: \"serverError\",\r\n numberPlate: 'numberPlate',\r\n },\r\n codes: {\r\n alreadyExists: \"alreadyExists\",\r\n notFound: \"notFound\",\r\n notAllowed: \"notAllowed\",\r\n notAvailable: \"notAvailable\",\r\n notComplete: \"notComplete\",\r\n notPending: \"notPending\",\r\n notValid: \"notValid\",\r\n technicalSupport: \"technicalSupport\",\r\n isRequired: \"isRequired\",\r\n generalError: \"generalError\",\r\n licensePlateAlreadyLinked: \"licensePlateAlreadyLinked\",\r\n alreadyLinkedToAnotherUser: \"alreadyLinkedToAnotherUser\"\r\n },\r\n};\r\n\r\ntype ErrorConstants = Readonly;\r\n\r\nexport default errorConstants as ErrorConstants;\r\n","import { findWhere, isNull, isUndefined } from \"underscore\";\r\nimport errorConstants from \"../constants/error.constants\";\r\nimport { ErrorContextModel, ErrorDetailsModel } from \"../models/ErrorDetailsModel\";\r\nimport { isNil } from \"lodash\";\r\n\r\ntype ErrorUtils = {\r\n checkValidationError: (error: ErrorDetailsModel | null, key: string, value: string) => boolean;\r\n checkHasNoCapacity: (error: ErrorDetailsModel | null) => boolean;\r\n checkEmailExists: (error: ErrorDetailsModel | null) => boolean;\r\n checkForSeasonTicketCrmIdNotAvailableError: (error: ErrorDetailsModel | null) => boolean;\r\n checkForParkingRightsAlreadyLinkedToALicensePlate: (error: ErrorDetailsModel | null) => boolean;\r\n checkRequestError: (error: ErrorContextModel | null, key: string, value: string) => boolean;\r\n};\r\n\r\nexport const checkValidationError = (\r\n error: ErrorDetailsModel | null,\r\n key: string,\r\n value: string\r\n) => {\r\n if (isNil(error)) {\r\n return false;\r\n }\r\n\r\n const { errors } = error;\r\n const property = {\r\n [key]: value,\r\n };\r\n\r\n const found = findWhere(errors, property);\r\n\r\n return !isUndefined(found);\r\n};\r\n\r\nexport const checkRequestError = (\r\n error: ErrorContextModel | null,\r\n key: string,\r\n value: string\r\n) => {\r\n if (isNull(error) || error.context.length <= 0) {\r\n return false;\r\n }\r\n\r\n return error.context[0].key === key && error.context[0].value === value;\r\n}\r\n\r\nexport const checkEmailExists = (error: ErrorDetailsModel | null) =>\r\n checkValidationError(error, errorConstants.keys.delegee, errorConstants.codes.alreadyExists);\r\n\r\nexport const checkHasNoCapacity = (error: ErrorDetailsModel | null) =>\r\n checkValidationError(error, errorConstants.keys.parkingRights, errorConstants.codes.notAvailable);\r\n\r\nexport const checkNumberPlateAlreadyAssigned = (error: ErrorDetailsModel | null) =>\r\n checkValidationError(error, errorConstants.keys.numberPlate, errorConstants.codes.alreadyLinkedToAnotherUser);\r\n\r\nexport const checkLicensePlateAlreadyLinked = (error: ErrorDetailsModel | null) =>\r\n checkValidationError(error, errorConstants.keys.numberPlate, errorConstants.codes.licensePlateAlreadyLinked);\r\n\r\nexport const checkForSeasonTicketCrmIdNotAvailableError = (error: ErrorDetailsModel | null) =>\r\n checkValidationError(\r\n error,\r\n errorConstants.keys.seasonTicketOwnerCrmId,\r\n errorConstants.codes.notAvailable\r\n );\r\n\r\nexport const checkForParkingRightsAlreadyLinkedToALicensePlate = (\r\n error: ErrorDetailsModel | null\r\n) =>\r\n checkValidationError(\r\n error,\r\n errorConstants.keys.parkingRights,\r\n errorConstants.codes.licensePlateAlreadyLinked\r\n );\r\n\r\nconst errorUtils: ErrorUtils = {\r\n checkValidationError,\r\n checkEmailExists,\r\n checkHasNoCapacity,\r\n checkForSeasonTicketCrmIdNotAvailableError,\r\n checkForParkingRightsAlreadyLinkedToALicensePlate,\r\n checkRequestError\r\n};\r\n\r\nexport default errorUtils;\r\n","import { request, success, failure } from \"../helpers/action.helper\";\r\nimport { parkingProductsTypes } from \"../action-types/parkingProducts.types\";\r\nimport parkingProductsService, { convertFiltersToGetVehicleAssignmentsQuery } from \"../../services/parkingProducts.service\";\r\nimport { Dispatch } from \"react\";\r\nimport { ParkingRightsRequestModel } from \"../../models/ParkingRightsRequestModel\";\r\nimport { RevokeParkingRightsModel } from \"../../models/RevokeParkingRightsModel\";\r\nimport { toastTriggers } from \"../../ui/CustomToast/toastTriggers\";\r\nimport { isUndefined, isNull, isEmpty } from \"underscore\";\r\nimport { AxiosError, AxiosResponse } from \"axios\";\r\nimport { AnyAction } from \"redux\";\r\nimport { RootReducer } from \"../reducers\";\r\nimport { ParkingProductModel } from \"../../models/ParkingProductModel\";\r\nimport {\r\n AssignedParkingRight,\r\n DelegatedParkingRight,\r\n DelegatedParkingRightsWithPagination,\r\n DelegeesWithPagination,\r\n DelegeeWithProductsModel,\r\n VehicleAssignment,\r\n VehicleAssignmentModel,\r\n} from \"../../models/delegations/DelegatedParkingProductsModel\";\r\nimport { LocatedParkingProduct } from \"../../models/LocatedParkingProduct\";\r\nimport { loaderActions } from \"./loader.actions\";\r\nimport { ErrorDetailsModel } from \"../../models/ErrorDetailsModel\";\r\nimport { DeleteDelegationsRequestModel } from \"../../models/delegations/DeleteDelegationsRequestModel\";\r\nimport { WithFiltersAndPaging } from \"../../models/filters/WithFiltersAndPaging\";\r\nimport { ForFleetManager } from \"../../models/ForFleetManager\";\r\nimport {\r\n checkForParkingRightsAlreadyLinkedToALicensePlate,\r\n checkForSeasonTicketCrmIdNotAvailableError,\r\n} from \"../../utils\";\r\nimport { ValidateDelegeesRequestModel } from \"../../models/bulkImport/ValidateDelegeesRequestModel\";\r\nimport { ValidateDelegeesResponseModel } from \"../../models/bulkImport/ValidateDelegeesResponseModel\";\r\nimport { StartBulkInvitationsRequestModel } from \"../../models/bulkImport/StartBulkInvitationsRequestModel\";\r\nimport { GetBulkImportProgressResponseModel } from \"../../models/bulkImport/GetBulkImportProgressResponseModel\";\r\nimport { GetBulkImportStatusResponseModel } from \"../../models/bulkImport/GetBulkImportStatusResponseModel\";\r\nimport { AssignVehicleRequestModel } from \"../../models/vehicle-assignments/AssignVehicleRequestModel\";\r\nimport { UpdateVehicleRequestModel } from \"../../models/vehicle-assignments/UpdateVehicleRequestModel\";\r\nimport { AssignedVehicleSuccessfulMutation } from \"../../models/vehicle-assignments/AssignedVehicleSuccessfulMutation\";\r\nimport { GetVehicleAssignmentsQuery } from \"../../api/parkingProducts.api\";\r\nimport { RevokeVehicleAssignmentsModel } from \"../../models/vehicle-assignments/RevokeVehicleAssignmentsModel\";\r\nimport { VehicleAssignmentProduct } from \"../../models/vehicle-assignments/VehicleAssignmentProduct\";\r\nimport { DeleteVehicleAssignmentsModel } from \"../../models/vehicle-assignments/DeleteVehicleAssignmentsModel\";\r\nimport { CalculatedWhitelistDeltaResponse, CalculateWhitelistDeltaRequest } from \"../../models/vehicle-assignments/CalculateWhitelistDelta\";\r\nimport { StartBulkVehicleAssignmentRequest } from \"../../models/vehicle-assignments/StartBulkVehicleAssignmentRequest\";\r\n\r\nexport type ParkingProductsDispatchType = {\r\n getParkingProducts: (\r\n seasonTicketOwnerCrmId: string,\r\n location: string,\r\n onSuccess?: () => void\r\n ) => void; \r\n getUnlimitedParkingProducts: (\r\n seasonTicketOwnerCrmId: string,\r\n location: string,\r\n onSuccess?: () => void\r\n ) => void;\r\n getLocatedParkingProducts: (\r\n seasonTicketOwnerCrmId: string,\r\n language: string\r\n ) => void;\r\n delegateParkingRights: (\r\n model: ParkingRightsRequestModel,\r\n callback?: () => void\r\n ) => void;\r\n updateDelegation: (\r\n model: ParkingRightsRequestModel,\r\n callback?: () => void\r\n ) => void;\r\n deleteDelegee: (registraionId: string, callback?: () => void) => void;\r\n getDelegatedParkingProducts: (\r\n req: WithFiltersAndPaging\r\n ) => void;\r\n getVehicles: (\r\n req: WithFiltersAndPaging,\r\n vehicleToExclude?: VehicleAssignmentProduct[],\r\n excludeByVehicleAssignmentId?: boolean\r\n ) => void;\r\n disposeError: () => void;\r\n getDelegeeDetails: (\r\n registrationId: string,\r\n language: string,\r\n callback?: () => void\r\n ) => void;\r\n clearDelegeeDetails: () => void;\r\n resendDelegeeInvite: (\r\n registrationId: string,\r\n seasonTicketOwnerCrmId: string\r\n ) => void;\r\n getDelegees: (req: WithFiltersAndPaging) => void;\r\n revokeParkingRights: (\r\n model: RevokeParkingRightsModel,\r\n callback?: () => void\r\n ) => void;\r\n deleteDelegations: (\r\n model: DeleteDelegationsRequestModel,\r\n callback?: () => void\r\n ) => void;\r\n validateDelegees: (\r\n seasonTicketOwnerCrmId: string,\r\n req: ValidateDelegeesRequestModel,\r\n onSuccess?: (response: ValidateDelegeesResponseModel) => void,\r\n onError?: (errorCode: string) => void\r\n ) => void;\r\n startBulkInvitations: (\r\n seasonTicketOwnerCrmId: string,\r\n fileReference: string,\r\n req: StartBulkInvitationsRequestModel,\r\n onSuccess?: () => void,\r\n onError?: (errorCode: string) => void\r\n ) => void;\r\n getBulkImportProgress: (\r\n seasonTicketOwnerCrmId: string,\r\n fileReference: string,\r\n pollBulkImportProgress?: () => void\r\n ) => void;\r\n getBulkImportStatus: (seasonTicketOwnerCrmId: string) => void;\r\n resetBulkImportProgress: () => void;\r\n assignVehicle: (\r\n seasonTicketOwnerCrmId: string,\r\n req: AssignVehicleRequestModel,\r\n onSuccess?: () => void,\r\n onError?: (errorCode: string) => void\r\n ) => void;\r\n updateVehicleAssignment: (\r\n seasonTicketOwnerCrmId: string,\r\n aggregateId: string,\r\n req: UpdateVehicleRequestModel,\r\n onSuccess?: () => void\r\n ) => void;\r\n getVehicleAssignment: (aggregateId: string, onSuccess?: (res: any) => void) => void;\r\n getVehicleAssignmentsMyFleet: (req: WithFiltersAndPaging, excludeIds?: string[]) => void;\r\n revokeVehicleAssignmentProducts: (\r\n model: RevokeVehicleAssignmentsModel,\r\n callback?: () => void\r\n ) => void;\r\n deleteVehicleAssignments: (\r\n model: DeleteVehicleAssignmentsModel,\r\n callback?: () => void\r\n ) => void;\r\n calculateWhitelistDelta: (\r\n req: CalculateWhitelistDeltaRequest,\r\n onSuccess?: (response: CalculatedWhitelistDeltaResponse) => void,\r\n onError?: (errorCode: string) => void\r\n ) => void;\r\n startBulkVehicleAssignment: (\r\n seasonTicketOwnerCrmId: string,\r\n fileReference: string,\r\n startBulkVehicleAssignmentRequest: StartBulkVehicleAssignmentRequest,\r\n onSuccess?: () => void,\r\n onError?: (errorCode: string) => void\r\n ) => void;\r\n};\r\n\r\nexport type ParkingProductsActionType = {\r\n type: string;\r\n parkingProductsPayload?: ParkingProductModel[];\r\n locatedParkingProductsPayload?: LocatedParkingProduct[];\r\n delegatedParkingProductsPayload?: {\r\n pageNumber: number;\r\n totalPages?: number;\r\n totalRecords?: number;\r\n payload?: DelegatedParkingRight[];\r\n };\r\n assignedVehiclesProductsPayload?: {\r\n query?: GetVehicleAssignmentsQuery;\r\n pageNumber: number;\r\n totalPages?: number;\r\n totalRecords?: number;\r\n payload?: AssignedParkingRight[];\r\n };\r\n delegeesPayload?: {\r\n pageNumber: number;\r\n totalPages?: number;\r\n totalRecords?: number;\r\n payload?: DelegeeWithProductsModel[];\r\n };\r\n delegeeDetailsPayload?: DelegeeWithProductsModel;\r\n selectedVehicleAssignment?: VehicleAssignmentModel,\r\n validateDelegeesPayload?: {\r\n fileReference: string\r\n },\r\n bulkImportProgress?: {\r\n progress: number;\r\n hasErrors: boolean;\r\n numberOfErrors: number;\r\n },\r\n vehicleAssigmentsMyFleetPayload?: {\r\n query?: GetVehicleAssignmentsQuery;\r\n pageNumber: number;\r\n totalPages?: number;\r\n totalRecords?: number;\r\n payload?: VehicleAssignment[];\r\n },\r\n revokeProductsModel?: RevokeVehicleAssignmentsModel,\r\n assignedVehicleMutation?: AssignedVehicleSuccessfulMutation;\r\n isBulkImportCompleted?: boolean;\r\n error?: ErrorDetailsModel;\r\n calculatedWhitelistDelta?: {\r\n amountOfVehiclesToUpdate: number;\r\n amountOfVehiclesToCreate: number;\r\n amountOfVehiclesToDelete: number;\r\n amountOfVehiclesWithNoChanges: number;\r\n hasChanges: boolean;\r\n fileReference: string;\r\n }\r\n};\r\n\r\nconst getParkingProducts = (\r\n seasonTicketOwnerCrmId: string,\r\n location: string\r\n) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: request(parkingProductsTypes.GET_PARKING_PRODUCTS),\r\n });\r\n\r\n parkingProductsService\r\n .getParkingProducts(seasonTicketOwnerCrmId, location)\r\n .then((response: AxiosResponse) => {\r\n dispatch({\r\n type: success(parkingProductsTypes.GET_PARKING_PRODUCTS),\r\n parkingProductsPayload: response.data,\r\n });\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(parkingProductsTypes.GET_PARKING_PRODUCTS),\r\n error: error.response?.data as ErrorDetailsModel | undefined,\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst getUnlimitedParkingProducts = (\r\n seasonTicketOwnerCrmId: string,\r\n location: string\r\n) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: request(parkingProductsTypes.GET_PARKING_PRODUCTS),\r\n });\r\n\r\n parkingProductsService\r\n .getParkingProducts(seasonTicketOwnerCrmId, location)\r\n .then((response: AxiosResponse) => {\r\n dispatch({\r\n type: success(parkingProductsTypes.GET_PARKING_PRODUCTS),\r\n parkingProductsPayload: response.data.filter(p => p.hasUnlimitedEntryRights),\r\n });\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(parkingProductsTypes.GET_PARKING_PRODUCTS),\r\n error: error.response?.data as ErrorDetailsModel | undefined,\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst getLocatedParkingProducts = (\r\n seasonTicketOwnerCrmId: string,\r\n language: string\r\n) => {\r\n return (dispatch: Dispatch, getState: () => RootReducer) => {\r\n dispatch({\r\n type: request(parkingProductsTypes.GET_LOCATED_PARKING_PRODUCTS),\r\n });\r\n\r\n const { locatedParkingProducts } = getState().parkingProducts;\r\n\r\n if (isEmpty(locatedParkingProducts.data)) {\r\n dispatch(loaderActions.loadTheLoader());\r\n }\r\n\r\n parkingProductsService\r\n .getLocatedParkingProducts(seasonTicketOwnerCrmId, language)\r\n .then((response: AxiosResponse) => {\r\n dispatch({\r\n type: success(parkingProductsTypes.GET_LOCATED_PARKING_PRODUCTS),\r\n locatedParkingProductsPayload: response.data,\r\n });\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(parkingProductsTypes.GET_LOCATED_PARKING_PRODUCTS),\r\n error: error.response?.data,\r\n });\r\n })\r\n .finally(() => dispatch(loaderActions.killTheLoader()));\r\n };\r\n};\r\n\r\nconst delegateParkingRights = (\r\n model: ParkingRightsRequestModel,\r\n callback?: () => void\r\n) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: request(parkingProductsTypes.DELEGATE_PARKING_RIGHTS),\r\n });\r\n\r\n parkingProductsService\r\n .delegateParkingRights(model)\r\n .then(() => {\r\n dispatch({\r\n type: success(parkingProductsTypes.DELEGATE_PARKING_RIGHTS),\r\n });\r\n\r\n if (!isUndefined(callback)) {\r\n callback();\r\n }\r\n })\r\n .catch((error: AxiosError) => {\r\n checkForCrmIdOrLinkedAccessDevice(\r\n error.response?.data as ErrorDetailsModel | null\r\n );\r\n\r\n dispatch({\r\n type: failure(parkingProductsTypes.DELEGATE_PARKING_RIGHTS),\r\n error: error.response?.data as ErrorDetailsModel,\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst updateDelegation = (\r\n model: ParkingRightsRequestModel,\r\n callback?: () => void\r\n) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: request(parkingProductsTypes.UPDATE_DELEGATION),\r\n });\r\n\r\n parkingProductsService\r\n .updateDelegation(model)\r\n .then(() => {\r\n dispatch({\r\n type: success(parkingProductsTypes.UPDATE_DELEGATION),\r\n });\r\n\r\n if (!isUndefined(callback)) {\r\n callback();\r\n }\r\n\r\n toastTriggers.success({\r\n content: {\r\n key: \"parkingRights.updateDelegation.success\",\r\n },\r\n });\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(parkingProductsTypes.UPDATE_DELEGATION),\r\n error: error.response?.data as ErrorDetailsModel,\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst deleteDelegee = (registrationId: string, callback?: () => void) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: request(parkingProductsTypes.DELETE_DELEGEE),\r\n });\r\n\r\n parkingProductsService\r\n .deleteDelegee(registrationId)\r\n .then(() => {\r\n dispatch({\r\n type: success(parkingProductsTypes.DELETE_DELEGEE),\r\n });\r\n\r\n if (!isUndefined(callback)) {\r\n callback();\r\n }\r\n\r\n toastTriggers.success({\r\n content: {\r\n key: \"parkingRights.deleteDelegee.success\",\r\n },\r\n });\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(parkingProductsTypes.DELETE_DELEGEE),\r\n error: error.response?.data as ErrorDetailsModel,\r\n });\r\n\r\n toastTriggers.error({\r\n content: {\r\n key: \"parkingRights.deleteDelegee.error\",\r\n },\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst getDelegatedParkingProducts = (\r\n req: WithFiltersAndPaging\r\n) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: request(parkingProductsTypes.GET_DELEGATED_PARKING_RIGHTS),\r\n delegatedParkingProductsPayload: {\r\n pageNumber: req.pagination.pageNumber,\r\n },\r\n });\r\n\r\n parkingProductsService\r\n .getDelegatedParkingProducts(req)\r\n .then((response: AxiosResponse) =>\r\n dispatch({\r\n type: success(parkingProductsTypes.GET_DELEGATED_PARKING_RIGHTS),\r\n delegatedParkingProductsPayload: {\r\n pageNumber: req.pagination.pageNumber,\r\n totalPages: response.data.pages,\r\n totalRecords: response.data.totalRecords,\r\n payload: response.data.delegatedParkingRights,\r\n },\r\n })\r\n )\r\n .catch((error: AxiosError) =>\r\n dispatch({\r\n type: failure(parkingProductsTypes.GET_DELEGATED_PARKING_RIGHTS),\r\n error: error.response?.data as ErrorDetailsModel | undefined,\r\n })\r\n );\r\n };\r\n};\r\n\r\nconst getVehicles = (\r\n req: WithFiltersAndPaging,\r\n vehicleToExclude?: VehicleAssignmentProduct[],\r\n excludeByVehicleAssignmentId? : boolean\r\n) => {\r\n return (dispatch: Dispatch) => {\r\n const query = convertFiltersToGetVehicleAssignmentsQuery(req);\r\n // We overfetch the page because possible we have to remove the revoked/deleted rows \r\n if (vehicleToExclude) {\r\n query.pageSize += vehicleToExclude.length;\r\n }\r\n dispatch({\r\n type: request(parkingProductsTypes.GET_ASSIGNED_VEHICLES),\r\n assignedVehiclesProductsPayload: {\r\n pageNumber: req.pagination.pageNumber,\r\n query\r\n },\r\n });\r\n\r\n parkingProductsService\r\n .getVehicles(query)\r\n .then((response) => {\r\n // vehicles that are revokes/deleted can still be in projection, thus we exclude them directly after revoke/delete is called\r\n if (vehicleToExclude) {\r\n const rowsToExclude = response.data.assignedParkingRights.filter(p => \r\n vehicleToExclude.some(v => excludeByVehicleAssignmentId ?\r\n v.vehicleAssignmentId === p.vehicleAssignmentId :\r\n v.vehicleAssignmentId === p.vehicleAssignmentId && v.pmcId === p.parkingRight.pmc));\r\n response.data.totalRecords -= rowsToExclude.length;\r\n response.data.assignedParkingRights = response.data.assignedParkingRights.filter(x => !rowsToExclude.includes(x));\r\n }\r\n dispatch({\r\n type: success(parkingProductsTypes.GET_ASSIGNED_VEHICLES),\r\n assignedVehiclesProductsPayload: {\r\n pageNumber: req.pagination.pageNumber,\r\n totalPages: response.data.pages,\r\n totalRecords: response.data.totalRecords,\r\n payload: response.data.assignedParkingRights,\r\n },\r\n })\r\n }\r\n \r\n )\r\n .catch((error: AxiosError) =>\r\n dispatch({\r\n type: failure(parkingProductsTypes.GET_ASSIGNED_VEHICLES),\r\n error: error.response?.data as ErrorDetailsModel | undefined,\r\n })\r\n );\r\n };\r\n};\r\n\r\n\r\nconst clearDelegeeDetails = () => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({ type: parkingProductsTypes.CLEAR_DELEGEE_DETAILS });\r\n };\r\n};\r\n\r\nconst resetBulkImportProgress = () => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({ type: parkingProductsTypes.RESET_BULK_UPLOAD_PROGRESS });\r\n };\r\n};\r\n\r\nconst disposeError = () => {\r\n return (dispatch: Dispatch, getState: () => RootReducer) => {\r\n const { error } = getState().parkingProducts;\r\n\r\n if (!isNull(error)) {\r\n dispatch({\r\n type: parkingProductsTypes.DISPOSE_ERROR,\r\n });\r\n }\r\n };\r\n};\r\n\r\nconst getDelegeeDetails = (\r\n registrationId: string,\r\n language: string,\r\n callback?: () => void\r\n) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: request(parkingProductsTypes.GET_DELEGEE_DETAILS),\r\n });\r\n\r\n parkingProductsService\r\n .getDelegeeDetails(registrationId, language)\r\n .then((response: AxiosResponse) => {\r\n dispatch({\r\n type: success(parkingProductsTypes.GET_DELEGEE_DETAILS),\r\n delegeeDetailsPayload: response.data,\r\n });\r\n\r\n if (!isUndefined(callback)) {\r\n callback();\r\n }\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(parkingProductsTypes.GET_PARKING_PRODUCTS),\r\n error: error.response?.data as ErrorDetailsModel | undefined,\r\n });\r\n });\r\n };\r\n};\r\n// For testing purposes (until endpoint is implemented)\r\n// let progress = 0;\r\nconst getBulkImportProgress = (\r\n seasonTicketOwnerCrmId: string,\r\n fileReference: string,\r\n pollBulkImportProgress?: () => void\r\n) => {\r\n return (dispatch: Dispatch) => {\r\n parkingProductsService\r\n .getBulkImportProgress(seasonTicketOwnerCrmId, fileReference)\r\n .then((response: AxiosResponse) => {\r\n dispatch({\r\n type: success(parkingProductsTypes.GET_BULK_IMPORT_PROGRESS),\r\n bulkImportProgress: {\r\n progress: response.data.progress,\r\n hasErrors: response.data.hasErrors,\r\n numberOfErrors: response.data.numberOfErrors\r\n }\r\n });\r\n if (!isUndefined(pollBulkImportProgress) && response.data.progress !== 100) {\r\n pollBulkImportProgress();\r\n }\r\n })\r\n .catch((error: AxiosError) => {\r\n // For testing purposes (until endpoint is implemented)\r\n // dispatch({\r\n // type: success(parkingProductsTypes.GET_BULK_IMPORT_PROGRESS),\r\n // bulkImportProgress: progress += 10,\r\n // });\r\n dispatch({\r\n type: failure(parkingProductsTypes.GET_BULK_IMPORT_PROGRESS),\r\n error: error.response?.data as ErrorDetailsModel | undefined,\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst getBulkImportStatus = (seasonTicketOwnerCrmId: string) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: request(parkingProductsTypes.GET_BULK_IMPORT_STATUS)\r\n });\r\n\r\n parkingProductsService.getBulkImportStatus(seasonTicketOwnerCrmId).then((response: AxiosResponse) => {\r\n dispatch({\r\n type: success(parkingProductsTypes.GET_BULK_IMPORT_STATUS),\r\n isBulkImportCompleted: response.data.processCompleted\r\n });\r\n }).catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(parkingProductsTypes.GET_BULK_IMPORT_STATUS),\r\n error: error.response?.data as ErrorDetailsModel | undefined,\r\n });\r\n });\r\n }\r\n}\r\n\r\nconst resendDelegeeInvite = (\r\n registrationId: string,\r\n seasonTicketOwnerCrmId: string\r\n) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: request(parkingProductsTypes.RESEND_DELEGEE_INVITE),\r\n });\r\n\r\n parkingProductsService\r\n .resendDelegeeInvite(registrationId, seasonTicketOwnerCrmId)\r\n .then(() => {\r\n dispatch({\r\n type: success(parkingProductsTypes.RESEND_DELEGEE_INVITE),\r\n });\r\n\r\n toastTriggers.success({\r\n content: {\r\n key: \"parkingRights.resendInvite.success\",\r\n },\r\n });\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(parkingProductsTypes.RESEND_DELEGEE_INVITE),\r\n error: error.response?.data as ErrorDetailsModel | undefined,\r\n });\r\n\r\n toastTriggers.error({\r\n content: {\r\n key: \"parkingRights.resendInvite.error\",\r\n },\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst getDelegees = (req: WithFiltersAndPaging) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: request(parkingProductsTypes.GET_DELEGEES),\r\n delegeesPayload: {\r\n pageNumber: req.pagination.pageNumber,\r\n },\r\n });\r\n\r\n parkingProductsService\r\n .getDelegees(req)\r\n .then((response: AxiosResponse) => {\r\n dispatch({\r\n type: success(parkingProductsTypes.GET_DELEGEES),\r\n delegeesPayload: {\r\n pageNumber: req.pagination.pageNumber,\r\n totalPages: response.data.pages,\r\n totalRecords: response.data.totalRecords,\r\n payload: response.data.delegees,\r\n },\r\n });\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(parkingProductsTypes.GET_DELEGEES),\r\n error: error.response?.data as ErrorDetailsModel | undefined,\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst revokeParkingRights = (\r\n model: RevokeParkingRightsModel,\r\n callback?: () => void\r\n) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: request(parkingProductsTypes.REVOKE_PARKINGRIGHTS),\r\n });\r\n\r\n parkingProductsService\r\n .revokeParkingRights(model)\r\n .then(() => {\r\n dispatch({\r\n type: success(parkingProductsTypes.REVOKE_PARKINGRIGHTS),\r\n });\r\n\r\n if (!isUndefined(callback)) {\r\n callback();\r\n }\r\n\r\n toastTriggers.success({\r\n content: {\r\n key: \"parkingRights.revokeParkingRights.success\",\r\n options: { count: model.parkingRightIds.length },\r\n },\r\n });\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(parkingProductsTypes.REVOKE_PARKINGRIGHTS),\r\n error: error.response?.data as ErrorDetailsModel,\r\n });\r\n\r\n toastTriggers.error({\r\n content: {\r\n key: \"parkingRights.revokeParkingRights.error\",\r\n },\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst deleteDelegations = (\r\n model: DeleteDelegationsRequestModel,\r\n callback?: () => void\r\n) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: request(parkingProductsTypes.DELETE_DELEGEES),\r\n });\r\n\r\n dispatch(loaderActions.loadTheLoader());\r\n\r\n parkingProductsService\r\n .deleteDelegations(model)\r\n .then(() => {\r\n dispatch({\r\n type: success(parkingProductsTypes.DELETE_DELEGEES),\r\n });\r\n\r\n if (!isUndefined(callback)) {\r\n callback();\r\n }\r\n\r\n toastTriggers.success({\r\n content: {\r\n key: \"parkingRights.deleteDelegee.success_plural\",\r\n options: { count: model.registrationIds.length },\r\n },\r\n });\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(parkingProductsTypes.DELETE_DELEGEES),\r\n error: error.response?.data as ErrorDetailsModel,\r\n });\r\n\r\n toastTriggers.error({\r\n content: {\r\n key: \"parkingRights.deleteDelegee.error_plural\",\r\n },\r\n });\r\n })\r\n .finally(() => dispatch(loaderActions.killTheLoader()));\r\n };\r\n};\r\n\r\nconst validateDelegees = (\r\n seasonTicketOwnerCrmId: string,\r\n req: ValidateDelegeesRequestModel,\r\n onSuccess?: (response: ValidateDelegeesResponseModel) => void,\r\n onError?: (errorCode: string) => void\r\n) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: request(parkingProductsTypes.VALIDATE_DELEGEES),\r\n });\r\n\r\n parkingProductsService\r\n .validateDelegees(seasonTicketOwnerCrmId, req)\r\n .then(({ data }) => {\r\n dispatch({\r\n type: success(parkingProductsTypes.VALIDATE_DELEGEES),\r\n validateDelegeesPayload: {\r\n fileReference: data.fileReference\r\n }\r\n });\r\n if (!isUndefined(onSuccess)) {\r\n onSuccess(data);\r\n }\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(parkingProductsTypes.VALIDATE_DELEGEES),\r\n });\r\n\r\n const errorCode = getFirstErrorCode(error);\r\n\r\n if (!isUndefined(onError)) {\r\n onError(errorCode);\r\n }\r\n });\r\n };\r\n};\r\n\r\nconst startBulkInvitations = (\r\n seasonTicketOwnerCrmId: string,\r\n fileReference: string,\r\n req: StartBulkInvitationsRequestModel,\r\n onSuccess?: () => void,\r\n onError?: (errorCode: string) => void\r\n) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: request(parkingProductsTypes.IMPORT_DELEGEES),\r\n });\r\n\r\n parkingProductsService\r\n .startBulkInvitations(seasonTicketOwnerCrmId, fileReference, req)\r\n .then(() => {\r\n dispatch({\r\n type: success(parkingProductsTypes.IMPORT_DELEGEES),\r\n });\r\n if (!isUndefined(onSuccess)) {\r\n onSuccess();\r\n }\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(parkingProductsTypes.IMPORT_DELEGEES),\r\n });\r\n\r\n const errorCode = getFirstErrorCode(error);\r\n\r\n if (!isUndefined(onError)) {\r\n onError(errorCode);\r\n }\r\n });\r\n };\r\n}\r\n\r\nconst startBulkVehicleAssignment = (\r\n seasonTicketOwnerCrmId: string,\r\n fileReference: string,\r\n startBulkVehicleAssignmentRequest: StartBulkVehicleAssignmentRequest,\r\n onSuccess?: () => void,\r\n onError?: (errorCode: string) => void\r\n) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: request(parkingProductsTypes.START_BULK_VEHICLE_ASSIGNMENT),\r\n });\r\n\r\n parkingProductsService\r\n .startBulkVehicleAssignment(seasonTicketOwnerCrmId, fileReference, startBulkVehicleAssignmentRequest)\r\n .then(() => {\r\n dispatch({\r\n type: success(parkingProductsTypes.START_BULK_VEHICLE_ASSIGNMENT),\r\n });\r\n if (!isUndefined(onSuccess)) {\r\n onSuccess();\r\n }\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(parkingProductsTypes.START_BULK_VEHICLE_ASSIGNMENT),\r\n });\r\n\r\n const errorCode = getFirstErrorCode(error);\r\n\r\n if (!isUndefined(onError)) {\r\n onError(errorCode);\r\n }\r\n });\r\n };\r\n}\r\n\r\nconst assignVehicle = (\r\n seasonTicketOwnerCrmId: string,\r\n req: AssignVehicleRequestModel,\r\n onSuccess?: () => void,\r\n onError?: (errorCode: string) => void\r\n) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: request(parkingProductsTypes.ASSIGN_VEHICLE),\r\n });\r\n\r\n parkingProductsService\r\n .assignVehicle(seasonTicketOwnerCrmId, req)\r\n .then((response) => {\r\n dispatch({\r\n type: success(parkingProductsTypes.ASSIGN_VEHICLE),\r\n assignedVehicleMutation: {\r\n type: 'assign',\r\n request: req,\r\n pmcToParkingRightStartDates: response.data.pmcToParkingRight\r\n }\r\n });\r\n if (!isUndefined(onSuccess)) {\r\n onSuccess();\r\n }\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(parkingProductsTypes.ASSIGN_VEHICLE),\r\n error: error.response?.data as ErrorDetailsModel,\r\n });\r\n\r\n const errorCode = getFirstErrorCode(error);\r\n\r\n if (!isUndefined(onError)) {\r\n onError(errorCode);\r\n } \r\n });\r\n };\r\n}\r\nconst updateVehicleAssignment = (\r\n seasonTicketOwnerCrmId: string,\r\n aggregateId: string,\r\n req: UpdateVehicleRequestModel,\r\n onSuccess?: () => void) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: request(parkingProductsTypes.UPDATE_VEHICLE_ASSIGNMENT),\r\n });\r\n\r\n parkingProductsService\r\n .updateVehicleAssignment(seasonTicketOwnerCrmId, aggregateId, req)\r\n .then((response) => {\r\n dispatch({\r\n type: success(parkingProductsTypes.UPDATE_VEHICLE_ASSIGNMENT),\r\n assignedVehicleMutation: {\r\n type: 'update',\r\n aggregateId,\r\n request: req,\r\n pmcToParkingRightStartDates: response.data.pmcToParkingRight\r\n }\r\n });\r\n if (!isUndefined(onSuccess)) {\r\n onSuccess();\r\n }\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(parkingProductsTypes.UPDATE_VEHICLE_ASSIGNMENT),\r\n error: error.response?.data as ErrorDetailsModel,\r\n });\r\n });\r\n };\r\n}\r\n\r\nconst getVehicleAssignment = (\r\n aggregateId: string, onSuccess?: (res: VehicleAssignmentModel) => void) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: request(parkingProductsTypes.GET_ASSIGNED_VEHICLE),\r\n });\r\n\r\n parkingProductsService.getVehicleAssignment(aggregateId)\r\n .then((response) => {\r\n dispatch({\r\n type: success(parkingProductsTypes.GET_ASSIGNED_VEHICLE),\r\n selectedVehicleAssignment: response.data\r\n });\r\n if (!isUndefined(onSuccess)) {\r\n onSuccess(response.data);\r\n }\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(parkingProductsTypes.GET_ASSIGNED_VEHICLE),\r\n error: error.response?.data as ErrorDetailsModel,\r\n });\r\n });\r\n };\r\n}\r\n\r\nconst getVehicleAssignmentsMyFleet = (req: WithFiltersAndPaging, excludedIds: string[] = []) => {\r\n return (dispatch: Dispatch) => {\r\n const query = convertFiltersToGetVehicleAssignmentsQuery(req);\r\n const originalPageSize = req.pagination.pageSize;\r\n // overfetch to fill the page in case deleted items are still in the projection\r\n query.pageSize += excludedIds.length;\r\n dispatch({\r\n type: request(parkingProductsTypes.GET_VEHICLE_ASSIGNMENTS_MY_FLEET),\r\n vehicleAssigmentsMyFleetPayload: {\r\n pageNumber: req.pagination.pageNumber,\r\n query\r\n }\r\n });\r\n\r\n parkingProductsService.getVehicleAssignmentsMyFleet(query)\r\n .then((response) => {\r\n const toRemove = response.data.vehicleAssignments.filter(x => excludedIds.includes(x.vehicleAssignmentId));\r\n const vehicle = response.data.vehicleAssignments.filter(x => !toRemove.includes(x)).slice(0, originalPageSize);\r\n\r\n dispatch({\r\n type: success(parkingProductsTypes.GET_VEHICLE_ASSIGNMENTS_MY_FLEET),\r\n vehicleAssigmentsMyFleetPayload: {\r\n pageNumber: req.pagination.pageNumber,\r\n totalPages: response.data.pages,\r\n totalRecords: response.data.totalRecords - toRemove.length,\r\n payload: vehicle\r\n }\r\n });\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(parkingProductsTypes.GET_VEHICLE_ASSIGNMENTS_MY_FLEET),\r\n error: error.response?.data as ErrorDetailsModel,\r\n });\r\n });\r\n };\r\n}\r\n\r\nconst getFirstErrorCode = (error: AxiosError) =>{\r\n let errorCode = error.message;\r\n const errors = error.response?.data.errors;\r\n const fields = error.response?.data.fields;\r\n\r\n if (errors !== undefined && errors.length > 0 &&\r\n fields !== undefined && fields.length > 0) {\r\n errorCode = Object.values(errors)[0][fields[0]];\r\n }\r\n\r\n return errorCode;\r\n}\r\n\r\nconst revokeVehicleAssignmentProducts = (\r\n model: RevokeVehicleAssignmentsModel,\r\n callback?: () => void\r\n) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: request(parkingProductsTypes.REVOKE_VEHICLE_ASSIGNMENTS),\r\n revokeProductsModel: model\r\n });\r\n\r\n parkingProductsService\r\n .revokeVehicleAssignments(model)\r\n .then(() => {\r\n dispatch({\r\n type: success(parkingProductsTypes.REVOKE_VEHICLE_ASSIGNMENTS),\r\n revokeProductsModel: model\r\n });\r\n\r\n if (!isUndefined(callback)) {\r\n callback();\r\n }\r\n\r\n toastTriggers.success({\r\n content: {\r\n key: \"parkingRights.revokeVehicleAssignment.success\",\r\n options: { count: model.vehicleAssignmentProducts.length },\r\n },\r\n });\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(parkingProductsTypes.REVOKE_VEHICLE_ASSIGNMENTS),\r\n error: error.response?.data as ErrorDetailsModel,\r\n });\r\n\r\n toastTriggers.error({\r\n content: {\r\n key: \"parkingRights.revokeVehicleAssignment.error\",\r\n },\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst deleteVehicleAssignments = (\r\n model: DeleteVehicleAssignmentsModel,\r\n callback?: () => void\r\n) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: request(parkingProductsTypes.DELETE_VEHICLE_ASSIGNMENTS),\r\n });\r\n\r\n parkingProductsService\r\n .deleteVehicleAssignments(model)\r\n .then(() => {\r\n dispatch({\r\n type: success(parkingProductsTypes.DELETE_VEHICLE_ASSIGNMENTS),\r\n });\r\n\r\n if (!isUndefined(callback)) {\r\n callback();\r\n }\r\n\r\n toastTriggers.success({\r\n content: {\r\n key: \"parkingRights.deleteVehicleAssignment.success\",\r\n options: { count: model.vehicleAssignmentIds.length },\r\n },\r\n });\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(parkingProductsTypes.DELETE_VEHICLE_ASSIGNMENTS),\r\n error: error.response?.data as ErrorDetailsModel,\r\n });\r\n\r\n toastTriggers.error({\r\n content: {\r\n key: \"parkingRights.deleteVehicleAssignment.error\",\r\n },\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst calculateWhitelistDelta = (\r\n req: CalculateWhitelistDeltaRequest,\r\n onSuccess?: (response: CalculatedWhitelistDeltaResponse) => void,\r\n onError?: (errorCode: string) => void\r\n) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: request(parkingProductsTypes.CALCULATE_WHITELIST_DELTA),\r\n });\r\n\r\n parkingProductsService\r\n .calculateWhitelistDelta(req)\r\n .then(({ data }) => {\r\n dispatch({\r\n type: success(parkingProductsTypes.CALCULATE_WHITELIST_DELTA),\r\n calculatedWhitelistDelta: {\r\n amountOfVehiclesToCreate: data.amountOfVehiclesToCreate,\r\n amountOfVehiclesToDelete: data.amountOfVehiclesToDelete,\r\n amountOfVehiclesToUpdate: data.amountOfVehiclesToUpdate,\r\n amountOfVehiclesWithNoChanges: data.amountOfVehiclesWithNoChanges,\r\n hasChanges: data.hasChanges,\r\n fileReference: data.fileReference\r\n }\r\n });\r\n if (!isUndefined(onSuccess)) {\r\n onSuccess(data);\r\n }\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(parkingProductsTypes.CALCULATE_WHITELIST_DELTA),\r\n error: error.response?.data as ErrorDetailsModel,\r\n });\r\n\r\n const errorCode = getFirstErrorCode(error);\r\n\r\n if (!isUndefined(onError)) {\r\n onError(errorCode);\r\n }\r\n });\r\n };\r\n};\r\n\r\nconst defaultExport : ParkingProductsDispatchType = {\r\n getParkingProducts,\r\n getUnlimitedParkingProducts,\r\n getLocatedParkingProducts,\r\n delegateParkingRights,\r\n updateDelegation,\r\n getDelegatedParkingProducts,\r\n getVehicles,\r\n disposeError,\r\n getDelegeeDetails,\r\n clearDelegeeDetails,\r\n deleteDelegee,\r\n resendDelegeeInvite,\r\n getDelegees,\r\n revokeParkingRights,\r\n deleteDelegations,\r\n validateDelegees,\r\n startBulkInvitations,\r\n getBulkImportProgress,\r\n getBulkImportStatus,\r\n resetBulkImportProgress,\r\n assignVehicle,\r\n updateVehicleAssignment,\r\n getVehicleAssignment,\r\n revokeVehicleAssignmentProducts,\r\n deleteVehicleAssignments,\r\n getVehicleAssignmentsMyFleet,\r\n calculateWhitelistDelta,\r\n startBulkVehicleAssignment\r\n};\r\n\r\nexport default defaultExport;\r\n\r\nconst checkForCrmIdOrLinkedAccessDevice = (\r\n error: ErrorDetailsModel | null\r\n): void => {\r\n if (checkForSeasonTicketCrmIdNotAvailableError(error)) {\r\n toastTriggers.error({\r\n content: {\r\n key: \"parkingRights.seasonTicketOwnerCrmId.not_available\",\r\n },\r\n });\r\n } else if (checkForParkingRightsAlreadyLinkedToALicensePlate(error)) {\r\n toastTriggers.error({\r\n content: {\r\n key: \"parkingRights.accessDevice.alreadyLinked\",\r\n },\r\n });\r\n }\r\n};\r\n","type EmailValidator = {\r\n isValidEmail: (value: string) => boolean;\r\n};\r\n\r\nconst emailValidator: EmailValidator = (() => {\r\n const emailPattern =\r\n /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n\r\n const isValidEmail = (value?: string): boolean => {\r\n return emailPattern.test(value?.toLowerCase()!);\r\n };\r\n\r\n return {\r\n isValidEmail,\r\n };\r\n})();\r\n\r\nexport default emailValidator;\r\n","import useAppContext from \"../context/hooks/useAppContext\";\r\nimport { EnsureValidValue } from \"../context/store/reducers/importDelegations.reducer\";\r\nimport { equalsIgnoreCase } from \"../utils\";\r\nimport emailValidator from \"../validators/email.validator\";\r\n\r\nconst isValidEmail = (\r\n emailAddress: string,\r\n allEmails?: string[],\r\n currentUserEmail?: string\r\n): EnsureValidValue => {\r\n if (currentUserEmail) {\r\n if (equalsIgnoreCase(emailAddress, currentUserEmail))\r\n return {\r\n isValid: false,\r\n value: emailAddress,\r\n errorMessageKey: \"errors:emailSelf\",\r\n };\r\n }\r\n\r\n if (!emailValidator.isValidEmail(emailAddress)) {\r\n return { isValid: false, value: emailAddress, errorMessageKey: \"errors:format.email\" };\r\n }\r\n\r\n if (allEmails) {\r\n let count = 0;\r\n for (const e of allEmails) {\r\n if (equalsIgnoreCase(e, emailAddress)) {\r\n count++;\r\n }\r\n\r\n if (count > 1) {\r\n return { isValid: false, value: emailAddress, errorMessageKey: \"errors:emailExists\" };\r\n }\r\n }\r\n }\r\n\r\n return {\r\n isValid: true,\r\n value: emailAddress,\r\n };\r\n};\r\n\r\nconst useIsValidDelegeeEmail = () => {\r\n const appCtx = useAppContext();\r\n const currentUserEmail = appCtx.appState.user.email;\r\n return (emailAddress: string, allEmails?: string[]) =>\r\n isValidEmail(emailAddress, allEmails, currentUserEmail);\r\n};\r\n\r\nexport default useIsValidDelegeeEmail;\r\n","import { TFunction } from \"i18next\";\r\nimport * as Yup from \"yup\";\r\nimport { DelegationType } from \"../../../context/store/reducers/fleetManagerContext.reducer\";\r\nimport { format } from \"../../../utils\";\r\nimport useIsValidDelegeeEmail from \"../../../hooks/useIsValidDelegeeEmail\";\r\n\r\nexport interface IDelegeeFormValues {\r\n name?: string;\r\n email: string;\r\n rights?: number[];\r\n}\r\n\r\nconst useValidationSchema = (t: TFunction, isEditMode: boolean, delegationType: DelegationType) => {\r\n const isDelegeeEmailValid = useIsValidDelegeeEmail();\r\n\r\n const rights = isEditMode\r\n ? Yup.array(Yup.number()).default([])\r\n : Yup.array(Yup.number())\r\n .min(1, format(t(\"errors:min.field\"), t(\"globals:parkingRights\"), 1))\r\n .required(format(t(\"errors:required.field\"), t(\"globals:parkingRights\").toLowerCase()))\r\n .default([]);\r\n\r\n const email =\r\n delegationType == DelegationType.Multiple\r\n ? Yup.string().default(\"\")\r\n : Yup.string()\r\n .email(\r\n format(t(\"errors:format.field\"), t(\"globals:email\"), t(\"globals:email\").toLowerCase())\r\n )\r\n .required(format(t(\"errors:required.field\"), t(\"globals:email\").toLowerCase()))\r\n .test(\"email-is-valid\", (value, ctx) => {\r\n if (!value) return true;\r\n\r\n const validValue = isDelegeeEmailValid(value);\r\n if (!validValue.isValid)\r\n return ctx.createError({ message: t(validValue.errorMessageKey!) });\r\n\r\n return true;\r\n })\r\n .default(\"\");\r\n\r\n const validationSchema = Yup.object({\r\n name: Yup.string().optional().default(\"\"),\r\n email,\r\n rights,\r\n });\r\n\r\n const initialValues: IDelegeeFormValues = {\r\n name: \"\",\r\n email: \"\",\r\n rights: [],\r\n };\r\n\r\n return {\r\n validationSchema,\r\n initialValues,\r\n };\r\n};\r\n\r\nexport default useValidationSchema;\r\n","import { Grid } from \"@material-ui/core\";\r\nimport { ErrorOutline } from \"@material-ui/icons\";\r\nimport React from \"react\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../theme/variables\";\r\n\r\nconst { colors, typography } = variables;\r\n\r\nconst Container = styled.div`\r\n display: flex;\r\n border-top: 1px solid ${colors.veryLightGraySecondary};\r\n padding: 0.7rem 1.5rem;\r\n background-color: ${colors.white};\r\n`;\r\n\r\nconst MessageWrapper = styled(Grid)`\r\n display: flex;\r\n background-color: rgba(${colors.red.rgb}, 0.1);\r\n width: 100%;\r\n border-radius: 6px;\r\n padding: 0;\r\n`;\r\n\r\nconst StyledCol = styled(Grid)`\r\n padding: 0.5rem;\r\n`;\r\n\r\nconst StyledErrorOutline = styled(ErrorOutline)`\r\n fill: ${colors.red.hex};\r\n width: 18px;\r\n`;\r\n\r\nconst Span = styled.span`\r\n color: ${colors.red.hex};\r\n font-size: ${typography.fontSizeSmaller};\r\n`;\r\n\r\ninterface ICustomErrorProps {\r\n show?: boolean;\r\n message: string;\r\n}\r\n\r\nconst CustomError: React.FC = ({ message, show }) => {\r\n if (!show) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {message}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CustomError;\r\n","import Grid from \"@material-ui/core/Grid\";\r\nimport React from \"react\";\r\nimport styled from \"styled-components\";\r\nimport WarningFleet from \"../../assets/images/warning-fleet.svg\";\r\nimport WarningFleetOrange from \"../../assets/images/warning-fleet-orange.svg\";\r\nimport { variables } from \"../../theme/variables\";\r\nimport CircleImage from \"../CircleImage/CircleImage\";\r\nimport Spacer from \"../Spacer/Spacer\";\r\n\r\n\r\nconst { colors } = variables;\r\n\r\nconst ContentWrapper = styled.div`\r\n text-align: center;\r\n`;\r\n\r\nconst TextWrapper = styled.div`\r\n max-width: 20rem;\r\n`;\r\n\r\nconst Details = styled.span`\r\n color: ${colors.darkGray};\r\n`;\r\n\r\nconst NoPaddingCol = styled(Grid)`\r\n padding: 0;\r\n`;\r\n\r\ninterface IProps {\r\n title: string,\r\n details: string,\r\n extraRows?: React.ReactNode[],\r\n orangeWarning?: boolean\r\n}\r\n\r\n\r\nconst WarningColumn = (props : IProps) => {\r\n \r\n const renderExtraRows = () => \r\n props.extraRows?.map(child => (\r\n \r\n {child}\r\n \r\n )) \r\n \r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n

{props.title}

\r\n \r\n
{props.details}
\r\n
\r\n
\r\n {renderExtraRows()} \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default WarningColumn;\r\n","export const importDelegationsTypes = {\r\n SET_DELEGEES_DATA: \"context/SET_DELEGEES_DATA\",\r\n SET_SELECTED_PARKING_RIGHTS: \"context/SET_SELECTED_PARKING_RIGHTS\",\r\n SET_PROCESSING: \"context/SET_PROCESSING\",\r\n RESET: \"context/RESET\",\r\n};\r\n","import { ICheckParkingRight } from \"../../../components/DelegeeForm/ParkingRightsGrid/ParkingRightsGrid\";\r\nimport { importDelegationsTypes } from \"./../actions/importDelegations.types\";\r\nexport interface EnsureValidValue {\r\n value: T;\r\n isValid: boolean;\r\n errorMessageKey?: string\r\n}\r\n\r\nexport interface DelegeeData {\r\n name: EnsureValidValue;\r\n emailAddress: EnsureValidValue;\r\n lineNumber?: number;\r\n}\r\n\r\nexport interface ImportDelegationsState {\r\n data: DelegeeData[];\r\n checkParkingRights: ICheckParkingRight[];\r\n processing: boolean;\r\n}\r\n\r\nexport const initialState: ImportDelegationsState = {\r\n data: [],\r\n checkParkingRights: [],\r\n processing: false,\r\n};\r\n\r\nexport type ImportDelegationsAction = {\r\n type: string;\r\n payload?: DelegeeData | DelegeeData[] | ICheckParkingRight[] | boolean;\r\n};\r\n\r\nexport default (\r\n state: ImportDelegationsState = initialState,\r\n action: ImportDelegationsAction\r\n): ImportDelegationsState => {\r\n switch (action.type) {\r\n case importDelegationsTypes.SET_DELEGEES_DATA:\r\n return {\r\n ...state,\r\n data: action.payload as DelegeeData[],\r\n };\r\n case importDelegationsTypes.SET_SELECTED_PARKING_RIGHTS:\r\n return {\r\n ...state,\r\n checkParkingRights: action.payload as ICheckParkingRight[],\r\n };\r\n case importDelegationsTypes.SET_PROCESSING:\r\n return {\r\n ...state,\r\n processing: action.payload as boolean,\r\n };\r\n case importDelegationsTypes.RESET:\r\n return initialState;\r\n default:\r\n return state;\r\n }\r\n};\r\n","import React from \"react\";\r\nimport { createContext, useReducer } from \"react\";\r\nimport { ICheckParkingRight } from \"../components/DelegeeForm/ParkingRightsGrid/ParkingRightsGrid\";\r\nimport { importDelegationsTypes } from \"./store/actions/importDelegations.types\";\r\nimport reducer, {\r\n initialState,\r\n ImportDelegationsState,\r\n DelegeeData,\r\n} from \"./store/reducers/importDelegations.reducer\";\r\n\r\ninterface ImportDelegationsContext {}\r\n\r\nexport interface ImportDelegationsContextState {\r\n importDelegationsState: ImportDelegationsState;\r\n setDelegeesData: (data: DelegeeData[],) => void;\r\n setCheckParkingRights: (checkParkingRights: ICheckParkingRight[]) => void;\r\n setProcessing: (isProcessing: boolean) => void;\r\n}\r\n\r\nexport const ImportDelegationsCtx =\r\n createContext(\r\n {} as ImportDelegationsContextState\r\n );\r\n\r\nconst ImportDelegationsContextProvider: React.FC = ({\r\n children,\r\n}) => {\r\n const [importDelegationsState, dispatch] = useReducer(reducer, initialState);\r\n\r\n const setDelegeesData = (data: DelegeeData[]) =>\r\n dispatch({\r\n type: importDelegationsTypes.SET_DELEGEES_DATA,\r\n payload: data,\r\n });\r\n\r\n const setCheckParkingRights = (parkingRights: ICheckParkingRight[]) =>\r\n dispatch({\r\n type: importDelegationsTypes.SET_SELECTED_PARKING_RIGHTS,\r\n payload: parkingRights,\r\n });\r\n\r\n const setProcessing = (isProcessing: boolean) =>\r\n dispatch({\r\n type: importDelegationsTypes.SET_PROCESSING,\r\n payload: isProcessing,\r\n });\r\n\r\n const value: ImportDelegationsContextState = {\r\n importDelegationsState,\r\n setDelegeesData,\r\n setCheckParkingRights,\r\n setProcessing,\r\n };\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport default ImportDelegationsContextProvider;\r\n","import { ImportDelegationsCtx } from \"../ImportDelegationsContext\";\r\nimport { useContext } from \"react\";\r\n\r\nconst useImportDelegationsContext = () => useContext(ImportDelegationsCtx);\r\n\r\nexport default useImportDelegationsContext;\r\n","import React, { useRef, Dispatch, useEffect, useMemo } from \"react\";\r\nimport { Formik, FormikProps } from \"formik\";\r\nimport { InputLabel, Grid, Container, Button, ButtonGroup } from \"@material-ui/core\";\r\nimport RequiredInputLabel from \"../../ui/RequiredInputLabel/RequiredInputLabel\";\r\nimport { Translation, useTranslation } from \"react-i18next\";\r\nimport { CloseOutlined } from \"@material-ui/icons\";\r\nimport { variables } from \"../../theme/variables\";\r\nimport { without, contains } from \"underscore\";\r\nimport Heading from \"../../ui/Heading/Heading\";\r\nimport CustomButton from \"../../ui/CustomButton/CustomButton\";\r\nimport CustomInput from \"../../ui/CustomInput/CustomInput\";\r\nimport ParkingRightsGrid from \"./ParkingRightsGrid/ParkingRightsGrid\";\r\nimport Spacer from \"../../ui/Spacer/Spacer\";\r\nimport { RootReducer } from \"../../store/reducers\";\r\nimport parkingProductsActions from \"../../store/actions/parkingProducts.actions\";\r\nimport { connect } from \"react-redux\";\r\nimport { ParkingRightsRequestModel } from \"../../models/ParkingRightsRequestModel\";\r\nimport useValidationSchema, { IDelegeeFormValues } from \"./hooks/useValidationSchema\";\r\nimport useAppContext from \"../../context/hooks/useAppContext\";\r\nimport { checkHasNoCapacity, checkEmailExists } from \"../../utils\";\r\nimport CustomError from \"../../ui/CustomError/CustomError\";\r\nimport useFleetManagerContext from \"../../context/hooks/useFleetManagerContext\";\r\nimport { DelegationType } from \"../../context/store/reducers/fleetManagerContext.reducer\";\r\nimport { NoPaddingBottomGrid } from \"../DataTable/DataTableStyledComponents\";\r\nimport \"./_delegeeForm.scss\";\r\nimport WarningColumn from \"../../ui/CenteredWarning/CenteredWarning\";\r\nimport { DeleteDelegeeIcon, DeleteText, DeleteWrapper } from \"../DataTable/DataTableFilters/CommonStyledComponents\";\r\nimport useImportDelegationsContext from \"../../context/hooks/useImportDelegationsContext\";\r\n\r\nconst { typography } = variables;\r\ninterface IFormProps extends StateProps, DispatchProps {\r\n onClose: () => void;\r\n refreshHandler: () => void;\r\n registrationId: string;\r\n}\r\n\r\nconst DelegeeForm: React.FC = (props) => {\r\n const {\r\n onClose,\r\n refreshHandler,\r\n parkingProducts,\r\n getParkingProducts,\r\n delegateParkingRights,\r\n updateDelegation,\r\n getDelegeeDetails,\r\n clearDelegeeDetails,\r\n resetBulkImportProgress,\r\n getBulkImportStatus,\r\n disposeError\r\n } = props;\r\n\r\n const { appState } = useAppContext();\r\n const { fleetManagerState, toggleDeleteDelegeeWarning, setDelegationType, setDragAndDropView } =\r\n useFleetManagerContext();\r\n\r\n const isEditMode = fleetManagerState.isEditDelegeeMode;\r\n\r\n const { t } = useTranslation([\"delegeeForm\", \"globals\", \"errors\"]);\r\n const { validationSchema, initialValues } = useValidationSchema(\r\n t,\r\n isEditMode,\r\n fleetManagerState.delegationType\r\n );\r\n\r\n const innerRef = useRef>(null);\r\n\r\n const fetchParkingProducts = () => {\r\n getParkingProducts(appState.user.seasonTicketOwnerCrmId as string, appState.selectedLanguage);\r\n };\r\n\r\n const fetchDelegeeDetails = () => {\r\n getDelegeeDetails(fleetManagerState.selectedRegistrationId, appState.selectedLanguage);\r\n };\r\n\r\n const fetchBulkImportStatus = () => {\r\n getBulkImportStatus(appState.user.seasonTicketOwnerCrmId as string);\r\n }\r\n\r\n const initForm = () => {\r\n fetchParkingProducts();\r\n fetchBulkImportStatus();\r\n\r\n if (isEditMode) {\r\n fetchDelegeeDetails();\r\n }\r\n };\r\n\r\n const resetDelegeeForm = () => {\r\n disposeError();\r\n clearDelegeeDetails();\r\n resetBulkImportProgress();\r\n };\r\n\r\n useEffect(() => {\r\n initForm();\r\n\r\n return () => resetDelegeeForm();\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n useEffect(() => {\r\n setFormFields();\r\n // eslint-disable-next-line\r\n }, [parkingProducts.delegeeDetails.data]);\r\n\r\n useEffect(() => {\r\n if (hasNoCapacity()) {\r\n fetchParkingProducts();\r\n handleDeselectAll();\r\n }\r\n // eslint-disable-next-line\r\n }, [parkingProducts.error?.errors]);\r\n\r\n const setFormFields = () => {\r\n innerRef.current?.setFieldValue(\"name\", parkingProducts.delegeeDetails.data?.name ?? \"\");\r\n innerRef.current?.setFieldValue(\r\n \"email\",\r\n parkingProducts.delegeeDetails.data?.emailAddress ?? \"\"\r\n );\r\n\r\n const rightsIds =\r\n parkingProducts.delegeeDetails.data != null\r\n ? parkingProducts.delegeeDetails.data.products?.map((product) => product.pmcId)\r\n : [];\r\n\r\n innerRef.current?.setFieldValue(\"rights\", rightsIds);\r\n };\r\n\r\n const handleRightChange = (\r\n event: React.ChangeEvent,\r\n parkingRights: number[]\r\n ) => {\r\n const { value } = event.target;\r\n const rightId = parseInt(value);\r\n\r\n let rights = [...parkingRights];\r\n if (contains(rights, rightId)) {\r\n rights = without(rights, rightId);\r\n } else {\r\n rights.push(rightId);\r\n }\r\n\r\n innerRef.current?.setFieldValue(\"rights\", rights);\r\n\r\n disposeError();\r\n };\r\n\r\n const handleSelectAll = (parkingRights: number[]) => {\r\n innerRef.current?.setFieldValue(\"rights\", parkingRights);\r\n };\r\n\r\n const handleDeselectAll = () => {\r\n innerRef.current?.setFieldValue(\"rights\", []);\r\n };\r\n\r\n const submitCallback = () => {\r\n refreshHandler();\r\n onClose();\r\n };\r\n\r\n const handleFormSubmit = (values: IDelegeeFormValues) => {\r\n if (fleetManagerState.delegationType === DelegationType.Multiple) {\r\n goToUploadFile();\r\n return;\r\n }\r\n const model: ParkingRightsRequestModel = {\r\n seasonTicketOwnerCrmId: appState.user.seasonTicketOwnerCrmId as string,\r\n email: values.email,\r\n name: values.name,\r\n pmcIds: values.rights ?? [],\r\n };\r\n\r\n if (isEditMode) {\r\n model.registrationId = parkingProducts.delegeeDetails.data?.registrationId as string;\r\n\r\n updateDelegation(model, submitCallback);\r\n return;\r\n }\r\n\r\n delegateParkingRights(model, submitCallback);\r\n };\r\n\r\n const handleEmailChange = (event: React.ChangeEvent): void => {\r\n const { value } = event.target;\r\n\r\n innerRef.current?.setFieldValue(\"email\", value);\r\n\r\n disposeError();\r\n };\r\n\r\n const submitButtonText = () => {\r\n if (fleetManagerState.delegationType === DelegationType.Multiple) {\r\n return t(\"goToUpload\");\r\n }\r\n\r\n return !isEditMode ? t(\"sendInvite\") : t(\"updateDelegee\");\r\n };\r\n\r\n const getFormTitle = () => (isEditMode ? t(\"editExistingDelegee\") : t(\"addNewDelegee\"));\r\n\r\n const delegeeEmailExists = (): boolean => checkEmailExists(parkingProducts.error);\r\n\r\n const hasNoCapacity = (): boolean => checkHasNoCapacity(parkingProducts.error);\r\n\r\n const delegateSingle = (): void => setDelegationType(DelegationType.Single);\r\n const delegateMultiple = (): void => setDelegationType(DelegationType.Multiple);\r\n const goToUploadFile = (): void => setDragAndDropView(true);\r\n\r\n const initiallySelectedPmcIds = useMemo(() => parkingProducts.delegeeDetails.data?.products.map(p => p.pmcId), [parkingProducts.delegeeDetails.data?.products]);\r\n\r\n const { setCheckParkingRights } = useImportDelegationsContext();\r\n\r\n return (\r\n \r\n {({ handleSubmit, handleChange, values, errors }) => (\r\n
\r\n
\r\n \r\n {isEditMode && (\r\n \r\n \r\n {t(\"deleteDelegee\")}\r\n \r\n )}\r\n \r\n {getFormTitle()}\r\n \r\n \r\n \r\n
\r\n
\r\n {!isEditMode && (\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n {t(\"single\")}\r\n \r\n \r\n {t(\"multiple\")}\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n )}\r\n
\r\n \r\n {fleetManagerState.delegationType == DelegationType.Single && (\r\n \r\n \r\n \r\n {t(\"delegeeInformation\")}\r\n \r\n \r\n \r\n \r\n {t(\"globals:name\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(\"globals:email\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {(t) => (\r\n setCheckParkingRights(parkingRights.filter(x => x.checked))}\r\n onChange={(event) => handleRightChange(event, values.rights ?? [])}\r\n onSelectAll={(ids) => handleSelectAll(ids)}\r\n onDeselectAll={handleDeselectAll}\r\n error={{\r\n hasError: Boolean(errors.rights),\r\n message: errors.rights,\r\n }}\r\n title={t(\"delegateRights\")}\r\n required={!isEditMode}\r\n selectAllTooltipText={t(\"selectTooltip\")}\r\n deselectAllTooltipText={t(\"deselectTooltip\")}\r\n selectAllText={t(\"selectAll\")}\r\n deselectAllText={t(\"deselectAll\")} />\r\n )}\r\n\r\n {fleetManagerState.delegationType == DelegationType.Multiple && !parkingProducts.isBulkImportCompleted && (\r\n
\r\n \r\n
\r\n )}\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n handleSubmit()}\r\n text={submitButtonText()}\r\n id=\"submit-invite\"\r\n disabled={fleetManagerState.delegationType == DelegationType.Multiple && !parkingProducts.isBulkImportCompleted}\r\n />\r\n \r\n \r\n
\r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { parkingProducts } = state;\r\n\r\n return {\r\n parkingProducts\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n getParkingProducts: (seasonTicketOwnerCrmId: string, location: string) =>\r\n dispatch(parkingProductsActions.getParkingProducts(seasonTicketOwnerCrmId, location)),\r\n delegateParkingRights: (parkingRights: ParkingRightsRequestModel, callback?: () => void) =>\r\n dispatch(parkingProductsActions.delegateParkingRights(parkingRights, callback)),\r\n updateDelegation: (parkingRights: ParkingRightsRequestModel, callback?: () => void) =>\r\n dispatch(parkingProductsActions.updateDelegation(parkingRights, callback)),\r\n disposeError: () => dispatch(parkingProductsActions.disposeError()),\r\n getDelegeeDetails: (registrationId: string, language: string) =>\r\n dispatch(parkingProductsActions.getDelegeeDetails(registrationId, language)),\r\n clearDelegeeDetails: () => dispatch(parkingProductsActions.clearDelegeeDetails()),\r\n resetBulkImportProgress: () => dispatch(parkingProductsActions.resetBulkImportProgress()),\r\n getBulkImportStatus: (seasonTicketOwnerCrmId: string) => dispatch(parkingProductsActions.getBulkImportStatus(seasonTicketOwnerCrmId))\r\n});\r\n\r\ntype StateProps = ReturnType;\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DelegeeForm);\r\n","import React from \"react\";\r\nimport { Drawer } from \"@material-ui/core\";\r\nimport IChildren from \"../../interfaces/IChildren\";\r\n\r\ninterface IActionDrawerProps extends IChildren {\r\n open: boolean;\r\n onClose?: () => void;\r\n className?: string;\r\n hideBackdrop?: boolean;\r\n}\r\n\r\nconst ActionDrawer = (props: IActionDrawerProps) => {\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n\r\nexport default ActionDrawer;\r\n","import React from \"react\";\r\nimport styled from \"styled-components\";\r\nimport IChildren from \"../../interfaces/IChildren\";\r\n\r\nconst Ellipsed = styled.span`\r\n display: block;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n`;\r\n\r\nconst EllipsedSpan = ({ children }: IChildren) => {children};\r\n\r\nEllipsedSpan.defaultProps = {\r\n children: \"Your text you want to be ellipsed\",\r\n};\r\n\r\nexport default EllipsedSpan;\r\n","import { Theme, Tooltip, withStyles } from \"@material-ui/core\";\r\nimport React from \"react\";\r\nimport { ParkingProductModel } from \"../../../models/ParkingProductModel\";\r\nimport { variables } from \"../../../theme/variables\";\r\nimport \"./_productsTooltip.scss\";\r\nimport { useGetOccupiedParkingRightsCount } from \"../../../containers/FleetManager/MyProducts/ParkingRightsDataTable/common\";\r\n\r\nconst { colors, typography } = variables;\r\n\r\nconst HtmlTooltip = withStyles((theme: Theme) => ({\r\n tooltip: {\r\n backgroundColor: colors.white,\r\n color: colors.black,\r\n fontSize: typography.fontSizeBase,\r\n border: `1px solid ${colors.veryLightGray}`,\r\n borderRadius: 6,\r\n boxShadow: \"0px 3px 6px rgba(0, 0, 0, 0.1)\",\r\n maxWidth: \"none\",\r\n },\r\n}))(Tooltip);\r\n\r\ninterface ProductsTooltipProps {\r\n children: React.ReactElement;\r\n parkingProducts: ParkingProductModel[];\r\n displayLocation?: boolean;\r\n displayAmount?: boolean;\r\n}\r\n\r\nconst ProductsTooltip = ({\r\n children,\r\n parkingProducts,\r\n displayLocation,\r\n displayAmount,\r\n}: ProductsTooltipProps) => {\r\n const getTotalOccupiedParkingRights = useGetOccupiedParkingRightsCount();\r\n\r\n return (\r\n \r\n
    \r\n {parkingProducts?.map((pp: ParkingProductModel, index: number) => (\r\n
  • \r\n {displayAmount && (\r\n
    \r\n {getTotalOccupiedParkingRights(pp)}/{pp.totalParkingRights}\r\n
    \r\n )}\r\n \r\n {pp.pmcName}\r\n {displayLocation && ` - ${pp.location}`}\r\n \r\n
  • \r\n ))}\r\n
\r\n \r\n }\r\n >\r\n {children}\r\n \r\n );\r\n};\r\n\r\nProductsTooltip.defaultProps = {\r\n children: null,\r\n products: [],\r\n displayLocation: false,\r\n displayAmount: false,\r\n};\r\n\r\nexport default ProductsTooltip;\r\n","import React from \"react\";\r\n\r\nconst NonBreakableSpace = () => <> ;\r\n\r\nexport default NonBreakableSpace;\r\n","import { Card, Grid, makeStyles } from \"@material-ui/core\";\r\nimport Skeleton from \"@material-ui/lab/Skeleton\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../theme/variables\";\r\n\r\nconst { colors, typography, breakpoints } = variables;\r\n\r\ninterface InlineProps {\r\n justifyContent: string;\r\n}\r\n\r\nexport const StyledCard = styled(Card)`\r\n @media screen and (min-width: ${breakpoints.screenLg}) {\r\n width: 308px;\r\n }\r\n\r\n @media screen and (max-width: ${breakpoints.screenMd}) {\r\n width: 100%;\r\n }\r\n`;\r\n\r\nexport const Inline = styled.div`\r\n display: flex;\r\n flex-flow: row nowrap;\r\n align-items: center;\r\n justify-content: ${(props: InlineProps) => props.justifyContent};\r\n width: 100%;\r\n`;\r\n\r\nexport const StyledSkeleton = styled(Skeleton)`\r\n margin: 0 0 0 5px;\r\n`;\r\n\r\nexport const LocationCapacity = styled.div`\r\n overflow: hidden;\r\n width: auto;\r\n`;\r\n\r\nexport const NoPaddingCol = styled(Grid)`\r\n padding-bottom: 0;\r\n`;\r\n\r\nexport const useStyles = makeStyles({\r\n root: {\r\n border: `1px solid ${colors.veryLightGray}`,\r\n borderRadius: \"6px\",\r\n boxShadow: \"0px 3px 6px rgba(0, 0, 0, 0.1)\",\r\n margin: \"0.25rem 0.5rem 0.25rem 0\",\r\n transition: \"all .2s ease-in-out\",\r\n\r\n \"&:hover\": {\r\n cursor: \"pointer\",\r\n },\r\n\r\n \"&.active\": {\r\n margin: \"0 0.5rem 0.5rem 0\",\r\n boxShadow: \"0px 5px 6px rgba(0, 0, 0, 0.1)\",\r\n },\r\n },\r\n media: {\r\n height: 115,\r\n width: \"100%\",\r\n },\r\n gridRoot: {\r\n paddingBottom: 0,\r\n },\r\n colRoot: {\r\n color: colors.darkGraySecondary,\r\n fontSize: typography.fontSizeSmaller,\r\n },\r\n cardContentRoot: {\r\n \"&:last-child\": {\r\n padding: \"20px 18px\",\r\n },\r\n },\r\n});\r\n","import { isUndefined, without } from \"underscore\";\r\n\r\nexport type Position = {\r\n left?: number;\r\n right?: number;\r\n width?: number;\r\n};\r\n\r\ntype LocationCardBusiness = {\r\n handleCardClicked: (\r\n event: React.MouseEvent,\r\n instance: React.MutableRefObject,\r\n action?: (position?: Position) => void\r\n ) => void;\r\n};\r\n\r\nconst locationCardBusiness: LocationCardBusiness = (() => {\r\n const activeClass = \"active\";\r\n\r\n const _elementIsActive = (instance: React.MutableRefObject) =>\r\n instance.current.classList.contains(activeClass);\r\n const _removeActiveClass = (instance: React.MutableRefObject) =>\r\n instance.current.classList.remove(activeClass);\r\n const _addActiveClass = (instance: React.MutableRefObject) =>\r\n instance.current.classList.add(activeClass);\r\n\r\n const _isOutsideOfElement = (\r\n event: React.MouseEvent,\r\n instance: React.MutableRefObject\r\n ): boolean => {\r\n return (\r\n instance.current &&\r\n !instance.current.contains(event.target) &&\r\n instance.current.classList.contains(activeClass)\r\n );\r\n };\r\n\r\n const _isInsideOfElement = (\r\n event: React.MouseEvent,\r\n instance: React.MutableRefObject\r\n ): boolean => {\r\n return instance.current && instance.current.contains(event.target);\r\n };\r\n\r\n const _excludeOtherElements = (\r\n event: React.MouseEvent,\r\n instance: React.MutableRefObject\r\n ): void => {\r\n event.preventDefault();\r\n const elements = document.querySelectorAll(\"[data-card-type]\");\r\n const toDeactivate = without(elements, instance.current);\r\n toDeactivate.forEach((el: Element) => el.classList.remove(activeClass));\r\n };\r\n\r\n const handleCardClicked = (\r\n event: React.MouseEvent,\r\n instance: React.MutableRefObject,\r\n action?: (position?: Position) => void\r\n ) => {\r\n _excludeOtherElements(event, instance);\r\n\r\n const { left, right, width }: Position = instance.current.getBoundingClientRect();\r\n\r\n if (!isUndefined(action)) {\r\n action({ left, right, width });\r\n }\r\n\r\n if (_isInsideOfElement(event, instance)) {\r\n if (_elementIsActive(instance)) {\r\n _removeActiveClass(instance);\r\n\r\n return;\r\n }\r\n\r\n _addActiveClass(instance);\r\n }\r\n\r\n if (_isOutsideOfElement(event, instance)) {\r\n _removeActiveClass(instance);\r\n }\r\n };\r\n\r\n return {\r\n handleCardClicked,\r\n };\r\n})();\r\n\r\nexport default locationCardBusiness;\r\n","import React, { useRef } from \"react\";\r\nimport { CardContent, CardMedia, Grid } from \"@material-ui/core\";\r\nimport Heading from \"../../ui/Heading/Heading\";\r\nimport EllipsedSpan from \"../../ui/EllipsedSpan/EllipsedSpan\";\r\nimport { LocatedParkingProduct } from \"../../models/LocatedParkingProduct\";\r\nimport ProductsTooltip from \"./ProductsTooltip/ProductsTooltip\";\r\nimport { isEmpty } from \"underscore\";\r\nimport Skeleton from \"@material-ui/lab/Skeleton\";\r\nimport locationMarker from \"../../assets/images/location-marker.svg\";\r\nimport seasonTicket from \"../../assets/images/season-ticket.svg\";\r\nimport vehicle from \"../../assets/images/vehicle.svg\";\r\nimport NonBreakableSpace from \"../../ui/NonBreakableSpace/NonBreakableSpace\";\r\nimport {\r\n Inline,\r\n LocationCapacity,\r\n NoPaddingCol,\r\n StyledSkeleton,\r\n StyledCard,\r\n useStyles,\r\n} from \"./LocationCardStyledComponents\";\r\nimport locationCardBusiness, { Position } from \"./locationCard.business\";\r\nimport { selectUseBulkVehicleAssignments, useGetOccupiedParkingRightsCount } from \"../../containers/FleetManager/MyProducts/ParkingRightsDataTable/common\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useAppSelector } from \"../../store\";\r\n\r\ninterface ILocationCardProps {\r\n model: LocatedParkingProduct;\r\n onClick: (position?: Position) => void;\r\n loading?: boolean;\r\n}\r\n\r\nconst LocationCard: React.FC = ({ model, loading, onClick }) => {\r\n const {\r\n locationName,\r\n cityName,\r\n imageSrc,\r\n totalParkingRights,\r\n totalPmcs,\r\n parkingProducts\r\n } = model;\r\n\r\n const getTotalOccupiedParkingRights = useGetOccupiedParkingRightsCount();\r\n\r\n const { t } = useTranslation([\"vehicleAssignment\"]);\r\n const classes = useStyles();\r\n const instance = useRef(null);\r\n const useBulkVehicleAssignments = useAppSelector(selectUseBulkVehicleAssignments);\r\n\r\n const onCardClicked = (event: React.MouseEvent) =>\r\n locationCardBusiness.handleCardClicked(event, instance, (pos: Position | undefined) =>\r\n onClick(pos as Position)\r\n );\r\n\r\n const hasUnlimitedEntryRights = parkingProducts.some((p) => p.hasUnlimitedEntryRights);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {locationName}\r\n \r\n \r\n {!isEmpty(cityName) && (\r\n \r\n \r\n \r\n \r\n {cityName}\r\n \r\n \r\n )}\r\n\r\n \r\n {loading ? (\r\n \r\n ) : (\r\n \r\n \r\n \r\n {totalPmcs}\r\n \r\n )}\r\n \r\n \r\n {loading ? (\r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n {getTotalOccupiedParkingRights(model)} / {useBulkVehicleAssignments && hasUnlimitedEntryRights ? t(\"unlimited\") : totalParkingRights}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nLocationCard.defaultProps = {\r\n model: {\r\n locationName: \"Location name\",\r\n cityName: \"City name\",\r\n placeId: 0,\r\n imageSrc: \"\",\r\n totalDelegatedParkingRights: 0,\r\n totalParkingRights: 0,\r\n totalAssignedParkingRights: 0,\r\n totalPmcs: 0,\r\n parkingProducts: [],\r\n hasUnlimitedEntryRights: false,\r\n },\r\n onClick: () => { },\r\n} as ILocationCardProps;\r\n\r\nexport default LocationCard;\r\n","import { Container, Fade, IconButton, makeStyles } from \"@material-ui/core\";\r\nimport { ArrowBackIosRounded, ArrowForwardIosRounded } from \"@material-ui/icons\";\r\nimport React, { useEffect, useRef, useState } from \"react\";\r\nimport styled from \"styled-components\";\r\nimport { isUndefined } from \"underscore\";\r\nimport { useDataTableContext } from \"../../../../components/DataTable/DataTableContext/DataTableContextProvider\";\r\nimport LocationCard from \"../../../../components/LocationCard/LocationCard\";\r\nimport { Position } from \"../../../../components/LocationCard/locationCard.business\";\r\nimport useMyProductsContext from \"../../../../context/hooks/useMyProductsContext\";\r\nimport { LocatedParkingProduct } from \"../../../../models/LocatedParkingProduct\";\r\nimport { variables } from \"../../../../theme/variables\";\r\nimport \"./_locationsCarousel.scss\";\r\n\r\nconst { colors } = variables;\r\n\r\nconst CarouselContainer = styled(Container)`\r\n padding: 0 1.5rem;\r\n max-width: 100%;\r\n`;\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n backgroundColor: colors.white,\r\n boxShadow: \"0px 3px 6px rgba(0, 0, 0, 0.1)\",\r\n border: `1px solid ${colors.veryLightGray}`,\r\n \"&:hover\": {\r\n backgroundColor: colors.white,\r\n },\r\n },\r\n});\r\n\r\ninterface ILocationsCarousel {\r\n elements: LocatedParkingProduct[];\r\n loading?: boolean;\r\n onCardClicked?: (position: Position) => void;\r\n}\r\n\r\ntype StateType = {\r\n selectedIndex: number;\r\n carousel?: boolean;\r\n};\r\n\r\nconst initialState: StateType = {\r\n selectedIndex: 0,\r\n carousel: false,\r\n};\r\n\r\nconst btnInitialState = {\r\n next: true,\r\n previous: false,\r\n};\r\n\r\ntype BtnStateType = Readonly;\r\n\r\nconst LocationsCarousel: React.FC = ({ elements, loading, onCardClicked }) => {\r\n const classes = useStyles();\r\n const { setSelectedLocation } = useMyProductsContext();\r\n const { resetPageNumber } = useDataTableContext();\r\n\r\n const selectLocation = (placeId: number) => {\r\n resetPageNumber();\r\n setSelectedLocation(placeId);\r\n };\r\n\r\n const [state, setState] = useState(initialState);\r\n const [btnState, setBtnState] = useState(btnInitialState);\r\n const card = useRef();\r\n\r\n useEffect(() => {\r\n toggleButtons();\r\n // eslint-disable-next-line\r\n }, [state.selectedIndex]);\r\n\r\n const isLast = state.selectedIndex === elements.length - 1;\r\n const isFirst = state.selectedIndex === 0;\r\n\r\n const updateState = (newState: StateType) =>\r\n setState({\r\n ...state,\r\n ...newState,\r\n });\r\n\r\n const updateBtnState = (newState: BtnStateType) =>\r\n setBtnState({\r\n ...btnState,\r\n ...newState,\r\n });\r\n\r\n const toggleButtons = () => {\r\n if (state.selectedIndex > 0 && state.selectedIndex < elements.length - 1) {\r\n updateBtnState({\r\n next: true,\r\n previous: true,\r\n });\r\n\r\n return;\r\n }\r\n\r\n if (isLast) {\r\n updateBtnState({\r\n next: false,\r\n previous: true,\r\n });\r\n\r\n return;\r\n }\r\n\r\n if (isFirst) {\r\n updateBtnState({\r\n previous: false,\r\n next: true,\r\n });\r\n\r\n return;\r\n }\r\n };\r\n\r\n const onNext = () => {\r\n if (isLast) {\r\n return;\r\n }\r\n\r\n updateState({\r\n selectedIndex: state.selectedIndex + 1,\r\n });\r\n };\r\n\r\n const onPrev = () => {\r\n if (isFirst) {\r\n return;\r\n }\r\n\r\n updateState({\r\n selectedIndex: state.selectedIndex - 1,\r\n });\r\n };\r\n\r\n const updateCarouselState = (index: number) => {\r\n if (card.current === index && state.carousel) {\r\n updateState({\r\n carousel: false,\r\n selectedIndex: 0,\r\n });\r\n\r\n card.current = 0;\r\n\r\n return;\r\n }\r\n\r\n if (!state.carousel) {\r\n updateState({\r\n carousel: true,\r\n selectedIndex: index,\r\n });\r\n }\r\n\r\n card.current = index;\r\n };\r\n\r\n const onCardSelect = (index: number, placeId: number, position?: Position) => {\r\n updateCarouselState(index);\r\n selectLocation(placeId);\r\n\r\n if (!isUndefined(onCardClicked)) {\r\n if (index > 0 && !state.carousel) {\r\n position = {\r\n ...position,\r\n left: 289,\r\n };\r\n }\r\n\r\n onCardClicked(position as Position);\r\n }\r\n };\r\n\r\n if (!elements?.length) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n {btnState.previous && state.carousel && (\r\n \r\n \r\n \r\n )}\r\n\r\n \r\n {elements.map((pp: LocatedParkingProduct, index: number) => (\r\n onCardSelect(index, pp.placeId, position)}\r\n />\r\n ))}\r\n
\r\n\r\n {btnState.next && state.carousel && (\r\n \r\n \r\n \r\n )}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default LocationsCarousel;\r\n","import React from \"react\";\r\nimport { variables } from \"../../theme/variables\";\r\nimport styled from \"styled-components\";\r\nimport { isUndefined } from \"underscore\";\r\n\r\nconst { typography, whiteSpaces } = variables;\r\n\r\nconst Wrapper = styled.div`\r\n display: flex;\r\n flex-flow: row nowrap;\r\n width: 100%;\r\n align-items: center;\r\n padding: 0 1.5rem;\r\n`;\r\n\r\nconst CounterSpan = styled.span`\r\n font-size: ${typography.fontSizeLarge};\r\n margin-left: ${whiteSpaces.xs};\r\n &:before {\r\n content: \"(\";\r\n }\r\n &:after {\r\n content: \")\";\r\n }\r\n`;\r\n\r\ntype HeadingOptions = {\r\n showCounter?: boolean;\r\n};\r\n\r\ninterface IHeadingProps {\r\n title: string;\r\n count?: number;\r\n className?: string;\r\n options?: HeadingOptions;\r\n}\r\n\r\nconst CustomHeading: React.FC = ({ className, title, count, options }) => (\r\n \r\n

{title}

\r\n {!isUndefined(options) && options.showCounter && {count}}\r\n
\r\n);\r\n\r\nexport default CustomHeading;\r\n","import { Grid } from \"@material-ui/core\";\r\nimport React, { Dispatch, useCallback, useEffect } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { connect } from \"react-redux\";\r\nimport { isEmpty, isUndefined } from \"underscore\";\r\nimport useAppContext from \"../../../../context/hooks/useAppContext\";\r\nimport { LocatedParkingProduct } from \"../../../../models/LocatedParkingProduct\";\r\nimport parkingProductsActions from \"../../../../store/actions/parkingProducts.actions\";\r\nimport { RootReducer } from \"../../../../store/reducers\";\r\nimport LocationsCarousel from \"../LocationsCarousel/LocationsCarousel\";\r\nimport CustomHeading from \"../../../../ui/CustomHeading/CustomHeading\";\r\nimport { Position } from \"../../../../components/LocationCard/locationCard.business\";\r\nimport \"./_locationCards.scss\";\r\n\r\ninterface ILocationCardsProps extends StateProps, DispatchProps {\r\n onCardSelected?: (position?: Position) => void;\r\n}\r\n\r\nconst LocationCards = ({\r\n locatedParkingProducts,\r\n getLocations,\r\n onCardSelected,\r\n}: ILocationCardsProps) => {\r\n const { appState } = useAppContext();\r\n\r\n const { t } = useTranslation([\"myProducts\", \"globals\"]);\r\n\r\n const fetchLocations = useCallback(() => {\r\n if (\r\n !isEmpty(appState.user.seasonTicketOwnerCrmId) ||\r\n !isUndefined(appState.user.seasonTicketOwnerCrmId)\r\n ) {\r\n getLocations(appState.user.seasonTicketOwnerCrmId as string, appState.selectedLanguage);\r\n }\r\n // eslint-disable-next-line\r\n }, [appState.user.seasonTicketOwnerCrmId, appState.selectedLanguage]);\r\n\r\n useEffect(() => {\r\n fetchLocations();\r\n }, [fetchLocations]);\r\n\r\n const onClick = (position?: Position) => {\r\n if (!isUndefined(onCardSelected)) {\r\n onCardSelected(position);\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { locatedParkingProducts } = state.parkingProducts;\r\n\r\n return {\r\n locatedParkingProducts,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n getLocations: (seasonTicketOwnerCrmId: string, language: string) =>\r\n dispatch(parkingProductsActions.getLocatedParkingProducts(seasonTicketOwnerCrmId, language)),\r\n});\r\n\r\ntype StateProps = ReturnType;\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LocationCards);\r\n","import React from \"react\";\r\nimport { Container, Grid } from \"@material-ui/core\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../theme/variables\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport CustomButton from \"../../ui/CustomButton/CustomButton\";\r\nimport WarningColumn from \"../../ui/CenteredWarning/CenteredWarning\";\r\n\r\nconst { colors } = variables;\r\n\r\n\r\n\r\nconst ActionFooter = styled(Container)`\r\n background-color: ${colors.white};\r\n border-top: 1px solid ${colors.veryLightGray};\r\n padding-top: 1rem;\r\n padding-bottom: 1rem;\r\n display: flex;\r\n flex-flow: row wrap;\r\n justify-content: space-between;\r\n position: absolute;\r\n bottom: 0;\r\n`;\r\n\r\ninterface IProps {\r\n warning: string;\r\n details: string;\r\n disabled?: boolean;\r\n onCancel: () => void;\r\n onConfirm: () => void;\r\n confirmText: string;\r\n loading?: boolean;\r\n useOrangeWarning?: boolean;\r\n width?: number\r\n}\r\n\r\nconst Warning = (props: IProps) => {\r\n const { t } = useTranslation(\"globals\");\r\n\r\n const FullHeightRow = styled(Grid)`\r\n height: 100vh;\r\n padding: 0;\r\n width: ${props.width ?? 500}px;\r\n position: relative;\r\n `;\r\n\r\n const warning = !props.disabled ? props.warning : \"\";\r\n const details = !props.disabled ? props.details : \"\";\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {!props.useOrangeWarning && ()}\r\n {props.useOrangeWarning && ()}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Warning;\r\n","import React, { useEffect, Dispatch, useState } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { isEmpty, isNull } from \"underscore\";\r\nimport Warning from \"./Warning\";\r\nimport useAppContext from \"../../context/hooks/useAppContext\";\r\nimport parkingProductsActions from \"../../store/actions/parkingProducts.actions\";\r\nimport { RootReducer } from \"../../store/reducers\";\r\nimport useFleetManagerContext from \"../../context/hooks/useFleetManagerContext\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ninterface IFormProps extends StateProps, DispatchProps{\r\n getWarningText: (parkingProductsCount : number) => string,\r\n getWarningDetails: (parkingProductsCount : number) => string,\r\n onRefresh : () => void;\r\n}\r\n\r\nconst DeleteDelegeeWarning = ({\r\n deleteDelegee,\r\n delegeeDetails,\r\n getDelegeeDetails,\r\n clearDelegeeDetails,\r\n getWarningText,\r\n getWarningDetails,\r\n onRefresh\r\n} : IFormProps) => {\r\n const { t } = useTranslation(\"globals\");\r\n\r\n const { fleetManagerState, toggleDeleteDelegeeWarning, setSelectedRegistrationId, toggleEditDelegee} = useFleetManagerContext();\r\n const { appState } = useAppContext();\r\n\r\n const disabled = delegeeDetails.data == null;\r\n const parkingRightsCount = delegeeDetails.data?.products.length ?? 0;\r\n const warningText = getWarningText(parkingRightsCount); \r\n const warningDetails = getWarningDetails(parkingRightsCount); \r\n\r\n const initWarning = () => {\r\n const shouldGetdelegeeDetails = isNull(delegeeDetails.data) || delegeeDetails.data?.registrationId !== fleetManagerState.selectedRegistrationId;\r\n if(shouldGetdelegeeDetails && !isEmpty(fleetManagerState.selectedRegistrationId)){\r\n getDelegeeDetails(fleetManagerState.selectedRegistrationId, appState.selectedLanguage);\r\n }\r\n }\r\n\r\n const resetWarning = () => {\r\n const shouldCleardelegeeDetails = !fleetManagerState.showDelegeeDetails;\r\n if(shouldCleardelegeeDetails){\r\n clearDelegeeDetails();\r\n setSelectedRegistrationId(\"\");\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n initWarning();\r\n\r\n return () => {\r\n resetWarning();\r\n }\r\n \r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n const handleDeleteCancelation = () => {\r\n toggleDeleteDelegeeWarning();\r\n }\r\n\r\n const handleSuccessfulDelete = () => {\r\n toggleDeleteDelegeeWarning();\r\n\r\n if(fleetManagerState.showDelegeeDetails){\r\n toggleEditDelegee(\"\");\r\n }\r\n\r\n onRefresh();\r\n }\r\n\r\n const [loading, setLoading] = useState(false);\r\n\r\n const handleDeleteConfirmation = () => {\r\n const registrationId = fleetManagerState.selectedRegistrationId;\r\n\r\n setLoading(true);\r\n deleteDelegee(registrationId, () => {\r\n setLoading(false);\r\n handleSuccessfulDelete()\r\n });\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { delegeeDetails } = state.parkingProducts;\r\n\r\n return {\r\n delegeeDetails,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n deleteDelegee: (registrationId: string, callback? : () => void) =>\r\n dispatch(parkingProductsActions.deleteDelegee(registrationId, callback)),\r\n\r\n getDelegeeDetails: (registrationId : string, language: string) => \r\n dispatch(parkingProductsActions.getDelegeeDetails(registrationId, language)),\r\n \r\n clearDelegeeDetails: () =>\r\n dispatch(parkingProductsActions.clearDelegeeDetails()),\r\n});\r\n\r\ntype StateProps = ReturnType;\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DeleteDelegeeWarning);\r\n","import React, { Dispatch } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { connect } from \"react-redux\";\r\nimport Warning from \"./Warning\";\r\nimport parkingProductsActions from \"../../store/actions/parkingProducts.actions\";\r\nimport { RevokeParkingRightsModel } from \"../../models/RevokeParkingRightsModel\";\r\nimport useFleetManagerContext from \"../../context/hooks/useFleetManagerContext\";\r\nimport { RootReducer } from \"../../store/reducers\";\r\n\r\ninterface IFormProps extends StateProps, DispatchProps {\r\n selectedParkingRightIds: string[];\r\n onRefresh: () => void;\r\n}\r\n\r\nconst BatchRevokeParkingRightsWarning = ({\r\n parkingProducts,\r\n revokeParkingRights,\r\n selectedParkingRightIds,\r\n onRefresh\r\n}: IFormProps) => {\r\n const { t } = useTranslation([\"revokeDelegeeWarning\", \"globals\"]);\r\n const { toggleBatchRevokeParkingRightsWarning, setSelectedParkingRightIds } = useFleetManagerContext();\r\n\r\n const parkingRightsCount = selectedParkingRightIds.length;\r\n const warningText = t(\"warning\", {count:parkingRightsCount});\r\n const warningDetails = t(\"details\", {count:parkingRightsCount});\r\n\r\n const handleRevokeCancellation = () => {\r\n toggleBatchRevokeParkingRightsWarning();\r\n }\r\n\r\n const handleSuccessfulRevoke = () => {\r\n setSelectedParkingRightIds([]);\r\n toggleBatchRevokeParkingRightsWarning();\r\n\r\n onRefresh();\r\n }\r\n\r\n const handleRevokeConfirmation = () => {\r\n revokeParkingRights(selectedParkingRightIds, handleSuccessfulRevoke);\r\n }\r\n \r\n return (\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { parkingProducts } = state;\r\n\r\n return {\r\n parkingProducts,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n revokeParkingRights: (parkingRightIds: string[], callback?: () => void) => {\r\n const model: RevokeParkingRightsModel = {\r\n parkingRightIds\r\n };\r\n dispatch(parkingProductsActions.revokeParkingRights(model, callback))\r\n },\r\n});\r\n\r\ntype StateProps = ReturnType;\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BatchRevokeParkingRightsWarning);\r\n","const KEY_SEPARATOR = \"/\";\r\n\r\nexport function parseAssignedParkingRowKey(key: string): {\r\n vehicleAssignmentId: string;\r\n pmcId: number;\r\n} {\r\n const vehicleAssignmentDetails = key.split(KEY_SEPARATOR);\r\n\r\n return {\r\n vehicleAssignmentId: vehicleAssignmentDetails[0],\r\n pmcId: parseInt(vehicleAssignmentDetails[1]),\r\n };\r\n}\r\n\r\nexport type DVARowKey = {\r\n vehicleAssignmentId: string;\r\n pmcIds: number[];\r\n};\r\n\r\nexport function parseDVARowKey(s: string): DVARowKey {\r\n const [vehicleAssignmentId, ...pmcStrings] = s.split(KEY_SEPARATOR);\r\n const pmcIds = pmcStrings.map(x => parseInt(x));\r\n return { vehicleAssignmentId, pmcIds };\r\n}\r\n\r\nexport function stringifyDVARowKey(key: DVARowKey): string {\r\n return [key.vehicleAssignmentId, ...key.pmcIds].join(KEY_SEPARATOR);\r\n}\r\n\r\nexport function parseVehicleAssignmentId(key: string): string {\r\n const vehicleAssignmentDetails = key.split(KEY_SEPARATOR);\r\n\r\n return vehicleAssignmentDetails[0];\r\n}\r\n","import React, { Dispatch, useMemo } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { connect } from \"react-redux\";\r\nimport Warning from \"./Warning\";\r\nimport parkingProductsActions from \"../../store/actions/parkingProducts.actions\";\r\nimport useFleetManagerContext from \"../../context/hooks/useFleetManagerContext\";\r\nimport { RootReducer } from \"../../store/reducers\";\r\nimport { RevokeVehicleAssignmentsModel } from \"../../models/vehicle-assignments/RevokeVehicleAssignmentsModel\";\r\nimport { VehicleAssignmentProduct } from \"../../models/vehicle-assignments/VehicleAssignmentProduct\";\r\nimport { parseDVARowKey } from \"../../helpers/vehicleAssignment.utils\";\r\n\r\ninterface IFormProps extends StateProps, DispatchProps {\r\n selectedVehicleAssignmentKeys: string[];\r\n onRefresh: (vehiclesToExclude?: VehicleAssignmentProduct[]) => void;\r\n}\r\n\r\nconst BatchRevokeVehicleAssignmentWarning = ({\r\n parkingProducts,\r\n revokeVehicleAssignmentsParkingRights,\r\n selectedVehicleAssignmentKeys,\r\n onRefresh,\r\n}: IFormProps) => {\r\n const { t } = useTranslation([\"revokeVehicleAssignmentWarning\", \"globals\"]);\r\n const { toggleBatchRevokeVehicleAssignmentsWarning, setSelectedParkingRightIds } =\r\n useFleetManagerContext();\r\n\r\n const vaSelectedProducts: VehicleAssignmentProduct[] = useMemo(\r\n () =>\r\n selectedVehicleAssignmentKeys.flatMap((vehicleAssignmentKey) => {\r\n const parsed = parseDVARowKey(vehicleAssignmentKey);\r\n\r\n return parsed.pmcIds.map((pmcId) => ({\r\n vehicleAssignmentId: parsed.vehicleAssignmentId,\r\n pmcId,\r\n }));\r\n }),\r\n [selectedVehicleAssignmentKeys]\r\n );\r\n\r\n const handleRevokeCancellation = () => {\r\n toggleBatchRevokeVehicleAssignmentsWarning();\r\n };\r\n\r\n const handleSuccessfulRevoke = (model: VehicleAssignmentProduct[]) => {\r\n setSelectedParkingRightIds([]);\r\n toggleBatchRevokeVehicleAssignmentsWarning();\r\n\r\n onRefresh(model);\r\n };\r\n\r\n const handleRevokeConfirmation = () => {\r\n const model: RevokeVehicleAssignmentsModel = {\r\n vehicleAssignmentProducts: vaSelectedProducts,\r\n };\r\n revokeVehicleAssignmentsParkingRights(model, () =>\r\n handleSuccessfulRevoke(model.vehicleAssignmentProducts)\r\n );\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { parkingProducts } = state;\r\n\r\n return {\r\n parkingProducts,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n revokeVehicleAssignmentsParkingRights: (\r\n model: RevokeVehicleAssignmentsModel,\r\n callback: (vehiclesToExclude?: VehicleAssignmentProduct[]) => void\r\n ) =>\r\n dispatch(\r\n parkingProductsActions.revokeVehicleAssignmentProducts(model, () =>\r\n callback(model.vehicleAssignmentProducts)\r\n )\r\n ),\r\n});\r\n\r\ntype StateProps = ReturnType;\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BatchRevokeVehicleAssignmentWarning);\r\n","import React, { Dispatch } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { connect } from \"react-redux\";\r\nimport Warning from \"./Warning\";\r\nimport parkingProductsActions from \"../../store/actions/parkingProducts.actions\";\r\nimport useFleetManagerContext from \"../../context/hooks/useFleetManagerContext\";\r\nimport { RootReducer } from \"../../store/reducers\";\r\nimport { VehicleAssignmentProduct } from \"../../models/vehicle-assignments/VehicleAssignmentProduct\";\r\nimport { DeleteVehicleAssignmentsModel } from \"../../models/vehicle-assignments/DeleteVehicleAssignmentsModel\";\r\nimport { parseAssignedParkingRowKey, parseVehicleAssignmentId } from \"../../helpers/vehicleAssignment.utils\";\r\n\r\ninterface IFormProps extends StateProps, DispatchProps {\r\n selectedVehicleAssignmentKeys: string[];\r\n onRefresh: (vehiclesToExclude?: VehicleAssignmentProduct[], excludeByVehicleAssignmentId? : boolean) => void;\r\n}\r\n\r\nconst DeleteVehicleAssignmentWarning = ({\r\n parkingProducts,\r\n deleteVehicleAssignments,\r\n selectedVehicleAssignmentKeys,\r\n onRefresh\r\n}: IFormProps) => {\r\n const { t } = useTranslation([\"deleteVehicleAssignmentWarning\", \"globals\"]);\r\n const { toggleDeleteVehicleAssignmentsWarning, toggleEditVehicleAssignment, setSelectedParkingRightIds, fleetManagerState } = useFleetManagerContext();\r\n\r\n const distinctSelectedVehicleVehicleAssignmentKeys = selectedVehicleAssignmentKeys.filter(\r\n (key, index, list) => list.findIndex(item => parseVehicleAssignmentId(item) === parseVehicleAssignmentId(key)) === index\r\n );\r\n\r\n const vehicleAssignmentCount = distinctSelectedVehicleVehicleAssignmentKeys.length == 0 ? 1 : distinctSelectedVehicleVehicleAssignmentKeys.length;\r\n const warningText = t(\"warning\", { count: vehicleAssignmentCount });\r\n const warningDetails = t(\"details\", { count: vehicleAssignmentCount });\r\n\r\n const getSelectedVehicleAssignemntId = (): string => {\r\n const { vehicleAssignmentId } = parseAssignedParkingRowKey(fleetManagerState.selectedVehicleAssignment!.rowKey);\r\n return vehicleAssignmentId;\r\n }\r\n\r\n const handleDeleteCancellation = () => {\r\n toggleDeleteVehicleAssignmentsWarning();\r\n }\r\n\r\n const handleSuccessfulDelete = (model: VehicleAssignmentProduct[]) => {\r\n setSelectedParkingRightIds([]);\r\n toggleDeleteVehicleAssignmentsWarning();\r\n if (fleetManagerState.isEditVehicleAssignmentMode && fleetManagerState.showAssignVehicle) {\r\n toggleEditVehicleAssignment();\r\n }\r\n\r\n onRefresh(model, true);\r\n }\r\n\r\n const handleDeleteConfirmation = () => {\r\n const model: DeleteVehicleAssignmentsModel =\r\n {\r\n vehicleAssignmentIds: distinctSelectedVehicleVehicleAssignmentKeys.length > 0 ?\r\n distinctSelectedVehicleVehicleAssignmentKeys.map(vehicleAssignmentKey => parseVehicleAssignmentId(vehicleAssignmentKey)) :\r\n [getSelectedVehicleAssignemntId()]\r\n }; \r\n\r\n const vehicleAssignments: VehicleAssignmentProduct[] = distinctSelectedVehicleVehicleAssignmentKeys.length > 0 ? \r\n distinctSelectedVehicleVehicleAssignmentKeys.map(vehicleAssignmentKey => parseAssignedParkingRowKey(vehicleAssignmentKey)) : \r\n [parseAssignedParkingRowKey(fleetManagerState.selectedVehicleAssignment!.rowKey)];\r\n\r\n deleteVehicleAssignments(model, vehicleAssignments, () => handleSuccessfulDelete(vehicleAssignments));\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { parkingProducts } = state;\r\n\r\n return {\r\n parkingProducts,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n deleteVehicleAssignments: (model: DeleteVehicleAssignmentsModel, vehicleAssignments: VehicleAssignmentProduct[], callback: (vehiclesToExclude?: VehicleAssignmentProduct[]) => void) =>\r\n dispatch(parkingProductsActions.deleteVehicleAssignments(model, () => callback(vehicleAssignments)))\r\n});\r\n\r\ntype StateProps = ReturnType;\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DeleteVehicleAssignmentWarning);\r\n","import { useState } from \"react\";\r\n\r\ntype SmartState = {\r\n state: TState;\r\n updateState: (newState: TState) => void;\r\n resetState: () => void;\r\n};\r\n\r\nconst useSmartState = (initialState: TState): SmartState => {\r\n const [state, setState] = useState(initialState);\r\n\r\n const updateState = (newState: TState): void =>\r\n setState({\r\n ...state,\r\n ...newState,\r\n });\r\n\r\n const resetState = (): void => setState(initialState);\r\n\r\n return {\r\n state,\r\n updateState,\r\n resetState,\r\n };\r\n};\r\n\r\nexport default useSmartState;\r\n","import React from \"react\";\r\nimport styled from \"styled-components\";\r\n\r\nconst ImgBg: React.FC = (props) => {\r\n return ;\r\n};\r\n\r\nconst ImgBgContainer = styled.div`\r\n background-image: ${({ src }: ImgBgProps) => `url(${src})`};\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n background-size: cover;\r\n height: 100%;\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n`;\r\n\r\ninterface ImgBgProps {\r\n src?: string;\r\n}\r\n\r\nexport default ImgBg;\r\n","var _path;\nconst _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }\nimport React from \"react\";\nconst SvgRefreshIcon = _ref => {\n let {\n svgRef,\n title\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 12.805,\n height: 12.797,\n viewBox: \"0 0 12.805 12.797\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_15760\",\n \"data-name\": \"Path 15760\",\n d: \"M5.391-5.679a.3.3,0,0,0,.3-.3V-7.2a.3.3,0,0,0-.3-.3H2.9A4.461,4.461,0,0,1,6.508-9.344a4.466,4.466,0,0,1,4.469,4.469A4.466,4.466,0,0,1,6.508-.406a4.452,4.452,0,0,1-2.961-1.12.3.3,0,0,0-.416.013l-.862.862a.305.305,0,0,0,.012.442,6.274,6.274,0,0,0,4.228,1.63,6.3,6.3,0,0,0,6.3-6.283,6.282,6.282,0,0,0-6.25-6.31A6.28,6.28,0,0,0,1.828-9.087V-11.07a.3.3,0,0,0-.3-.3H.3a.3.3,0,0,0-.3.3v5.087a.3.3,0,0,0,.3.3Z\",\n transform: \"translate(0 11.375)\",\n fill: \"#cbcbd1\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgRefreshIcon, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/refresh-icon.edaf80c0.svg\";\nexport { ForwardRef as ReactComponent };","export enum DelegeeFileType {\r\n Validation = 0,\r\n Invitation = 1,\r\n}","import React, { useState } from \"react\";\r\nimport { useDownloadFile } from \"./useDownloadFile\";\r\nimport MuiAlert from \"@material-ui/lab/Alert\";\r\nimport CustomButton from \"../../ui/CustomButton/CustomButton\";\r\nimport parkingProductsService from \"../../services/parkingProducts.service\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { format } from \"date-fns\";\r\nimport { DelegeeFileType } from \"./DelegeeFileType.enum\";\r\n\r\nconst DownloadDelegeeFile: React.FC = (props) => {\r\n \r\n const [showError, setShowError] = useState(false);\r\n const [error, setError] = useState();\r\n const { t } = useTranslation([\"downloadFile\"]);\r\n\r\n const onErrorDownloadFile = (message: string) => {\r\n setShowError(true);\r\n setError(message);\r\n setTimeout(() => {\r\n setShowError(false);\r\n }, 3000); \r\n };\r\n \r\n const getFileName = () => props.delegeeFileType === DelegeeFileType.Invitation \r\n ? `invitation_errors-${format(new Date(), 'dd-MM-yyyy-HHmm')}.csv` \r\n : `validation_errors-${format(new Date(), 'dd-MM-yyyy-HHmm')}.csv`;\r\n const getSeasonTicketOwnerCrmId = () => props.seasonTicketOwnerCrmId;\r\n const getFileReference = () => props.fileReference;\r\n const getLanguage = () => props.language;\r\n const delegeeFileType: DelegeeFileType = props.delegeeFileType;\r\n\r\n const { download } = useDownloadFile({\r\n downloadValidationRequest: () => parkingProductsService.getDelegeesValidationResult(props.seasonTicketOwnerCrmId, props.fileReference, props.language!),\r\n downloadInvitationRequest: () => parkingProductsService.getDelegeesInvitationResult(props.seasonTicketOwnerCrmId, props.fileReference, props.language!),\r\n onError: onErrorDownloadFile,\r\n getFileName,\r\n getSeasonTicketOwnerCrmId,\r\n getFileReference,\r\n getLanguage,\r\n delegeeFileType\r\n });\r\n\r\n return (\r\n
\r\n {showError &&\r\n \r\n {t(\"downloadError\", {error: error})}\r\n \r\n }\r\n\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\ninterface IDownloadDelegeeFile {\r\n seasonTicketOwnerCrmId: string;\r\n fileReference: string;\r\n language?: string;\r\n delegeeFileType: DelegeeFileType;\r\n}\r\n\r\nexport default DownloadDelegeeFile;","import { AxiosError, AxiosResponse } from \"axios\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { DelegeeFileType } from \"./DelegeeFileType.enum\";\r\n\r\ninterface DownloadFileProps {\r\n readonly downloadValidationRequest: (seasonTicketOwnerCrmId : string, fileReference: string, language: string) => Promise>;\r\n readonly downloadInvitationRequest: (seasonTicketOwnerCrmId : string, fileReference: string, language: string) => Promise>;\r\n readonly onError: (error: string) => void;\r\n readonly getFileName: () => string;\r\n readonly getSeasonTicketOwnerCrmId: () => string;\r\n readonly getFileReference: () => string;\r\n readonly getLanguage: () => string | undefined;\r\n readonly delegeeFileType: DelegeeFileType;\r\n}\r\n\r\ninterface DownloadedFileInfo {\r\n readonly download: () => Promise;\r\n}\r\n\r\nexport const useDownloadFile = ({\r\n downloadValidationRequest,\r\n downloadInvitationRequest,\r\n onError,\r\n getFileName,\r\n getSeasonTicketOwnerCrmId,\r\n getFileReference,\r\n getLanguage,\r\n delegeeFileType\r\n}: DownloadFileProps): DownloadedFileInfo => {\r\n\r\n let downloadRequest = delegeeFileType === DelegeeFileType.Invitation \r\n ? downloadInvitationRequest(getSeasonTicketOwnerCrmId(), getFileReference(), getLanguage()!) \r\n : downloadValidationRequest(getSeasonTicketOwnerCrmId(), getFileReference(), getLanguage()!);\r\n \r\n\r\n const { t } = useTranslation([\"downloadFile\"]);\r\n const download = () => downloadRequest\r\n .then((response: AxiosResponse) => {\r\n const data = response.data;\r\n if (data.size === 0) {\r\n onError(t(\"invalidFileReference\"));\r\n }\r\n else {\r\n // Add encoding for deserializing punctuation marks correctly, ex: déjà-> déjà\r\n const url = URL.createObjectURL(new Blob([new Uint8Array([0xEF, 0xBB, 0xBF]),data],{ type: \"text/plain;charset=utf-8\" }));\r\n const link = document.createElement(\"a\");\r\n link.href = url;\r\n link.download = getFileName();\r\n document.body.appendChild(link);\r\n\r\n link.click();\r\n\r\n document.body.removeChild(link);\r\n window.URL.revokeObjectURL(url);\r\n } \r\n })\r\n .catch((error: AxiosError) => {\r\n if (error.response?.status === 400) {\r\n onError(t(\"invalidFileReference\"));\r\n }\r\n else {\r\n onError(error.message);\r\n } \r\n })\r\n\r\n return { download };\r\n};","import React, { memo, useEffect, useRef, useState } from \"react\";\r\nimport { NoPaddingBottomGrid } from \"../DataTable/DataTableStyledComponents\";\r\nimport CircleImage from \"../../ui/CircleImage/CircleImage\";\r\nimport XlsFileAdd from \"../../assets/images/xls-file-add.svg\";\r\nimport XlsFileDropping from \"../../assets/images/xls-file-dropping.svg\";\r\nimport XlsFileEmpty from \"../../assets/images/xls-file-empty.svg\";\r\nimport XlsFileChecked from \"../../assets/images/xls-file-checked.svg\";\r\nimport { variables } from \"../../theme/variables\";\r\nimport Heading from \"../../ui/Heading/Heading\";\r\nimport ImgBg from \"../../ui/ImgBg/ImgBg.\";\r\nimport { contains, first } from \"underscore\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport Spacer from \"../../ui/Spacer/Spacer\";\r\nimport CustomButton from \"../../ui/CustomButton/CustomButton\";\r\nimport { ReactComponent as RefreshIcon } from \"../../assets/images/refresh-icon.svg\";\r\nimport \"../../scss/_dragAndDrop.scss\";\r\nimport DownloadDelegeeFile from \"../DownloadFile/DownloadDelegeeFile\";\r\nimport useAppContext from \"../../context/hooks/useAppContext\";\r\nimport { GeneralValidationError } from \"../../models/bulkImport/ValidateDelegeesResponseModel\";\r\nimport { DelegeeFileType } from \"../DownloadFile/DelegeeFileType.enum\";\r\n\r\nconst { typography } = variables;\r\n\r\nconst DragAndDrop: React.FC = (props) => {\r\n const { t } = useTranslation([\"dragAndDrop\"]);\r\n const [state, setState] = useState(props.state);\r\n const { appState } = useAppContext();\r\n\r\n const fileInput = useRef(null);\r\n const maxRecordsNumberFallback = 200;\r\n const maxFileSizeInMBFallBack = 2;\r\n const bytesPerMB = 1000000;\r\n\r\n useEffect(() => {\r\n if (props.state !== state) {\r\n setState(props.state);\r\n }\r\n if (props.state === \"default\" && fileInput.current) {\r\n fileInput.current.files = null;\r\n fileInput.current.value = \"\";\r\n }\r\n }, [props.state]);\r\n\r\n const handleFileSelected = (e: React.ChangeEvent) => {\r\n const isValid = isValidDrop(e.target.files as FileList);\r\n\r\n if (props.onFileDropped) {\r\n props.onFileDropped(isValid);\r\n }\r\n\r\n if (!isValid) {\r\n setState(\"error\");\r\n return;\r\n }\r\n\r\n const file = first(e.target.files as FileList) as File;\r\n setState(\"processing\");\r\n\r\n props.onFileUploaded(file);\r\n\r\n if (fileInput.current) {\r\n fileInput.current.value = \"\";\r\n }\r\n };\r\n\r\n const handleDragOver = (e: React.DragEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n };\r\n\r\n const handleDragEnter = (e: React.DragEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (state === \"processing\") return;\r\n\r\n if (e.dataTransfer.items && e.dataTransfer.items.length > 0) {\r\n setState(\"dragging\");\r\n }\r\n };\r\n\r\n const handleDragLeave = (e: React.DragEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n setState(\"default\");\r\n };\r\n\r\n const handleDrop = (e: React.DragEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (state === \"processing\") return;\r\n\r\n const isValid = isValidDrop(e.dataTransfer.files);\r\n if (props.onFileDropped) {\r\n props.onFileDropped(isValid);\r\n }\r\n\r\n if (!isValid) {\r\n setState(\"error\");\r\n return;\r\n }\r\n\r\n const file = first(e.dataTransfer.files) as File;\r\n setState(\"processing\");\r\n\r\n props.onFileUploaded(file);\r\n };\r\n\r\n const isValidDrop = (files: FileList): boolean => {\r\n if (files.length > 1) {\r\n return false;\r\n }\r\n\r\n const file = first(files);\r\n if (!isSupportedFileType((file as File)?.type)) {\r\n return false;\r\n }\r\n\r\n if (file!.size > (props.maxFileSizeInMB ?? maxFileSizeInMBFallBack) * bytesPerMB) {\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n const isSupportedFileType = (fileType: string): boolean =>\r\n contains(props.supportedFileTypes, fileType);\r\n\r\n const getImgWrapperSrc = () => {\r\n switch (state) {\r\n case \"error\":\r\n return XlsFileEmpty;\r\n case \"success\":\r\n return XlsFileChecked;\r\n default:\r\n return XlsFileAdd;\r\n }\r\n };\r\n\r\n const hasValidateDelegeeErrors = () => {\r\n return (\r\n props.error === \"invalid\" &&\r\n (props.invalidDelegeesCount !== undefined ||\r\n props.validateDelegeesErrorCode !== undefined ||\r\n props.generalValidationErrors !== undefined)\r\n );\r\n };\r\n\r\n const getErrorHeading = () => {\r\n if (props.error === \"empty\") {\r\n return t(\"emptyFileDetected\");\r\n }\r\n if (props.error === \"maxRecords\") {\r\n return t(\"tooManyRecords\");\r\n }\r\n return hasValidateDelegeeErrors() ? t(\"validatedelegeeError\") : t(\"dragAndDropHere\");\r\n };\r\n\r\n const getErrorContent = () => {\r\n if (props.error === \"empty\") {\r\n return (\r\n
\r\n \r\n {t(\"emptyFileUploaded\")}\r\n \r\n
\r\n fileInput.current?.click()}\r\n startIcon={}\r\n text={t(\"globals:tryAgain\")}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n if (props.error === \"maxRecords\") {\r\n return t(\"tooManyRecordsContent\", {\r\n maxRecords: props.maxRecordsNumber ?? maxRecordsNumberFallback,\r\n });\r\n }\r\n if (hasValidateDelegeeErrors()) {\r\n const parkingRightsExceededErrors = props.generalValidationErrors?.filter(\r\n (e) => e.errorCode == \"NotEnoughParkingRights\"\r\n );\r\n const noDelegeesError = props.generalValidationErrors?.filter(\r\n (e) => e.errorCode == \"NoDelegees\"\r\n )[0];\r\n const fleetManagerInfoMissingError = props.generalValidationErrors?.filter(\r\n (e) => e.errorCode == \"FleetManagerInfoMissing\"\r\n )[0];\r\n return (\r\n <>\r\n {parkingRightsExceededErrors?.map((e) => (\r\n \r\n {t(\"parkingRightsExceededError\", {\r\n numberOfMissingParkingRights:\r\n e.additionalInformation[\"NumberOfMissingParkingRights\"],\r\n })}\r\n
\r\n
\r\n ))}\r\n {noDelegeesError !== undefined && (\r\n \r\n {t(\"emptyFileDetected\")}\r\n
\r\n
\r\n )}\r\n {fleetManagerInfoMissingError !== undefined && (\r\n \r\n {t(\"fleetManagerInfoMissing\")}\r\n
\r\n
\r\n )}\r\n {props.invalidDelegeesCount !== undefined && props.invalidDelegeesCount > 0 && (\r\n
\r\n \r\n {t(\"validatedelegeeDetailsError\", {\r\n errorsCount: props.invalidDelegeesCount,\r\n })}\r\n \r\n \r\n \r\n \r\n
\r\n )}\r\n \r\n );\r\n }\r\n return (\r\n \r\n {t(\"or\")} \r\n {t(\"browseFiles\")}\r\n \r\n );\r\n };\r\n\r\n return (\r\n
\r\n \r\n {state !== \"success\" &&\r\n props.error !== \"invalid\" && (\r\n \r\n )}\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n {hasValidateDelegeeErrors() ? t(\"validatedelegeeError\") : t(\"dragAndDropHere\")}\r\n \r\n
\r\n {\r\n \r\n {t(\"or\")} \r\n {t(\"browseFiles\")}\r\n \r\n }\r\n
\r\n
\r\n
\r\n \r\n {getErrorHeading()}\r\n \r\n {getErrorContent()}\r\n
\r\n
\r\n {t(\"successFile\")}\r\n {props.extraSuccessMsg && (\r\n <>\r\n
\r\n {props.extraSuccessMsg}\r\n \r\n )}\r\n
\r\n
\r\n \r\n {t(\"releaseFile\")}\r\n \r\n {t(\"releaseFileSubtitle\")}\r\n
\r\n
\r\n \r\n {t(\"processingFile\")}\r\n \r\n {t(\"processingFileSubtitle\")}\r\n
\r\n \r\n \r\n
\r\n
\r\n {hasValidateDelegeeErrors() ? (\r\n <>\r\n ) : (\r\n
\r\n \r\n \r\n {props.maxRecordsNumber ? (\r\n \r\n {t(\"acceptedFileTypesWithMaximumRecords\", { maxRecords: props.maxRecordsNumber })}\r\n \r\n ) : (\r\n {t(\"acceptedFileTypes\")}\r\n )}\r\n \r\n \r\n {t(\"multipleFilesNotSupported\")}\r\n \r\n {props.showMaxFileSize && (\r\n \r\n \r\n {t(\"maxFileSize\", {\r\n maxFileSize: props.maxFileSizeInMB ?? maxFileSizeInMBFallBack,\r\n })}\r\n \r\n \r\n )}\r\n \r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport type DndState = \"default\" | \"dragging\" | \"error\" | \"processing\" | \"success\";\r\n\r\nexport type DndError = \"empty\" | \"invalid\" | \"maxRecords\" | \"moreThanAvailable\";\r\n\r\ninterface DragAndDropProps {\r\n onFileUploaded: (file: File) => void;\r\n onFileDropped?: (valid: boolean) => void;\r\n state: DndState;\r\n error?: DndError;\r\n supportedFileTypes: string[];\r\n extraSuccessMsg?: string;\r\n maxRecordsNumber?: string;\r\n maxFileSizeInMB?: number;\r\n seasonTicketOwnerCrmId?: string;\r\n fileReference?: string;\r\n invalidDelegeesCount?: number;\r\n validateDelegeesErrorCode?: string;\r\n generalValidationErrors?: GeneralValidationError[];\r\n showMaxFileSize: boolean;\r\n}\r\n\r\nexport default memo(DragAndDrop);\r\n","import React, { Dispatch, useState } from \"react\";\r\nimport { Container } from \"@material-ui/core\";\r\nimport { KeyboardArrowDown } from \"@material-ui/icons\";\r\nimport { NoPaddingBottomGrid } from \"../../DataTable/DataTableStyledComponents\";\r\nimport Heading from \"../../../ui/Heading/Heading\";\r\nimport { variables } from \"../../../theme/variables\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport DragAndDrop, {\r\n DndError,\r\n DndState,\r\n} from \"../../DragAndDropV2/DragAndDrop\";\r\nimport * as XLSX from \"xlsx\";\r\nimport { DelegeeData } from \"../../../context/store/reducers/importDelegations.reducer\";\r\nimport useImportDelegationsContext from \"../../../context/hooks/useImportDelegationsContext\";\r\nimport { isEmpty } from \"underscore\";\r\nimport { ICheckParkingRight } from \"../../DelegeeForm/ParkingRightsGrid/ParkingRightsGrid\";\r\nimport { connect } from \"react-redux\";\r\nimport parkingProductsActions from \"../../../store/actions/parkingProducts.actions\";\r\nimport useAppContext from \"../../../context/hooks/useAppContext\";\r\nimport { ValidateDelegeesRequestModel } from \"../../../models/bulkImport/ValidateDelegeesRequestModel\";\r\nimport { GeneralValidationError, ValidateDelegeesResponseModel } from \"../../../models/bulkImport/ValidateDelegeesResponseModel\";\r\n\r\nconst { typography } = variables;\r\n\r\nconst dprSheetName = \"Import Delegees\";\r\nconst delegeeEmail = \"Delegee Email Address\";\r\nconst delegeeName = \"Delegee Name\";\r\nconst rowNumber = \"__rowNum__\";\r\n\r\nconst DelegeesImportDragAndDrop: React.FC = (\r\n props\r\n) => {\r\n const [state, setState] = useState(\"default\");\r\n const [error, setError] = useState(undefined);\r\n const [fileReference, setFileReference] = useState();\r\n const [generalValidationErrors, setGeneralValidationErrors] = useState();\r\n const [invalidDelegeesCount, setInvalidDelegeesCount] = useState();\r\n const [validateDelegeesErrorCode, setValidateDelegeesErrorCode] = useState();\r\n const { appState } = useAppContext();\r\n\r\n const { importDelegationsState } = useImportDelegationsContext();\r\n\r\n const { t } = useTranslation([\"delegeeForm\"]);\r\n const supportedFileTypes = [\r\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n \"application/vnd.ms-excel\",\r\n ];\r\n\r\n const handleFileUpload = (file: File) => {\r\n setState(\"processing\");\r\n props.onProcessing(true);\r\n readDelegeesFromXls(file);\r\n };\r\n\r\n const readDelegeesFromXls = (file: File) => {\r\n const reader = new FileReader();\r\n reader.readAsBinaryString(file);\r\n reader.onload = handleUploadedData;\r\n };\r\n\r\n const handleUploadedData = (e: ProgressEvent) => {\r\n const delegeesToImport: DelegeeData[] = [];\r\n\r\n const data = e.target?.result;\r\n const wb = XLSX.read(data, { type: \"binary\" });\r\n\r\n if (wb.SheetNames && wb.SheetNames.includes(dprSheetName)) {\r\n readDataFromExcel(wb, delegeesToImport);\r\n\r\n const fileIsEmpty = isEmpty(delegeesToImport);\r\n if (fileIsEmpty) {\r\n setState(\"error\");\r\n setError(\"empty\");\r\n props.onProcessing(false);\r\n return;\r\n }\r\n\r\n const checkParkingRights = [...importDelegationsState.checkParkingRights];\r\n checkParkingRights.forEach((checkParkingRight) => {\r\n checkParkingRight.right!.totalDelegatedParkingRights! +=\r\n delegeesToImport.length;\r\n });\r\n\r\n props.onCheckedParkingRights(checkParkingRights);\r\n const req: ValidateDelegeesRequestModel = {\r\n delegees: delegeesToImport.map(d => ({ name: d.name.value, emailAddress: d.emailAddress.value, lineNumber: d.lineNumber ?? 0 })),\r\n pmcIds: checkParkingRights.map(pr => pr.right?.pmcId as number),\r\n userEmail: appState.user.email\r\n };\r\n props.validateDelegees(\r\n appState.user.seasonTicketOwnerCrmId as string,\r\n req,\r\n (data) => {\r\n setState(\"success\");\r\n if (!data.hasErrors) {\r\n props.onProcessing(false);\r\n props.onFileProcessed(delegeesToImport);\r\n }\r\n else {\r\n setState(\"error\");\r\n setError(\"invalid\");\r\n\r\n if (data.fileReference) {\r\n setFileReference(data.fileReference);\r\n }\r\n setGeneralValidationErrors(data.generalErrors);\r\n setInvalidDelegeesCount(data.numberOfErrors);\r\n }\r\n },\r\n (errorCode) => {\r\n setState(\"error\");\r\n setError(\"invalid\");\r\n\r\n setValidateDelegeesErrorCode(errorCode)\r\n });\r\n \r\n } else {\r\n setState(\"error\");\r\n setError(\"invalid\");\r\n }\r\n };\r\n\r\n const readDataFromExcel = (wb: XLSX.WorkBook, delegeesToImport: DelegeeData[]) => {\r\n const rows: any[] = XLSX.utils.sheet_to_json(wb.Sheets[dprSheetName]);\r\n rows.forEach((row) => {\r\n if (row[delegeeName] || row[delegeeEmail]) {\r\n let delegee: DelegeeData;\r\n delegee = {\r\n name: { value: row[delegeeName], isValid: true },\r\n emailAddress: { value: row[delegeeEmail], isValid: true },\r\n lineNumber: row[rowNumber] + 1\r\n };\r\n delegeesToImport.push(delegee);\r\n }\r\n });\r\n }\r\n\r\n\r\n if (!props.show) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {error === undefined && (\r\n \r\n \r\n \r\n {t(\"uploadFile\")}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n {t(\"downloadTemplate\")}\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
)}\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n validateDelegees: (\r\n seasonTicketOwnerCrmId: string,\r\n req: ValidateDelegeesRequestModel,\r\n onSuccess: (response: ValidateDelegeesResponseModel) => void,\r\n onError: (errorCode: string) => void) =>\r\n dispatch(parkingProductsActions.validateDelegees(\r\n seasonTicketOwnerCrmId,\r\n req,\r\n onSuccess,\r\n onError))\r\n});\r\n\r\ninterface DelegeesImportDragAndDropProps extends DispatchProps {\r\n show: boolean;\r\n onFileProcessed: (data: DelegeeData[]) => void;\r\n onCheckedParkingRights: (pr: ICheckParkingRight[]) => void;\r\n onProcessing: (processing: boolean) => void;\r\n}\r\n\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(null, mapDispatchToProps)(DelegeesImportDragAndDrop);\r\n","import React from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport Warning from \"./Warning\";\r\nimport useFleetManagerContext from \"../../context/hooks/useFleetManagerContext\";\r\n\r\ninterface IFormProps {\r\n onConfirmation: () => void;\r\n}\r\n\r\nconst CloseImportWarning = ({onConfirmation}: IFormProps) => {\r\n const { t } = useTranslation([\"closeImportWarning\", \"globals\"]);\r\n const { toggleCloseImportWarning } = useFleetManagerContext();\r\n\r\n const handleCloseCancellation = () => {\r\n toggleCloseImportWarning();\r\n };\r\n\r\n const handleCloseConfirmation = () => {\r\n onConfirmation();\r\n toggleCloseImportWarning();\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default CloseImportWarning;\r\n","import { Box, Container, Grid, LinearProgress, Typography } from \"@material-ui/core\";\r\nimport React, { Dispatch, useEffect } from \"react\";\r\nimport { Trans, useTranslation } from \"react-i18next\";\r\nimport CircleImage from \"../../../ui/CircleImage/CircleImage\";\r\nimport XlsFileLoading from \"../../../assets/images/xls-file-loading.svg\"\r\nimport WarningFleet from \"../../../assets/images/warning-fleet.svg\"\r\nimport { NoPaddingBottomGrid } from \"../../DataTable/DataTableStyledComponents\";\r\nimport Heading from \"../../../ui/Heading/Heading\";\r\nimport { variables } from \"../../../theme/variables\";\r\nimport \"./_bulkDelegationView.scss\"\r\nimport parkingProductsActions from \"../../../store/actions/parkingProducts.actions\";\r\nimport { connect } from \"react-redux\";\r\nimport { RootReducer } from \"../../../store/reducers\";\r\nimport useAppContext from \"../../../context/hooks/useAppContext\";\r\nimport { EnvironmentState } from \"../../../store/reducers/environment.reducer\";\r\nimport DownloadDelegeeFile from \"../../DownloadFile/DownloadDelegeeFile\";\r\nimport { DelegeeFileType } from \"../../DownloadFile/DelegeeFileType.enum\";\r\n\r\n\r\nconst BulkDelegationView: React.FC = ({\r\n parkingProducts,\r\n bulkInvitationPollingIntervalInSeconds,\r\n getBulkImportProgress\r\n}) => {\r\n const { t } = useTranslation([\"delegeeForm\"]);\r\n const { typography } = variables;\r\n const { bulkImportProgress } = parkingProducts;\r\n const { appState } = useAppContext();\r\n\r\n const bulkUploadIsFinished = () => {\r\n return bulkImportProgress.progress === 100;\r\n }\r\n\r\n const bulkUploadHasErrors = () => {\r\n return bulkUploadIsFinished() && bulkImportProgress.hasErrors;\r\n }\r\n\r\n const pollBulkImportProgress = () => {\r\n setTimeout(() => {\r\n getBulkImportProgress(appState.user.seasonTicketOwnerCrmId!, parkingProducts.validateDelegees.fileReference!, pollBulkImportProgress)\r\n }, bulkInvitationPollingIntervalInSeconds * 1000)\r\n }\r\n\r\n useEffect(() => { \r\n pollBulkImportProgress();\r\n }, []) \r\n\r\n return (\r\n \r\n { bulkUploadHasErrors() ? (\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n {t(\"failedInvitationsResultHeader\")}\r\n \r\n \r\n }} />\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n ) : (\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n {bulkUploadIsFinished() ? t(\"allInvitationsSent\") : t(\"sendInvitationsInProgress\")}\r\n \r\n \r\n {\r\n bulkUploadIsFinished() ? \r\n ( }} />) : \r\n ( }} />)\r\n } \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {`${Math.round(bulkImportProgress.progress)}%`}\r\n \r\n \r\n
\r\n ) }\r\n
\r\n );\r\n};\r\n\r\nconst getDynamicConfigurationAsNumber = (name: string, environment: EnvironmentState, defaultValue: number): number => {\r\n const stringValue = environment.dynamicConfigurations?.find(\r\n (item) => item.name === name\r\n )?.value;\r\n\r\n return stringValue === undefined ? defaultValue : parseInt(stringValue, 10);\r\n}\r\n\r\ninterface BulkDelegationViewProps extends StateProps, DispatchProps {} \r\n\r\ntype StateProps = ReturnType;\r\ntype DispatchProps = ReturnType;\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { parkingProducts, environment } = state;\r\n const bulkInvitationPollingIntervalInSeconds = getDynamicConfigurationAsNumber(\"BulkInvitationPollingIntervalInSeconds\", environment, 5);\r\n\r\n return {\r\n parkingProducts,\r\n bulkInvitationPollingIntervalInSeconds\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n getBulkImportProgress: (\r\n seasonTicketOwnerCrmId: string,\r\n fileReference: string, \r\n pollBulkImportProgress: () => void\r\n ) =>\r\n dispatch(\r\n parkingProductsActions.getBulkImportProgress(\r\n seasonTicketOwnerCrmId,\r\n fileReference,\r\n pollBulkImportProgress\r\n )\r\n )\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BulkDelegationView);\r\n","import React, { Dispatch, useEffect, useRef } from \"react\";\r\nimport { Container, Button, Stepper, Step, StepLabel } from \"@material-ui/core\";\r\nimport Heading from \"../../ui/Heading/Heading\";\r\nimport { variables } from \"../../theme/variables\";\r\nimport { CloseOutlined } from \"@material-ui/icons\";\r\nimport CustomButton from \"../../ui/CustomButton/CustomButton\";\r\nimport useFleetManagerContext from \"../../context/hooks/useFleetManagerContext\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport useSmartState from \"../../utils/hooks/useSmartState\";\r\nimport DelegeesImportDragAndDrop from \"./DelegeesImportDragAndDrop/DelegeesImportDragAndDrop\";\r\nimport ActionDrawer from \"../../ui/ActionDrawer/ActionDrawer\";\r\nimport CloseDelegeeImportWarning from \"../Warnings/CloseImportWarning\";\r\nimport useImportDelegationsContext from \"../../context/hooks/useImportDelegationsContext\";\r\nimport { DelegeeData } from \"../../context/store/reducers/importDelegations.reducer\";\r\nimport { isEmpty } from \"underscore\";\r\nimport useAppContext from \"../../context/hooks/useAppContext\";\r\nimport { RootReducer } from \"../../store/reducers\";\r\nimport parkingProductsActions from \"../../store/actions/parkingProducts.actions\";\r\nimport { connect } from \"react-redux\";\r\nimport \"../../scss/_uploadView.scss\";\r\nimport BulkDelegationView from \"./BulkDelegationView/BulkDelegationView\";\r\nimport { StartBulkInvitationsRequestModel } from \"../../models/bulkImport/StartBulkInvitationsRequestModel\";\r\n\r\nconst { typography } = variables;\r\n\r\nconst MultipleDelegeesForm: React.FC = ({\r\n onClose,\r\n startBulkInvitations,\r\n validateDelegees,\r\n hasErrors,\r\n bulkImportProgress\r\n}) => {\r\n const executed = useRef(false);\r\n const initialState: DelegeesDndState = {\r\n step: DndStep.FileUpload,\r\n afterWarningConfirmationAction: onClose,\r\n showOnlyErrors: true,\r\n showConfirmationScreen: false,\r\n };\r\n\r\n const { appState } = useAppContext();\r\n const {\r\n importDelegationsState,\r\n setDelegeesData,\r\n setCheckParkingRights,\r\n setProcessing,\r\n } = useImportDelegationsContext();\r\n const {\r\n fleetManagerState,\r\n setDragAndDropView,\r\n toggleCloseImportWarning: toggleCloseDelegeeImportWarning,\r\n } = useFleetManagerContext();\r\n const { t } = useTranslation([\"delegeeForm\", \"globals\"]);\r\n\r\n const { state, updateState } = useSmartState(initialState);\r\n\r\n const goToSelection = () => setDragAndDropView(false);\r\n\r\n const submitDelegees = () => {\r\n const pmcIds = importDelegationsState.checkParkingRights.map(\r\n (pr) => pr.right?.pmcId!\r\n );\r\n\r\n if (validateDelegees.success && validateDelegees.fileReference) {\r\n updateState({ ...state, step: DndStep.BulkInProgress })\r\n startBulkInvitations(appState.user.seasonTicketOwnerCrmId as string, validateDelegees.fileReference, { pmcIds }, () => {\r\n setDelegeesData([]);\r\n });\r\n }\r\n };\r\n\r\n const setAfterWarningConfirmationAction = (\r\n afterWarningConfirmationAction: () => void\r\n ) => updateState({ afterWarningConfirmationAction });\r\n\r\n useEffect(() => {\r\n if (isEmpty(importDelegationsState.data)) {\r\n return;\r\n }\r\n\r\n if (executed.current) {\r\n return;\r\n }\r\n\r\n updateState({\r\n showConfirmationScreen: true,\r\n //step: DndStep.TableData,\r\n });\r\n\r\n executed.current = true;\r\n }, [importDelegationsState.data]);\r\n\r\n const shouldShowDataRemovalWarning = () => {\r\n return (\r\n importDelegationsState.processing ||\r\n (importDelegationsState.data &&\r\n importDelegationsState.data.filter(\r\n (d) => d.name.value !== \"\" || d.emailAddress.value !== \"\"\r\n ).length > 0)\r\n );\r\n };\r\n\r\n const handleOnCloseDelegeeForm = () => {\r\n if (shouldShowDataRemovalWarning()) {\r\n setAfterWarningConfirmationAction(handleCloseDelegeeForm);\r\n toggleCloseDelegeeImportWarning();\r\n return;\r\n }\r\n\r\n handleCloseDelegeeForm();\r\n };\r\n\r\n const resetCheckParkingRights = () => {\r\n const checkParkingRights = [...importDelegationsState.checkParkingRights];\r\n\r\n checkParkingRights.forEach((checkParkingRight, index) => {\r\n const rowsWithValues = importDelegationsState.data.filter(\r\n (d: DelegeeData) => {\r\n return d.name.value || d.emailAddress.value;\r\n }\r\n );\r\n checkParkingRight.right!.totalDelegatedParkingRights! -=\r\n rowsWithValues.length;\r\n });\r\n\r\n setCheckParkingRights(checkParkingRights);\r\n };\r\n\r\n const handleCloseDelegeeForm = () => {\r\n resetCheckParkingRights();\r\n setDelegeesData([]);\r\n onClose();\r\n };\r\n\r\n const executeActionWithPossibleWarning = (action: () => void) => {\r\n if (shouldShowDataRemovalWarning()) {\r\n setAfterWarningConfirmationAction(action);\r\n toggleCloseDelegeeImportWarning();\r\n } else {\r\n action();\r\n }\r\n }\r\n\r\n const handlePreviousAction = () => {\r\n switch (state.step) {\r\n case DndStep.FileUpload:\r\n executeActionWithPossibleWarning(goToSelection)\r\n break;\r\n case DndStep.BulkInProgress:\r\n handleCloseDelegeeForm();\r\n break;\r\n }\r\n };\r\n\r\n const previousActionLabel = () => {\r\n switch (state.step) {\r\n case DndStep.FileUpload:\r\n return t(\"backToSelection\");\r\n case DndStep.BulkInProgress:\r\n return t(\"close\");\r\n }\r\n }\r\n\r\n const isCloseDisabled = () => {\r\n return bulkImportProgress.progress !== 100 && state.step === DndStep.BulkInProgress;\r\n }\r\n\r\n const bulkUploadIsFinished = () => {\r\n return bulkImportProgress.progress === 100;\r\n }\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n \r\n {t(\"addMultipleDelegees\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n DndStep.FileUpload}\r\n >\r\n \r\n \r\n {(\r\n \r\n \r\n \r\n )\r\n }\r\n \r\n \r\n
\r\n
\r\n
\r\n setDelegeesData(data)}\r\n onProcessing={(processing) => setProcessing(processing)}\r\n onCheckedParkingRights={(pr) => setCheckParkingRights(pr)}\r\n />\r\n {\r\n state.step === DndStep.BulkInProgress &&\r\n ()\r\n }\r\n
\r\n
\r\n
\r\n \r\n \r\n {(\r\n isEmpty(d.name.value) && isEmpty(d.emailAddress.value) && hasErrors) ||\r\n state.step === DndStep.BulkInProgress\r\n }\r\n />\r\n )}\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nenum DndStep {\r\n FileUpload = 0,\r\n BulkInProgress = 1,\r\n}\r\n\r\ninterface DelegeesDndState {\r\n step?: DndStep;\r\n afterWarningConfirmationAction?: () => void;\r\n showOnlyErrors?: boolean;\r\n showConfirmationScreen?: boolean;\r\n}\r\n\r\ninterface MultipleDelegeesFormProps extends StateProps, DispatchProps {\r\n onClose: () => void;\r\n}\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const hasErrors = state.parkingProducts.error != null;\r\n const { validateDelegees, bulkImportProgress } = state.parkingProducts;\r\n\r\n return {\r\n validateDelegees,\r\n hasErrors,\r\n bulkImportProgress\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n startBulkInvitations: (\r\n seasonTicketOwnerCrmId: string,\r\n fileReference: string,\r\n request: StartBulkInvitationsRequestModel,\r\n onSuccess: VoidFunction\r\n ) =>\r\n dispatch(\r\n parkingProductsActions.startBulkInvitations(\r\n seasonTicketOwnerCrmId,\r\n fileReference,\r\n request,\r\n onSuccess\r\n )\r\n )\r\n});\r\n\r\ntype StateProps = ReturnType;\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(MultipleDelegeesForm);\r\n","export const importVehiclesTypes = {\r\n SET_VEHICLES_DATA: \"context/SET_VEHICLES_DATA\",\r\n SET_VEHICLES_PROCESSING: \"context/SET_VEHICLES_PROCESSING\",\r\n RESET_VEHICLES: \"context/RESET_VEHICLES\",\r\n SET_SELECTED_PRODUCTS: \"context/SET_SELECTED_PRODUCTS\",\r\n SET_WHITELIST_CHANGES: \"context/SET_WHITELIST_CHANGES\",\r\n};\r\n","import { importVehiclesTypes } from \"../actions/importVehicles.types\";\r\nexport interface EnsureValidValue {\r\n value: T;\r\n isValid: boolean;\r\n errorMessageKey?: vehicleErrorType\r\n}\r\n\r\nexport interface VehicleData {\r\n country: EnsureValidValue;\r\n numberPlate: EnsureValidValue;\r\n description: EnsureValidValue;\r\n lineNumber?: number;\r\n}\r\n\r\nexport interface ImportVehiclesState {\r\n data: VehicleData[];\r\n products: number[];\r\n processing: boolean;\r\n hasWhitelistChanges: boolean;\r\n}\r\n\r\nexport const initialState: ImportVehiclesState = {\r\n data: [],\r\n products: [],\r\n hasWhitelistChanges: false,\r\n processing: false,\r\n};\r\n\r\nexport type ImportVehiclesAction = {\r\n type: string;\r\n payload?: VehicleData | VehicleData[] | number[] | boolean;\r\n};\r\n\r\nexport default (\r\n state: ImportVehiclesState = initialState,\r\n action: ImportVehiclesAction\r\n): ImportVehiclesState => {\r\n switch (action.type) {\r\n case importVehiclesTypes.SET_VEHICLES_DATA:\r\n return {\r\n ...state,\r\n data: action.payload as VehicleData[],\r\n };\r\n case importVehiclesTypes.SET_VEHICLES_PROCESSING:\r\n return {\r\n ...state,\r\n processing: action.payload as boolean,\r\n };\r\n case importVehiclesTypes.SET_SELECTED_PRODUCTS:\r\n return {\r\n ...state,\r\n products: action.payload as number[],\r\n };\r\n case importVehiclesTypes.SET_WHITELIST_CHANGES:\r\n return {\r\n ...state,\r\n hasWhitelistChanges: action.payload as boolean,\r\n };\r\n case importVehiclesTypes.RESET_VEHICLES:\r\n return initialState;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport type vehicleErrorType = \"invalidCountryCode\" | \"invalidNumberPlate\" | \"invalidDescriptionLength\" | \r\n \"invalidGermanNumberPlate\" | \"missingNumberPlate\" | \"missingCountryCode\" | \"duplicatedNumberPlate\";\r\n","import React from \"react\";\r\nimport { createContext, useReducer } from \"react\";\r\nimport { importVehiclesTypes } from \"./store/actions/importVehicles.types\";\r\nimport reducer, {\r\n initialState,\r\n ImportVehiclesState,\r\n VehicleData,\r\n} from \"./store/reducers/importVehicles.reducer\";\r\n\r\ninterface ImportVehiclesContext {}\r\n\r\nexport interface ImportVehiclesContextState {\r\n importVehiclesState: ImportVehiclesState;\r\n setVehicleData: (data: VehicleData[],) => void;\r\n setSelectedProducts: (selectedProducts: number[]) => void;\r\n setWhitelistDeltaChanges: (hasChanges: boolean) => void;\r\n setProcessing: (isProcessing: boolean) => void;\r\n}\r\n\r\nexport const ImportVehiclesCtx =\r\n createContext(\r\n {} as ImportVehiclesContextState\r\n );\r\n\r\nconst ImportVehiclesContextProvider: React.FC = ({\r\n children,\r\n}) => {\r\n const [ImportVehiclesState, dispatch] = useReducer(reducer, initialState);\r\n\r\n const setVehicleData = (data: VehicleData[]) =>\r\n dispatch({\r\n type: importVehiclesTypes.SET_VEHICLES_DATA,\r\n payload: data,\r\n });\r\n\r\n const setSelectedProducts = (selectedProducts: number[]) =>\r\n dispatch({\r\n type: importVehiclesTypes.SET_SELECTED_PRODUCTS,\r\n payload: selectedProducts,\r\n });\r\n\r\n const setWhitelistDeltaChanges = (hasChanges: boolean) =>\r\n dispatch({\r\n type: importVehiclesTypes.SET_WHITELIST_CHANGES,\r\n payload: hasChanges,\r\n });\r\n\r\n const setProcessing = (isProcessing: boolean) =>\r\n dispatch({\r\n type: importVehiclesTypes.SET_VEHICLES_PROCESSING,\r\n payload: isProcessing,\r\n });\r\n\r\n const value: ImportVehiclesContextState = {\r\n importVehiclesState: ImportVehiclesState,\r\n setVehicleData,\r\n setSelectedProducts,\r\n setWhitelistDeltaChanges,\r\n setProcessing,\r\n };\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport default ImportVehiclesContextProvider;\r\n","import { useEffect, useRef } from \"react\";\r\nimport { useAppSelector } from \"../store\";\r\nimport { usePrevious } from \"./usePrevious\";\r\n\r\nexport function useOnBulkImportFinishedCallback(callback: () => void) {\r\n const bulkImportProgress = useAppSelector((s) => s.parkingProducts.bulkImportProgress.progress);\r\n const previousBulkImportProgress = usePrevious(bulkImportProgress);\r\n\r\n // want fresh callback, but don't want to rerun the effect if it changes...\r\n const callbackRef = useRef(callback);\r\n callbackRef.current = callback;\r\n\r\n useEffect(() => {\r\n if (bulkImportProgress === 100 && previousBulkImportProgress !== 100) {\r\n callbackRef.current();\r\n }\r\n }, [bulkImportProgress, previousBulkImportProgress, callbackRef]);\r\n}\r\n","import { useEffect, useRef } from \"react\";\r\n\r\nexport function usePrevious(value: T): T | undefined {\r\n const ref = useRef();\r\n\r\n useEffect(() => {\r\n ref.current = value;\r\n });\r\n\r\n return ref.current;\r\n}\r\n","import { Box, Button } from \"@material-ui/core\";\r\nimport React from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nexport enum TabOption {\r\n FleetMembers = \"fleetMembers\",\r\n Vehicles = \"vehicles\",\r\n}\r\n\r\nexport type TableSwitcherProps = Readonly<{\r\n tab: TabOption;\r\n onChange: (tabOption: TabOption) => void;\r\n getCount: (tabOption: TabOption) => number;\r\n}>;\r\n\r\nconst options = [TabOption.FleetMembers, TabOption.Vehicles];\r\n\r\nfunction TableSwitcher(props: TableSwitcherProps) {\r\n const { t } = useTranslation([\"myProducts\"]);\r\n\r\n return (\r\n \r\n {options.map((option) => (\r\n props.onChange(option)}\r\n >\r\n {t(`tableSwitcher.${option}`, { count: props.getCount(option) })}\r\n \r\n ))}\r\n \r\n );\r\n}\r\n\r\nexport default TableSwitcher;\r\n","import React from \"react\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../theme/variables\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Fonts } from \"../../typography\";\r\n\r\nconst { colors, typography } = variables;\r\nconst { FuturaD } = Fonts;\r\n\r\nexport enum Statuses {\r\n Pending = 0,\r\n Rejected = 1,\r\n Accepted = 2,\r\n Revoked = 3,\r\n}\r\n\r\nexport type Status = 0 | 1 | 2 | 3;\r\n\r\ninterface IDelegeeStatusProps {\r\n type?: Status;\r\n}\r\n\r\ninterface IStatus {\r\n variant: string;\r\n}\r\n\r\nconst StyledStatus = styled.div`\r\n background-color: ${({ variant }: IStatus) => `rgba(${variant}, .1)`};\r\n color: ${({ variant }: IStatus) => `rgb(${variant})`};\r\n font-size: ${typography.fontSizeSmaller};\r\n font-family: ${FuturaD.fontFamily};\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 3px;\r\n border-radius: 500px;\r\n`;\r\n\r\nconst DelegeeStatus = (props: IDelegeeStatusProps) => {\r\n const { type } = props;\r\n\r\n if (type === Statuses.Accepted) {\r\n return ;\r\n }\r\n if (type === Statuses.Pending) {\r\n return ;\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst Active = () => {\r\n const { t } = useTranslation(\"globals\");\r\n\r\n return {t(\"active\")};\r\n};\r\n\r\nconst Pending = () => {\r\n const { t } = useTranslation(\"globals\");\r\n\r\n return (\r\n \r\n {t(\"pending\")}\r\n \r\n );\r\n};\r\n\r\nexport default DelegeeStatus;\r\n","import React, { PropsWithChildren, useRef } from \"react\";\r\nimport CustomCheckbox from \"../../../ui/CustomCheckbox/CustomCheckbox\";\r\nimport {\r\n TableSortLabel,\r\n TableRow,\r\n TableHead,\r\n TableCell,\r\n makeStyles,\r\n} from \"@material-ui/core\";\r\nimport { isUndefined } from \"underscore\";\r\nimport {\r\n KeyboardArrowDownRounded,\r\n KeyboardArrowUpRounded,\r\n UnfoldMoreRounded,\r\n} from \"@material-ui/icons\";\r\nimport { variables } from \"../../../theme/variables\";\r\n\r\nconst { colors } = variables;\r\n\r\nconst useIconStyle = makeStyles({\r\n root: {\r\n width: \"0.7em\",\r\n height: \"0.7em\",\r\n color: colors.lightGray,\r\n },\r\n});\r\n\r\nexport type Order = \"asc\" | \"desc\";\r\n\r\nexport type MultiSelectOption = {\r\n label: string;\r\n value: string | number;\r\n};\r\n\r\nexport interface Column {\r\n id: keyof T;\r\n label: string;\r\n numeric?: boolean;\r\n disablePadding?: boolean;\r\n align?: \"inherit\" | \"left\" | \"center\" | \"right\" | \"justify\";\r\n width?: number;\r\n disableSorting?: boolean;\r\n}\r\n\r\ninterface ITableHeaderProps {\r\n columns: Column[];\r\n numSelected: number;\r\n onRequestSort?: (event: React.MouseEvent, property: keyof T) => void;\r\n onSelectAllClick: (event: React.ChangeEvent) => void;\r\n order?: Order;\r\n orderBy: string;\r\n rowCount: number;\r\n hideActions?: boolean;\r\n hideCheckboxes?: boolean;\r\n}\r\n\r\nconst DataTableHead = (props: PropsWithChildren>) => {\r\n const classes = useIconStyle();\r\n\r\n const {\r\n columns,\r\n order,\r\n orderBy,\r\n numSelected,\r\n rowCount,\r\n hideActions,\r\n onSelectAllClick,\r\n onRequestSort,\r\n hideCheckboxes\r\n } = props;\r\n const orderedBy = useRef(\"\");\r\n\r\n const createSortHandler =\r\n (property: keyof T) => (event: React.MouseEvent) => {\r\n orderedBy.current = property.toString();\r\n\r\n if (!isUndefined(onRequestSort)) {\r\n onRequestSort(event, property);\r\n }\r\n };\r\n\r\n const getSortingIcon = (columnId: keyof T) => {\r\n if (columnId !== orderBy) {\r\n return ;\r\n }\r\n\r\n return order == \"asc\" ? (\r\n \r\n ) : (\r\n \r\n );\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n 0 && numSelected === rowCount,\r\n onChange: onSelectAllClick,\r\n }}\r\n />\r\n \r\n {columns.map((column: Column) => (\r\n \r\n getSortingIcon(column.id)}\r\n >\r\n {column.label}\r\n \r\n \r\n ))}\r\n {!hideActions && }\r\n \r\n \r\n );\r\n};\r\n\r\nDataTableHead.defaultProps = {\r\n order: \"desc\",\r\n};\r\n\r\nexport default DataTableHead;\r\n","import { TableBody, TableCell, TableRow } from \"@material-ui/core\";\r\nimport React from \"react\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../../theme/variables\";\r\nimport CustomSpinner from \"../../../ui/CustomSpinner/CustomSpinner\";\r\n\r\nconst { colors } = variables;\r\n\r\nconst LoadingDataContainer = styled.div`\r\n display: flex;\r\n min-height: 500px;\r\n align-items: center;\r\n justify-content: center;\r\n background-color: ${colors.mostlyWhite};\r\n`;\r\n\r\nconst NoPaddingTableCell = styled(TableCell)`\r\n padding: 0 !important;\r\n`;\r\n\r\ninterface LoadingDataProps {\r\n colSpan: number;\r\n}\r\n\r\nconst LoadingDataBody: React.FC = ({ colSpan }) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default LoadingDataBody;\r\n","import { TableBody, TableCell, TableRow } from \"@material-ui/core\";\r\nimport React from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../../theme/variables\";\r\nimport CircleImage from \"../../../ui/CircleImage/CircleImage\";\r\nimport Heading from \"../../../ui/Heading/Heading\";\r\nimport Spacer from \"../../../ui/Spacer/Spacer\";\r\nimport emptyStateCar from \"../../../assets/images/empty-state-car.svg\";\r\n\r\nconst { colors, typography, breakpoints } = variables;\r\n\r\nconst NoDataContainer = styled.div`\r\n display: flex;\r\n min-height: 500px;\r\n align-items: center;\r\n justify-content: center;\r\n background-color: ${colors.mostlyWhite};\r\n`;\r\n\r\nconst NoDataWrapper = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n max-width: 30%;\r\n\r\n @media screen and (max-width: ${breakpoints.screenMd}) {\r\n max-width: 95%;\r\n }\r\n`;\r\n\r\nconst Span = styled.span`\r\n color: ${colors.darkGraySecondary};\r\n font-size: ${typography.fontSizeBase};\r\n text-align: center;\r\n`;\r\n\r\nconst NoPaddingTableCell = styled(TableCell)`\r\n padding: 0 !important;\r\n`;\r\n\r\ninterface NoDataProps {\r\n colSpan: number;\r\n translationKey: string;\r\n}\r\n\r\nconst NoDataTableBody: React.FC = ({ colSpan, translationKey }) => {\r\n const { t } = useTranslation([\"dataTable\"]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(translationKey + \".noRecords\")}\r\n \r\n \r\n {t(translationKey + \".noRecordsHelp\")}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default NoDataTableBody;\r\n","import React from \"react\";\r\nimport { TableBody, TableRow, TableCell } from \"@material-ui/core\";\r\nimport CustomCheckbox from \"../../../ui/CustomCheckbox/CustomCheckbox\";\r\nimport LoadingDataBody from \"../LoadingDataBody/LoadingDataBody\";\r\nimport { isEmpty } from \"underscore\";\r\nimport NoDataTableBody from \"../NoDataTableBody/NoDataTableBody\";\r\nimport { ActionsIcon, ActionsIconButton } from \"../DataTableStyledComponents\";\r\nimport { useAppSelector } from \"../../../store\";\r\nimport { selectUseFlexBudgetColumn } from \"../../../containers/FleetManager/MyProducts/ParkingRightsDataTable/common\";\r\n\r\nexport interface IDataTableRow {\r\n [rowKey: string]: string | number | [] | any;\r\n disabled?: boolean;\r\n}\r\n\r\ninterface IDataTableBody {\r\n rows: TRow[];\r\n selected: string[];\r\n colSpan: number;\r\n loading?: boolean;\r\n hideActions?: boolean;\r\n actionBtn?: (focusedRow: TRow) => JSX.Element;\r\n handleRowClick: (event: React.MouseEvent, name: string) => void;\r\n handleMenuClick: (\r\n event: React.MouseEvent,\r\n row: TRow\r\n ) => void;\r\n translationOverrideKey: string;\r\n hideCheckboxes?: boolean;\r\n hiddenKeys?: string[];\r\n}\r\n\r\nconst DataTableBody = (props: IDataTableBody) => {\r\n\r\n const useFlexBudgetColumn = useAppSelector(selectUseFlexBudgetColumn);\r\n const isFlexBudgetDisabled = (key: string) => {\r\n return !useFlexBudgetColumn && key == \"remainingFlex\";\r\n }\r\n\r\n const {\r\n rows,\r\n selected,\r\n hideActions,\r\n actionBtn,\r\n handleRowClick,\r\n handleMenuClick,\r\n translationOverrideKey,\r\n hideCheckboxes,\r\n hiddenKeys\r\n } = props;\r\n\r\n const isSelected = (name: string) => selected.indexOf(name) !== -1;\r\n\r\n if (props.loading) {\r\n return ;\r\n }\r\n\r\n if (isEmpty(rows) && !props.loading) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n const stopPropagation = (\r\n event: React.MouseEvent\r\n ) => event.stopPropagation();\r\n\r\n const getActionClickHandler = (row: TRow) => {\r\n return (event: React.MouseEvent) => {\r\n handleMenuClick(event, row);\r\n };\r\n };\r\n\r\n return (\r\n \r\n {rows.map((row, index: number) => {\r\n const keys = Object.keys(row);\r\n const isItemSelected = isSelected(row.rowKey as string);\r\n\r\n return (\r\n ) =>\r\n handleRowClick(event, row.rowKey as string)\r\n }\r\n role=\"checkbox\"\r\n aria-checked={isItemSelected}\r\n tabIndex={-1}\r\n key={`table_row_${index}`}\r\n selected={isItemSelected}\r\n >\r\n \r\n \r\n \r\n\r\n {keys.map((key: string, index: number) => {\r\n if (key === \"rowKey\" || key == \"disabled\" || (hiddenKeys?.length && hiddenKeys.indexOf(key) > -1) || isFlexBudgetDisabled(key)) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {row[key]}\r\n \r\n );\r\n })}\r\n\r\n {!hideActions && (\r\n \r\n {!actionBtn && (\r\n \r\n \r\n \r\n )}\r\n {actionBtn && actionBtn(row)}\r\n \r\n )}\r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nexport default DataTableBody;\r\n","import React from \"react\";\r\nimport Pagination from \"@material-ui/lab/Pagination\";\r\nimport styled from \"styled-components\";\r\nimport { useDataTableContext } from \"../DataTableContext/DataTableContextProvider\";\r\nimport \"./_dataTablePagination.scss\";\r\n\r\nconst StyledPagination = styled(Pagination)`\r\n ul {\r\n li {\r\n &:first-child {\r\n button {\r\n &:after {\r\n content: \"${({ previouslabel }: IDataTablePaginationProps) => previouslabel}\";\r\n margin-left: 5px;\r\n }\r\n }\r\n }\r\n\r\n &:last-child {\r\n button {\r\n &:before {\r\n content: \"${({ nextlabel }: IDataTablePaginationProps) => nextlabel}\";\r\n margin-right: 5px;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n\r\ninterface IDataTablePaginationProps {\r\n count?: number;\r\n previouslabel?: string;\r\n nextlabel?: string;\r\n disabled?: boolean;\r\n}\r\n\r\nconst DataTablePagination = (props: IDataTablePaginationProps) => {\r\n const { state, setPageNumber } = useDataTableContext();\r\n\r\n const onPageChange = (event: React.ChangeEvent, page: number) => {\r\n event.preventDefault();\r\n\r\n setPageNumber(page);\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nDataTablePagination.defaultProps = {\r\n previouslabel: \"Previous\",\r\n nextlabel: \"Next\",\r\n disabled: false,\r\n};\r\n\r\nexport default DataTablePagination;\r\n","import React from \"react\";\r\nimport styled from \"styled-components\";\r\nimport { FormControl, Select, MenuItem } from \"@material-ui/core\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { variables } from \"../../../theme/variables\";\r\nimport { isNaN } from \"underscore\";\r\nimport { useDataTableContext } from \"../DataTableContext/DataTableContextProvider\";\r\n\r\nconst { typography } = variables;\r\n\r\nconst StyledWrapper = styled.div`\r\n display: flex;\r\n align-items: center;\r\n`;\r\n\r\nconst StyledFormControl = styled(FormControl)`\r\n margin-left: 5px;\r\n font-size: ${typography.fontSizeSmaller};\r\n`;\r\n\r\ninterface IDataTablePageSize {\r\n pageSizes?: number[];\r\n defaultPageSize?: number;\r\n disabled?: boolean;\r\n}\r\n\r\nconst DataTablePageSize = (props: IDataTablePageSize) => {\r\n const { pageSizes, defaultPageSize } = props;\r\n const { t } = useTranslation(\"dataTable\");\r\n const { setPageSize, state } = useDataTableContext();\r\n\r\n const onPageSizeChanged = (event: React.ChangeEvent) => {\r\n event.preventDefault();\r\n\r\n const { value } = event.target;\r\n\r\n const pageSize = Number(value);\r\n if (!isNaN(pageSize)) {\r\n setPageSize(pageSize);\r\n } else {\r\n setPageSize(props.defaultPageSize!);\r\n }\r\n };\r\n\r\n return (\r\n \r\n {t(\"pageSize\")}\r\n \r\n \r\n {pageSizes?.map((pageSize: number, index: number) => (\r\n \r\n {pageSize}\r\n \r\n ))}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nDataTablePageSize.defaultProps = {\r\n pageSizes: [10, 25, 50, 100],\r\n defaultPageSize: 25,\r\n disabled: false,\r\n};\r\n\r\nexport default DataTablePageSize;\r\n","import React from \"react\";\r\nimport { SvgIcon } from \"@material-ui/core\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../theme/variables\";\r\n\r\nconst { colors } = variables;\r\n\r\nconst Svg = styled(SvgIcon)`\r\n color: ${colors.grayishBlue.hex};\r\n`;\r\n\r\nconst FilterIcon = () => (\r\n \r\n \r\n \r\n);\r\n\r\nexport default FilterIcon;\r\n","import React from \"react\";\r\nimport { SvgIcon } from \"@material-ui/core\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../theme/variables\";\r\n\r\nconst { colors } = variables;\r\n\r\nconst Svg = styled(SvgIcon)`\r\n color: ${colors.red.hex};\r\n`;\r\n\r\nconst DeleteIcon = () => (\r\n \r\n \r\n \r\n);\r\n\r\nexport default DeleteIcon;\r\n","import React from \"react\";\r\nimport { SvgIcon } from \"@material-ui/core\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../theme/variables\";\r\n\r\nconst { colors } = variables;\r\n\r\nconst Svg = styled(SvgIcon)`\r\n color: ${colors.grayishBlue.hex};\r\n`;\r\n\r\nconst SvgMenu = styled(SvgIcon)`\r\n color: ${colors.grayishBlue.hex}; \r\n margin-right: 0.4rem;\r\n height: 0.9rem;\r\n`;\r\n\r\nconst ForbiddenIcon = () => (\r\n \r\n \r\n \r\n);\r\n\r\nexport const ForbiddenIconMenu = () => (\r\n \r\n \r\n \r\n);\r\n\r\nexport default ForbiddenIcon;\r\n","import React from \"react\";\r\nimport CustomButton from \"../../../ui/CustomButton/CustomButton\";\r\nimport { useDataTableContext } from \"../DataTableContext/DataTableContextProvider\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport FilterIcon from \"../../../ui/Icons/FilterIcon\";\r\nimport DeleteIcon from \"../../../ui/Icons/DeleteIcon\";\r\nimport { variables } from \"../../../theme/variables\";\r\nimport ForbiddenIcon from \"../../../ui/Icons/ForbiddenIcon\";\r\nimport {\r\n NoPaddingBottomGrid,\r\n HorizontalPaddingGrid,\r\n PaddingRightGrid,\r\n PaddingLeftGrid,\r\n} from \"../DataTableStyledComponents\";\r\nimport Heading from \"../../../ui/Heading/Heading\";\r\nimport EllipsedSpan from \"../../../ui/EllipsedSpan/EllipsedSpan\";\r\nimport styled from \"styled-components\";\r\nimport { Menu, MenuItem } from \"@material-ui/core\";\r\nimport KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown';\r\nimport AddIcon from '@material-ui/icons/Add';\r\n\r\n\r\nconst { colors, typography } = variables;\r\n\r\ninterface ToggleButtonProps {\r\n toggled: boolean;\r\n}\r\n\r\nconst ToggleButtonFilters = styled(CustomButton.Light)`\r\n background-color: ${(props: ToggleButtonProps) =>\r\n props.toggled ? `${colors.mostlyWhite}` : `${colors.white}`};\r\n box-shadow: ${(props: ToggleButtonProps) => props.toggled && \"none\"};\r\n`;\r\n\r\ntype DataTableHeadingOptions = {\r\n showHeadingCount?: boolean;\r\n useHeading?: boolean;\r\n};\r\n\r\nexport type DataTableHeadingProps = {\r\n title: string;\r\n count?: number;\r\n options?: DataTableHeadingOptions;\r\n};\r\n\r\ntype DataTableFilteringOptions = {\r\n useFilters?: boolean;\r\n};\r\n\r\nexport type DataTableFiltering = {\r\n options?: DataTableFilteringOptions;\r\n};\r\n\r\ntype DeleteAction = {\r\n useDelete?: boolean;\r\n showDelete?: boolean;\r\n deleteLabel?: string;\r\n onDeleteClicked?: () => void;\r\n};\r\n\r\ntype RevokeAction = {\r\n useRevoke?: boolean;\r\n showRevoke?: boolean;\r\n revokeLabel?: string;\r\n onRevokeClicked?: () => void;\r\n};\r\n\r\ntype AddAction = {\r\n useAdd?: boolean;\r\n showAdd?: boolean;\r\n addLabel?: string;\r\n onAddClicked?: () => void;\r\n};\r\n\r\nexport type MenuAction = {\r\n useMenu?: boolean;\r\n showMenu?: boolean;\r\n menuItems?: MenuActionItem[];\r\n};\r\n\r\ntype MenuActionItem = {\r\n label: string;\r\n icon?: React.ReactNode;\r\n action?: () => void;\r\n};\r\n\r\ntype DataTableActionsOptions = {\r\n useActions?: boolean;\r\n};\r\n\r\nexport type DataTableActions = {\r\n options?: DataTableActionsOptions;\r\n revoke?: RevokeAction;\r\n delete?: DeleteAction;\r\n add?: AddAction;\r\n menu?: MenuAction;\r\n};\r\n\r\ninterface IDataTableHeadingProps {\r\n heading: DataTableHeadingProps;\r\n filtering: DataTableFiltering;\r\n actions: DataTableActions;\r\n}\r\n\r\nconst DataTableHeading: React.FC = ({\r\n heading,\r\n filtering,\r\n actions,\r\n}) => {\r\n const { state, toggleFilters } = useDataTableContext();\r\n const { t } = useTranslation(\"dataTable\");\r\n\r\n const elements: JSX.Element[] = [];\r\n\r\n const [anchorEl, setAnchorEl] = React.useState(null);\r\n const menuOpen = Boolean(anchorEl);\r\n\r\n const openMenu = (event?: React.MouseEvent) => {\r\n setAnchorEl(event!.currentTarget);\r\n };\r\n\r\n const closeMenu = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const executeMenuAction = (action?: () => void) => {\r\n if (action) {\r\n action();\r\n }\r\n closeMenu();\r\n }\r\n\r\n if (heading.options?.useHeading) {\r\n elements.push(\r\n \r\n \r\n \r\n {heading.title}\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n if (filtering.options?.useFilters) {\r\n elements.push(\r\n \r\n \r\n }\r\n onClick={toggleFilters}\r\n />\r\n \r\n \r\n );\r\n }\r\n\r\n if (actions.options?.useActions) {\r\n elements.push(\r\n \r\n \r\n {actions.revoke?.useRevoke && actions.revoke?.showRevoke && (\r\n <>\r\n }\r\n />\r\n  \r\n \r\n )}\r\n {actions.delete?.useDelete && actions.delete?.showDelete && (\r\n <>\r\n }\r\n textColor={colors.red.hex}\r\n />\r\n  \r\n \r\n )}\r\n {actions.add?.useAdd && actions.add?.showAdd && (\r\n \r\n )}\r\n {actions.menu?.useMenu && actions.menu?.showMenu && (\r\n
\r\n }\r\n startIcon={}\r\n className=\"menu-action-button\"\r\n />\r\n \r\n {actions.menu.menuItems?.map(menuItem => ( \r\n executeMenuAction(menuItem.action)}\r\n key={menuItem.label}>\r\n {menuItem.icon}\r\n {menuItem.label} \r\n ))}\r\n \r\n
\r\n )}\r\n \r\n
\r\n );\r\n }\r\n\r\n return (\r\n \r\n {elements.map((el, index) => (\r\n {el}\r\n ))}\r\n \r\n );\r\n};\r\n\r\nexport default DataTableHeading;\r\n","import React, { ReactNode, useEffect, useState } from \"react\";\r\nimport Table from \"@material-ui/core/Table\";\r\nimport DataTableHead, { Order } from \"./DataTableHead/DataTableHead\";\r\nimport DataTableBody, { IDataTableRow } from \"./DataTableBody/DataTableBody\";\r\nimport { Column } from \"./DataTableHead/DataTableHead\";\r\nimport DataTablePagination from \"./DataTablePagination/DataTablePagination\";\r\nimport Spacer from \"../../ui/Spacer/Spacer\";\r\nimport { Popper, Paper, MenuList, ClickAwayListener } from \"@material-ui/core\";\r\nimport DataTablePageSize from \"./DataTablePageSize/DataTablePageSize\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport {\r\n StyledTableContainer,\r\n NoPaddingBottomGrid,\r\n StyledDataTableWrapper,\r\n} from \"./DataTableStyledComponents\";\r\nimport DataTableFilters, {\r\n FilterRef,\r\n} from \"./DataTableFilters/DataTableFilters\";\r\nimport { isEmpty, isUndefined } from \"underscore\";\r\nimport DataTableHeading, {\r\n DataTableActions,\r\n DataTableFiltering,\r\n DataTableHeadingProps,\r\n} from \"./DataTableHeading/DataTableHeading\";\r\nimport { useDataTableContext } from \"./DataTableContext/DataTableContextProvider\";\r\nimport \"./_dataTable.scss\";\r\n\r\ninterface IDataTableProps {\r\n heading?: DataTableHeadingProps;\r\n filtering?: DataTableFiltering;\r\n actions?: DataTableActions;\r\n columns: Column[];\r\n rows: TRow[];\r\n orderBy: string;\r\n order: Order;\r\n pages: number;\r\n loading?: boolean;\r\n selectedRowKeys: string[];\r\n actionBtn?: (focusedRow: TRow) => JSX.Element;\r\n onCallback?: () => void;\r\n onFilterClicked?: () => void;\r\n onResetFiltersClicked?: () => void;\r\n onRequestSort?: (event: React.MouseEvent, property: keyof TRow) => void;\r\n setSelectedRowKeys: (selected: string[]) => void;\r\n renderActionMenu: (\r\n focusedRow: TRow | null,\r\n onClose: () => void\r\n ) => ReactNode;\r\n filtersRef?: React.MutableRefObject;\r\n hideWhenNoData?: boolean;\r\n hideActionsMenu?: boolean;\r\n translationOverrideKey: string;\r\n hideCheckBoxes?: boolean;\r\n hiddenKeys?: string[];\r\n subHeading?: ReactNode\r\n}\r\n\r\nconst DataTable = (props: IDataTableProps) => {\r\n const { t } = useTranslation([\"dataTable\"]);\r\n const {\r\n heading,\r\n filtering,\r\n actions,\r\n columns,\r\n rows,\r\n order,\r\n orderBy,\r\n selectedRowKeys,\r\n actionBtn,\r\n onCallback,\r\n setSelectedRowKeys,\r\n onFilterClicked,\r\n onResetFiltersClicked,\r\n onRequestSort,\r\n filtersRef,\r\n hideWhenNoData,\r\n hideActionsMenu,\r\n translationOverrideKey,\r\n hideCheckBoxes,\r\n hiddenKeys,\r\n subHeading,\r\n } = props;\r\n\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n const [focusedRow, setFocusedRow] = useState(null);\r\n const { state, resetFilters } = useDataTableContext();\r\n\r\n useEffect(() => {\r\n return () => resetFilters();\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n const handleSelectAllClick = (event: React.ChangeEvent) => {\r\n if (event.target.checked) {\r\n const newSelecteds = rows.map((n) => n.rowKey);\r\n setSelectedRowKeys(newSelecteds);\r\n\r\n return;\r\n }\r\n\r\n setSelectedRowKeys([]);\r\n };\r\n\r\n const handleRowClick = (event: React.MouseEvent, name: string) => {\r\n event.preventDefault();\r\n\r\n const selectedIndex = selectedRowKeys.indexOf(name);\r\n let newSelected: string[] = [];\r\n\r\n if (selectedIndex === -1) {\r\n newSelected = newSelected.concat(selectedRowKeys, name);\r\n } else if (selectedIndex === 0) {\r\n newSelected = newSelected.concat(selectedRowKeys.slice(1));\r\n } else if (selectedIndex === selectedRowKeys.length - 1) {\r\n newSelected = newSelected.concat(selectedRowKeys.slice(0, -1));\r\n } else if (selectedIndex > 0) {\r\n newSelected = newSelected.concat(\r\n selectedRowKeys.slice(0, selectedIndex),\r\n selectedRowKeys.slice(selectedIndex + 1)\r\n );\r\n }\r\n\r\n setSelectedRowKeys(newSelected);\r\n };\r\n\r\n const handleMenuClick = (\r\n event: React.MouseEvent,\r\n row: TRow\r\n ) => {\r\n setSelectedRowKeys([]);\r\n setAnchorEl(event.currentTarget);\r\n setFocusedRow(row);\r\n };\r\n\r\n const handleMenuClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const open = Boolean(anchorEl);\r\n\r\n useEffect(() => {\r\n if (!isUndefined(onCallback)) {\r\n onCallback();\r\n }\r\n }, [onCallback]);\r\n\r\n return (\r\n \r\n \r\n {subHeading && (\r\n <>\r\n \r\n {subHeading}\r\n \r\n )}\r\n \r\n {isEmpty(rows) && hideWhenNoData ? null : (\r\n <>\r\n \r\n {!isUndefined(filtering) && filtering.options?.useFilters && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {!hideActionsMenu && (\r\n \r\n \r\n \r\n {props.renderActionMenu(focusedRow, handleMenuClose)}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default DataTable;\r\n","import { MenuItem } from \"@material-ui/core\";\r\nimport React, { Dispatch, ReactNode, useCallback, useEffect, useRef } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { connect } from \"react-redux\";\r\nimport { IDataTableRow } from \"../../../components/DataTable/DataTableBody/DataTableBody\";\r\nimport {\r\n EditIcon,\r\n ResendInvitationIcon,\r\n DeleteDelegeeMenuItem,\r\n DeleteDelegeeIcon,\r\n NoPaddingGrid,\r\n} from \"./StyledComponents\";\r\nimport useAppContext from \"../../../context/hooks/useAppContext\";\r\nimport parkingProductsActions from \"../../../store/actions/parkingProducts.actions\";\r\nimport useFleetManagerContext from \"../../../context/hooks/useFleetManagerContext\";\r\nimport DataTable from \"../../../components/DataTable/DataTable\";\r\nimport \"./_fleetManagerTable.scss\";\r\nimport {\r\n DataTableActions,\r\n DataTableFiltering,\r\n DataTableHeadingProps,\r\n} from \"../../../components/DataTable/DataTableHeading/DataTableHeading\";\r\nimport { Column, Order } from \"../../../components/DataTable/DataTableHead/DataTableHead\";\r\nimport \"./_fleetManagerTable.scss\";\r\nimport { useDataTableContext } from \"../../../components/DataTable/DataTableContext/DataTableContextProvider\";\r\nimport { isEmpty } from \"underscore\";\r\nimport { FilterRef } from \"../../../components/DataTable/DataTableFilters/DataTableFilters\";\r\nimport { ForbiddenIconMenu } from \"../../../ui/Icons/ForbiddenIcon\";\r\n\r\nexport interface IFleetManagerDataTableModel extends IDataTableRow {\r\n name: string;\r\n email: string;\r\n invitationDate: string;\r\n remainingFlex?: string;\r\n status: JSX.Element;\r\n}\r\n\r\ninterface IFleetManagerDataTable extends DispatchProps {\r\n columns: Column[];\r\n rows: IFleetManagerDataTableModel[];\r\n heading: DataTableHeadingProps;\r\n actions: DataTableActions;\r\n filtering: DataTableFiltering;\r\n totalPages: number;\r\n isLoading: boolean;\r\n orderBy: string;\r\n order: Order;\r\n hideWhenNoData?: boolean;\r\n hideActionsMenu?: boolean;\r\n onSort?: (\r\n event: React.MouseEvent,\r\n property: keyof IFleetManagerDataTableModel\r\n ) => void;\r\n getRegistrationIdFromTableRow: (\r\n focusedRow: IDataTableRow | null\r\n ) => string | null;\r\n isResendInviteDisabled: (focusedRow: IDataTableRow | null) => boolean;\r\n onFilterClicked?: () => void;\r\n onResetFiltersClicked?: () => void;\r\n translationOverrideKey: string;\r\n subHeading?: ReactNode\r\n}\r\n\r\nconst FleetManagerDataTable = (props: IFleetManagerDataTable) => {\r\n const {\r\n columns,\r\n rows,\r\n heading,\r\n filtering,\r\n actions,\r\n totalPages,\r\n isLoading,\r\n orderBy,\r\n order,\r\n onSort,\r\n getRegistrationIdFromTableRow,\r\n isResendInviteDisabled,\r\n onFilterClicked,\r\n onResetFiltersClicked,\r\n hideWhenNoData,\r\n hideActionsMenu,\r\n translationOverrideKey,\r\n subHeading\r\n } = props;\r\n const { t } = useTranslation([\"fleetManagerTable\", \"globals\", \"dataTable\"]);\r\n const {\r\n fleetManagerState,\r\n toggleEditDelegee,\r\n toggleRevokeParkingRightsWarning,\r\n setSelectedRegistrationId,\r\n setSelectedParkingRightIds,\r\n setSelectedDelegeeRowKey,\r\n toggleDeleteDelegeeWarning,\r\n } = useFleetManagerContext();\r\n const { appState } = useAppContext();\r\n const { state } = useDataTableContext();\r\n const filtersRef = useRef({\r\n onFilterClicked: () => setSelectedParkingRightIds([]),\r\n } as FilterRef);\r\n\r\n const handleEditClick = (focusedRow: IDataTableRow | null) => {\r\n const registrationId = getRegistrationIdFromTableRow(focusedRow) || \"\";\r\n toggleEditDelegee(registrationId);\r\n };\r\n\r\n const handleDeleteClick = (focusedRow: IDataTableRow | null) => {\r\n const registrationId = getRegistrationIdFromTableRow(focusedRow) || \"\";\r\n setSelectedRegistrationId(registrationId);\r\n toggleDeleteDelegeeWarning();\r\n };\r\n\r\n const handleRevokeClick = (focusedRow: IDataTableRow | null) => {\r\n const registrationId = getRegistrationIdFromTableRow(focusedRow) || \"\";\r\n setSelectedRegistrationId(registrationId);\r\n setSelectedDelegeeRowKey(focusedRow?.rowKey || \"\");\r\n toggleRevokeParkingRightsWarning();\r\n };\r\n\r\n const handleResendInviteClick = (\r\n focusedRow: IDataTableRow | null,\r\n handleMenuClose: () => void\r\n ) => {\r\n const registrationId = getRegistrationIdFromTableRow(focusedRow) || \"\";\r\n props.resendDelegeeInvite(\r\n registrationId,\r\n appState.user.seasonTicketOwnerCrmId as string\r\n );\r\n handleMenuClose();\r\n };\r\n\r\n const renderMenuItems = (\r\n focusedRow: IDataTableRow | null,\r\n onClose: () => void\r\n ): JSX.Element[] => {\r\n const editItem = (\r\n handleEditClick(focusedRow)}>\r\n \r\n {t(\"contextMenuActions.editDelegee\")}\r\n \r\n );\r\n const resendInviteItem = (\r\n handleResendInviteClick(focusedRow, onClose)}\r\n disabled={isResendInviteDisabled(focusedRow)}\r\n >\r\n \r\n {t(\"contextMenuActions.resendInvite\")}\r\n \r\n );\r\n const revokeItem = (\r\n handleRevokeClick(focusedRow)}\r\n disabled={!focusedRow?.products}\r\n >\r\n \r\n {t(\"contextMenuActions.revokeDelegee\")}\r\n \r\n );\r\n const deleteItem = (\r\n handleDeleteClick(focusedRow)}\r\n >\r\n \r\n {t(\"contextMenuActions.deleteDelegee\")}\r\n \r\n );\r\n\r\n const menuItems = [editItem, resendInviteItem, revokeItem, deleteItem];\r\n\r\n return menuItems;\r\n };\r\n\r\n const filtersHaveChanged = useCallback(() => {\r\n state.filters?.forEach((filter) => {\r\n if (!isEmpty(filter.value)) {\r\n setSelectedParkingRightIds([]);\r\n }\r\n });\r\n }, [state.filters]);\r\n\r\n useEffect(() => {\r\n filtersHaveChanged();\r\n }, [filtersHaveChanged]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n resendDelegeeInvite: (registrationId: string, seasonTicketOwnerCrmId: string) =>\r\n dispatch(parkingProductsActions.resendDelegeeInvite(registrationId, seasonTicketOwnerCrmId)),\r\n});\r\n\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(null, mapDispatchToProps)(FleetManagerDataTable);\r\n","import { TFunction } from \"i18next\";\r\nimport {\r\n IFilteredColumn,\r\n FilterType,\r\n} from \"../../../../components/DataTable/DataTableFilters/DataTableFilters\";\r\nimport { ISelectOption } from \"../../../../components/DataTable/DataTableFilters/DataTableFilterTypes/SelectFilter\";\r\nimport { Statuses } from \"../../../../components/DelegeeStatus/DelegeeStatus\";\r\nimport {\r\n FmpFilters,\r\n VisitorBookingFilters,\r\n} from \"../../../../constants/filtering.constants\";\r\nimport { VisitorBookingTableModel } from \"../../../Visitors/BookingOverview/VisitorBookingDataTable/VisitorBookingDataTable\";\r\nimport { IDelegeeDataTableModel } from \"../../MyFleet/DelegeesDataTable/DelegeesDataTable\";\r\nimport { VisitorBookingStatus } from \"../../../../models/visitor-booking\";\r\nimport { IParkingRightsDataTableModel } from \"../ParkingRightsDataTable/FleetMembersTable\";\r\n\r\ntype FilteredColumnObjectBuilder = {\r\n buildParkingRightsColumns: (\r\n t: TFunction,\r\n productOptions: ISelectOption[],\r\n useFlexBudgetColumn?: boolean\r\n ) => IFilteredColumn[];\r\n buildVehiclesMyProductsColumns: (\r\n t: TFunction,\r\n productOptions: ISelectOption[],\r\n useFlexBudgetColumn?: boolean\r\n ) => IFilteredColumn[];\r\n buildVehiclesMyFleetColumns: (\r\n t: TFunction,\r\n productOptions: ISelectOption[],\r\n ) => IFilteredColumn[];\r\n buildDelegeesColumns: (\r\n t: TFunction,\r\n productOptions: ISelectOption[],\r\n ) => IFilteredColumn[];\r\n buildVisitorBookingsColumns: (\r\n t: TFunction,\r\n productOptions: ISelectOption[],\r\n facilityOptions: ISelectOption[]\r\n ) => IFilteredColumn[];\r\n};\r\n\r\nconst filteredColumnObjectBuilder: FilteredColumnObjectBuilder = (() => {\r\n const buildStatusFilterSelectOptions = (t: TFunction): ISelectOption[] => {\r\n return [\r\n { label: t(\"globals:active\"), value: Statuses.Accepted },\r\n { label: t(\"globals:pending\"), value: Statuses.Pending },\r\n ];\r\n };\r\n\r\n const buildVisitorBookingStatusFilterSelectOptions = (\r\n t: TFunction\r\n ): ISelectOption[] => {\r\n return [\r\n { label: t(\"globals:booked\"), value: VisitorBookingStatus.Booked },\r\n { label: t(\"globals:cancelled\"), value: VisitorBookingStatus.Cancelled },\r\n { label: t(\"globals:draft\"), value: VisitorBookingStatus.Draft },\r\n ];\r\n };\r\n\r\n const buildInvitationsStatusFilterSelectOptions = (\r\n t: TFunction\r\n ): ISelectOption[] => {\r\n return [\r\n { label: t(\"globals:active\"), value: true },\r\n { label: t(\"globals:pending\"), value: false },\r\n ];\r\n };\r\n\r\n const buildParkingRightsColumns = (\r\n t: TFunction,\r\n productOptions: ISelectOption[],\r\n useFlexBudgetColumn: boolean = false\r\n ): IFilteredColumn[] => {\r\n const columns: IFilteredColumn[] = [\r\n {\r\n id: \"name\",\r\n label: t(\"parkingRightsDataTable.name\"),\r\n width: 200,\r\n enableFiltering: true,\r\n filter: {\r\n type: FilterType.Text,\r\n key: FmpFilters.name,\r\n placeholder: t(\"dataTable:filterOnName\"),\r\n },\r\n },\r\n {\r\n id: \"email\",\r\n label: t(\"parkingRightsDataTable.email\"),\r\n width: 200,\r\n enableFiltering: true,\r\n filter: {\r\n type: FilterType.Text,\r\n key: FmpFilters.email,\r\n placeholder: t(\"dataTable:filterOnEmail\"),\r\n },\r\n },\r\n {\r\n id: \"product\",\r\n label: t(\"parkingRightsDataTable.products\"),\r\n width: 300,\r\n disableSorting: true,\r\n enableFiltering: true,\r\n filter: {\r\n type: FilterType.Multiselect,\r\n key: FmpFilters.products,\r\n placeholder: t(\"dataTable:filterOnProducts\"),\r\n options: productOptions,\r\n },\r\n },\r\n getInvitationDateColumn(t)\r\n ];\r\n\r\n // Order matters so on cleanup put status (below) back above in array at the end.\r\n if (useFlexBudgetColumn) {\r\n columns.push(getRemainingFlex(t));\r\n }\r\n\r\n columns.push({\r\n id: \"status\",\r\n label: t(\"parkingRightsDataTable.status\"),\r\n width: 80,\r\n enableFiltering: true,\r\n filter: {\r\n type: FilterType.Multiselect,\r\n key: FmpFilters.statuses,\r\n placeholder: t(\"dataTable:filterOnStatus\"),\r\n options: buildStatusFilterSelectOptions(t).map((o) => ({\r\n label: o.label,\r\n value: o.value,\r\n })),\r\n },\r\n });\r\n\r\n return columns;\r\n };\r\n\r\n const buildVehiclesMyFleetColumns = (\r\n t: TFunction,\r\n productOptions: ISelectOption[]\r\n ): IFilteredColumn[] => {\r\n const columns: IFilteredColumn[] = [\r\n getVehicleNumberplateColumn(t),\r\n getVehicleDescriptionColumn(t),\r\n getVehicleProductsColumn(t, productOptions),\r\n getAssignedDateColumn(t)\r\n ];\r\n\r\n return columns;\r\n };\r\n\r\n const buildVehiclesMyProductsColumns = (\r\n t: TFunction,\r\n productOptions: ISelectOption[],\r\n useFlexBudgetColumn: boolean = false\r\n ): IFilteredColumn[] => {\r\n const columns: IFilteredColumn[] = [\r\n getVehicleNumberplateColumn(t),\r\n getVehicleDescriptionColumn(t),\r\n getVehicleProductsColumn(t, productOptions),\r\n getAssignedDateColumn(t),\r\n getStartedDateColumn(t)\r\n ];\r\n\r\n if (useFlexBudgetColumn) {\r\n columns.push(getRemainingFlex(t));\r\n }\r\n\r\n return columns;\r\n };\r\n\r\n const getVehicleNumberplateColumn = (t: TFunction): IFilteredColumn => {\r\n return {\r\n id: \"numberPlate\",\r\n label: t(\"vehiclesDataTable.numberPlate\"),\r\n width: 200,\r\n enableFiltering: true,\r\n filter: {\r\n type: FilterType.Text,\r\n key: FmpFilters.numberPlate,\r\n placeholder: t(\"dataTable:filterOnNumberPlate\"),\r\n },\r\n };\r\n }\r\n\r\n const getVehicleDescriptionColumn = (t: TFunction): IFilteredColumn => {\r\n return {\r\n id: \"description\",\r\n label: t(\"vehiclesDataTable.description\"),\r\n width: 200,\r\n enableFiltering: true,\r\n filter: {\r\n type: FilterType.Text,\r\n key: FmpFilters.description,\r\n placeholder: t(\"dataTable:filterOnDescription\"),\r\n },\r\n };\r\n }\r\n\r\n const getVehicleProductsColumn = (t: TFunction, productOptions: ISelectOption[]): IFilteredColumn => {\r\n return {\r\n id: \"product\",\r\n label: t(\"vehiclesDataTable.products\"),\r\n width: 300,\r\n enableFiltering: true,\r\n disableSorting: true,\r\n filter: {\r\n type: FilterType.Multiselect,\r\n key: FmpFilters.products,\r\n placeholder: t(\"dataTable:filterOnProducts\"),\r\n options: productOptions,\r\n },\r\n };\r\n }\r\n\r\n const getAssignedDateColumn = (t: TFunction): IFilteredColumn => {\r\n return {\r\n id: \"assignedDate\",\r\n label: t(\"vehiclesDataTable.assignedDate\"),\r\n width: 200,\r\n enableFiltering: true,\r\n filter: {\r\n type: FilterType.Date,\r\n key: FmpFilters.assignedDate,\r\n placeholder: t(\"dataTable:filterOnAssignedDate\"),\r\n },\r\n }\r\n }\r\n\r\n const getStartedDateColumn = (t: TFunction): IFilteredColumn => {\r\n return {\r\n id: \"startedDate\",\r\n label: t(\"vehiclesDataTable.startedDate\"),\r\n width: 200,\r\n enableFiltering: true,\r\n filter: {\r\n type: FilterType.Date,\r\n key: FmpFilters.startedDate,\r\n placeholder: t(\"dataTable:filterOnStartedDate\"),\r\n },\r\n }\r\n }\r\n\r\n const getRemainingFlex = (t: TFunction): IFilteredColumn => {\r\n return {\r\n id: \"remainingFlex\",\r\n label: t(\"vehiclesDataTable.remainingFlex\"),\r\n width: 200\r\n }\r\n }\r\n\r\n\r\n const getInvitationDateColumn = (t: TFunction): IFilteredColumn => {\r\n return {\r\n id: \"invitationDate\",\r\n label: t(\"parkingRightsDataTable.invitationDate\"),\r\n width: 200,\r\n enableFiltering: true,\r\n filter: {\r\n type: FilterType.Date,\r\n key: FmpFilters.invitationDate,\r\n placeholder: t(\"dataTable:filterOnInvitationDate\"),\r\n },\r\n }\r\n };\r\n\r\n const buildDelegeesColumns = (\r\n t: TFunction,\r\n productOptions: ISelectOption[]\r\n ): IFilteredColumn[] => {\r\n const columns: IFilteredColumn[] = [\r\n {\r\n id: \"name\",\r\n label: t(\"delegeesDataTable.name\"),\r\n width: 200,\r\n enableFiltering: true,\r\n filter: {\r\n type: FilterType.Text,\r\n key: FmpFilters.name,\r\n placeholder: t(\"dataTable:filterOnName\"),\r\n },\r\n },\r\n {\r\n id: \"email\",\r\n label: t(\"delegeesDataTable.email\"),\r\n width: 200,\r\n enableFiltering: true,\r\n filter: {\r\n type: FilterType.Text,\r\n key: FmpFilters.email,\r\n placeholder: t(\"dataTable:filterOnEmail\"),\r\n },\r\n },\r\n {\r\n id: \"products\",\r\n label: t(\"delegeesDataTable.products\"),\r\n width: 300,\r\n disableSorting: true,\r\n enableFiltering: true,\r\n filter: {\r\n type: FilterType.Multiselect,\r\n key: FmpFilters.products,\r\n placeholder: t(\"dataTable:filterOnProducts\"),\r\n options: productOptions,\r\n },\r\n },\r\n {\r\n id: \"invitationDate\",\r\n label: t(\"delegeesDataTable.creationDate\"),\r\n width: 200,\r\n enableFiltering: true,\r\n filter: {\r\n type: FilterType.Date,\r\n key: FmpFilters.invitationDate,\r\n placeholder: t(\"dataTable:filterOnCreationDate\"),\r\n }\r\n },\r\n {\r\n id: \"status\",\r\n label: t(\"delegeesDataTable.status\"),\r\n width: 80,\r\n enableFiltering: true,\r\n filter: {\r\n type: FilterType.Multiselect,\r\n key: FmpFilters.invitationsAccepted,\r\n placeholder: t(\"dataTable:filterOnStatus\"),\r\n options: buildInvitationsStatusFilterSelectOptions(t).map((o) => ({\r\n label: o.label,\r\n value: o.value,\r\n })),\r\n },\r\n },\r\n ];\r\n\r\n return columns;\r\n };\r\n\r\n const buildVisitorBookingsColumns = (\r\n t: TFunction,\r\n productOptions: ISelectOption[],\r\n facilityOptions: ISelectOption[]\r\n ): IFilteredColumn[] => {\r\n const columns: IFilteredColumn[] = [\r\n {\r\n id: \"customerName\",\r\n enableFiltering: true,\r\n label: t(\"visitorBookingsTable.customerName\"),\r\n filter: {\r\n type: FilterType.Text,\r\n key: VisitorBookingFilters.name,\r\n placeholder: t(\"dataTable:filterOnName\"),\r\n },\r\n },\r\n {\r\n id: \"customerEmail\",\r\n enableFiltering: true,\r\n label: t(\"visitorBookingsTable.customerEmailAddress\"),\r\n filter: {\r\n type: FilterType.Text,\r\n key: VisitorBookingFilters.email,\r\n placeholder: t(\"dataTable:filterOnEmail\"),\r\n },\r\n },\r\n {\r\n id: \"facility\",\r\n enableFiltering: true,\r\n label: t(\"visitorBookingsTable.facility\"),\r\n filter: {\r\n type: FilterType.Multiselect,\r\n key: VisitorBookingFilters.facility,\r\n placeholder: t(\"dataTable:selectFacility\"),\r\n options: facilityOptions\r\n },\r\n },\r\n {\r\n id: \"product\",\r\n enableFiltering: true,\r\n label: t(\"visitorBookingsTable.product\"),\r\n width: 200,\r\n filter: {\r\n type: FilterType.Multiselect,\r\n key: VisitorBookingFilters.products,\r\n placeholder: t(\"dataTable:selectProduct\"),\r\n options: productOptions,\r\n },\r\n },\r\n {\r\n id: \"creationDate\",\r\n enableFiltering: true,\r\n label: t(\"visitorBookingsTable.createdAt\"),\r\n filter: {\r\n type: FilterType.Date,\r\n key: VisitorBookingFilters.creationDate,\r\n placeholder: t(\"dataTable:filterOnCreationDate\"),\r\n customDateKeys: {\r\n startKey: 'creationDateRangeStart',\r\n endKey: 'creationDateRangeEnd'\r\n }\r\n },\r\n },\r\n {\r\n id: \"startDateTime\",\r\n enableFiltering: true,\r\n label: t(\"visitorBookingsTable.startDateTime\"),\r\n filter: {\r\n type: FilterType.Date,\r\n key: VisitorBookingFilters.startDate,\r\n placeholder: t(\"dataTable:filterOnStartDate\"),\r\n customDateKeys: {\r\n startKey: 'startDateRangeStart',\r\n endKey: 'startDateRangeEnd'\r\n }\r\n },\r\n },\r\n {\r\n id: \"endDateTime\",\r\n enableFiltering: true,\r\n label: t(\"visitorBookingsTable.endDateTime\"),\r\n filter: {\r\n type: FilterType.Date,\r\n key: VisitorBookingFilters.endDate,\r\n placeholder: t(\"dataTable:filterOnEndDate\"),\r\n customDateKeys: {\r\n startKey: 'endDateRangeStart',\r\n endKey: 'endDateRangeEnd'\r\n }\r\n },\r\n },\r\n {\r\n id: \"statuses\",\r\n label: t(\"visitorBookingsTable.status\"),\r\n enableFiltering: true,\r\n filter: {\r\n type: FilterType.Multiselect,\r\n key: VisitorBookingFilters.statuses,\r\n placeholder: t(\"dataTable:filterOnStatus\"),\r\n options: buildVisitorBookingStatusFilterSelectOptions(t).map((o) => ({\r\n label: o.label,\r\n value: o.value,\r\n })),\r\n },\r\n },\r\n ];\r\n\r\n return columns;\r\n };\r\n\r\n return {\r\n buildParkingRightsColumns,\r\n buildVehiclesMyProductsColumns,\r\n buildVehiclesMyFleetColumns,\r\n buildDelegeesColumns,\r\n buildVisitorBookingsColumns,\r\n };\r\n})();\r\n\r\nexport default filteredColumnObjectBuilder;\r\n","import React, { useEffect, Dispatch, useCallback, ReactNode } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport styled from \"styled-components\";\r\nimport DelegeeStatus, { Statuses } from \"../../../../components/DelegeeStatus/DelegeeStatus\";\r\nimport { RootReducer } from \"../../../../store/reducers\";\r\nimport parkingProductsActions from \"../../../../store/actions/parkingProducts.actions\";\r\nimport { connect } from \"react-redux\";\r\nimport moment from \"moment\";\r\nimport { IDataTableRow } from \"../../../../components/DataTable/DataTableBody/DataTableBody\";\r\nimport useAppContext from \"../../../../context/hooks/useAppContext\";\r\nimport {\r\n DelegatedParkingProductModel,\r\n DelegatedParkingRight,\r\n} from \"../../../../models/delegations/DelegatedParkingProductsModel\";\r\nimport { isUndefined, isNull } from \"underscore\";\r\nimport useMyProductsContext from \"../../../../context/hooks/useMyProductsContext\";\r\nimport FleetManagerDataTable, {\r\n IFleetManagerDataTableModel,\r\n} from \"../../FleetManagerDataTable/FleetManagerDataTable\";\r\nimport useFleetManagerContext from \"../../../../context/hooks/useFleetManagerContext\";\r\nimport { ForFleetManager } from \"../../../../models/ForFleetManager\";\r\nimport { WithFiltersAndPaging } from \"../../../../models/filters/WithFiltersAndPaging\";\r\nimport {\r\n DataTableContextFilters,\r\n useDataTableContext,\r\n} from \"../../../../components/DataTable/DataTableContext/DataTableContextProvider\";\r\nimport filteredColumnObjectBuilder from \"../ObjectBuilders/FilteredColumnObjectBuilder\";\r\nimport { FmpFilters } from \"../../../../constants/filtering.constants\";\r\nimport { FilterType, IFilteredColumn } from \"../../../../components/DataTable/DataTableFilters/DataTableFilters\";\r\nimport { useOnBulkImportFinishedCallback } from \"../../../../hooks/useOnBulkImportFinishedCallback\";\r\nimport { convertToRemainingFlex, ProductChip, selectUseFlexBudgetColumn, selectUseSingleDirectVehicleAssignment, useCurrentlySelectedParkingProduct, useGetOccupiedParkingRightsCount, useProductOptions, useSharedProductsMenuAction } from \"./common\";\r\nimport { useAppSelector } from \"../../../../store\";\r\nimport { isNil } from \"lodash\";\r\nimport { ParkingProductModel } from \"../../../../models/ParkingProductModel\";\r\n\r\nconst Wrapper = styled.div`\r\n display: flex;\r\n flex-flow: row nowrap;\r\n`;\r\n\r\nexport interface IParkingRightsDataTableModel extends IFleetManagerDataTableModel {\r\n product: JSX.Element;\r\n}\r\n\r\ninterface FleetMembersTableProps extends StateProps, DispatchProps {\r\n subHeading?: ReactNode,\r\n selectedParkingProduct: ParkingProductModel[] | undefined;\r\n onRevokeClicked: () => void;\r\n}\r\n\r\nconst getDelegeeStatus = (parkingRight: DelegatedParkingProductModel) => {\r\n return parkingRight.status as Statuses;\r\n};\r\n\r\nconst _createData = (delegatedParkingRight: DelegatedParkingRight): IParkingRightsDataTableModel => {\r\n\r\n return {\r\n rowKey: delegatedParkingRight.parkingRight.parkingRightId,\r\n name: delegatedParkingRight.delegee.name,\r\n email: delegatedParkingRight.delegee.emailAddress,\r\n product: ,\r\n invitationDate: moment(delegatedParkingRight.parkingRight.created).format(\"DD/MM/YYYY\"),\r\n remainingFlex: convertToRemainingFlex(delegatedParkingRight.parkingRight.flexBudgetRemainingTime, delegatedParkingRight.parkingRight.flexBudgetUnitType),\r\n status: ,\r\n };\r\n};\r\n\r\nconst FleetMembersTable = (props: FleetMembersTableProps) => {\r\n const { onRevokeClicked, parkingProducts, selectedParkingProduct, getDelegatedParkingRights } = props;\r\n const { t } = useTranslation([\"myProducts\", \"globals\", \"dataTable\", \"fleetManagerTable\"]);\r\n\r\n const { myProductsState, setSorting } = useMyProductsContext();\r\n const { fleetManagerState } = useFleetManagerContext();\r\n const dataTableContext = useDataTableContext();\r\n const { appState } = useAppContext();\r\n\r\n const { delegatedParkingProducts } = parkingProducts;\r\n\r\n const useSingleDirectVehicleAssignment = useAppSelector(selectUseSingleDirectVehicleAssignment);\r\n const useFlexBudgetColumn = useAppSelector(selectUseFlexBudgetColumn);\r\n const getTotalOccupiedParkingRights = useGetOccupiedParkingRightsCount();\r\n\r\n\r\n const getFilters = (): DataTableContextFilters[] => [\r\n {\r\n key: FmpFilters.placeId,\r\n type: FilterType.QueryParam,\r\n value: myProductsState.selectedLocation.toString(),\r\n },\r\n {\r\n key: FmpFilters.sortBy,\r\n type: FilterType.QueryParam,\r\n value: myProductsState.dataTable.sortBy,\r\n },\r\n {\r\n key: FmpFilters.orderDesc,\r\n type: FilterType.QueryParam,\r\n value: myProductsState.dataTable.orderDesc?.toString(),\r\n },\r\n ...(dataTableContext.state.filters as DataTableContextFilters[])\r\n ];\r\n\r\n const getRequestModel = (): WithFiltersAndPaging => {\r\n const request: WithFiltersAndPaging = {\r\n entity: {\r\n seasonTicketOwnerCrmId: appState.user.seasonTicketOwnerCrmId as string,\r\n language: appState.selectedLanguage,\r\n },\r\n pagination: {\r\n pageSize: dataTableContext.state.pageSize!,\r\n pageNumber: dataTableContext.state.pageNumber!,\r\n },\r\n filters: getFilters(),\r\n };\r\n\r\n return request;\r\n };\r\n\r\n const fetchDelegatedParkingRights = () => {\r\n if (appState.user.seasonTicketOwnerCrmId) {\r\n getDelegatedParkingRights(getRequestModel());\r\n }\r\n };\r\n\r\n useOnBulkImportFinishedCallback(fetchDelegatedParkingRights);\r\n\r\n const memoizedFetch = useCallback(\r\n (): void => fetchDelegatedParkingRights(), // eslint-disable-next-line\r\n [\r\n dataTableContext.state.pageSize,\r\n dataTableContext.state.pageNumber,\r\n myProductsState.dataTable.orderDesc,\r\n myProductsState.dataTable.sortBy,\r\n myProductsState.selectedLocation,\r\n appState.user.seasonTicketOwnerCrmId,\r\n appState.selectedLanguage,\r\n ]\r\n );\r\n\r\n useEffect(() => {\r\n memoizedFetch();\r\n }, [memoizedFetch]);\r\n\r\n const productTableOptions = useProductOptions();\r\n const sharedProductActions = useSharedProductsMenuAction();\r\n\r\n const columns: IFilteredColumn[] = filteredColumnObjectBuilder.buildParkingRightsColumns(\r\n t, productTableOptions, useFlexBudgetColumn\r\n );\r\n\r\n const onSort = (\r\n event: React.MouseEvent,\r\n property: keyof IParkingRightsDataTableModel\r\n ) => {\r\n setSorting(property.toString());\r\n };\r\n\r\n const getTableRows = (): IParkingRightsDataTableModel[] => {\r\n if (\r\n !isNull(delegatedParkingProducts.pages) &&\r\n !isUndefined(delegatedParkingProducts.pages) &&\r\n !isUndefined(delegatedParkingProducts.pages[dataTableContext.state.pageNumber!])\r\n ) {\r\n return delegatedParkingProducts.pages[dataTableContext.state.pageNumber!].data?.map(dpr => _createData(dpr)\r\n ) as IParkingRightsDataTableModel[];\r\n }\r\n\r\n return [];\r\n };\r\n\r\n const getLoadingState = () => {\r\n if (\r\n !isNull(delegatedParkingProducts.pages) &&\r\n !isUndefined(delegatedParkingProducts.pages) &&\r\n !isUndefined(delegatedParkingProducts.pages[dataTableContext.state.pageNumber!])\r\n ) {\r\n return delegatedParkingProducts.pages[dataTableContext.state.pageNumber!].loading;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n const isLoading = getLoadingState();\r\n const rows = getTableRows();\r\n\r\n const selectedLocatedProduct = useCurrentlySelectedParkingProduct();\r\n\r\n const getRegistrationIdByTableRow = (focusedRow: IDataTableRow | null): string | null => {\r\n const parkingRightId = focusedRow?.rowKey;\r\n const currentPageNumber = dataTableContext.state.pageNumber!;\r\n const currentPage = delegatedParkingProducts.pages?.[currentPageNumber];\r\n if (isNil(currentPage)) {\r\n return null;\r\n }\r\n\r\n const delegatedParkingRight = currentPage.data?.find(\r\n (delegatedPR) => delegatedPR.parkingRight.parkingRightId === parkingRightId\r\n );\r\n\r\n return delegatedParkingRight?.delegee.registrationId ?? null;\r\n };\r\n\r\n const isResendInviteDisabled = (focusedRow: IDataTableRow | null) => {\r\n const parkingRightRow = (focusedRow as IParkingRightsDataTableModel) || null;\r\n\r\n return parkingRightRow === null || parkingRightRow.status.props?.type !== Statuses.Pending;\r\n };\r\n\r\n return (\r\n 0,\r\n revokeLabel: `${t(\"globals:revoke\")} (${fleetManagerState.selectedRowKeys.length})`,\r\n onRevokeClicked: onRevokeClicked,\r\n },\r\n menu: sharedProductActions.menu,\r\n }}\r\n subHeading={props.subHeading}\r\n />\r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { parkingProducts } = state;\r\n\r\n return {\r\n parkingProducts,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n getDelegatedParkingRights: (request: WithFiltersAndPaging) =>\r\n dispatch(parkingProductsActions.getDelegatedParkingProducts(request)),\r\n});\r\n\r\ntype StateProps = ReturnType;\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(FleetMembersTable);\r\n","import React, { useEffect, useCallback, ReactNode } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport styled from \"styled-components\";\r\nimport moment from \"moment\";\r\nimport { IDataTableRow } from \"../../../../components/DataTable/DataTableBody/DataTableBody\";\r\nimport useAppContext from \"../../../../context/hooks/useAppContext\";\r\nimport { AssignedParkingRight } from \"../../../../models/delegations/DelegatedParkingProductsModel\";\r\nimport useMyProductsContext from \"../../../../context/hooks/useMyProductsContext\";\r\nimport useFleetManagerContext from \"../../../../context/hooks/useFleetManagerContext\";\r\nimport { ForFleetManager } from \"../../../../models/ForFleetManager\";\r\nimport { WithFiltersAndPaging } from \"../../../../models/filters/WithFiltersAndPaging\";\r\nimport {\r\n DataTableContextFilters,\r\n useDataTableContext,\r\n} from \"../../../../components/DataTable/DataTableContext/DataTableContextProvider\";\r\nimport filteredColumnObjectBuilder from \"../ObjectBuilders/FilteredColumnObjectBuilder\";\r\nimport { FmpFilters } from \"../../../../constants/filtering.constants\";\r\nimport { FilterType } from \"../../../../components/DataTable/DataTableFilters/DataTableFilters\";\r\nimport {\r\n convertToRemainingFlex,\r\n NumberPlate,\r\n ProductChip,\r\n selectUseFlexBudgetColumn,\r\n useCurrentlySelectedParkingProduct,\r\n useGetOccupiedParkingRightsCount,\r\n useProductOptions,\r\n useSharedProductsMenuAction,\r\n} from \"./common\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../../store\";\r\nimport { isNil } from \"lodash\";\r\nimport DataTable from \"../../../../components/DataTable/DataTable\";\r\nimport {\r\n DeleteDelegeeIcon,\r\n DeleteDelegeeMenuItem,\r\n EditIcon,\r\n NoPaddingGrid,\r\n} from \"../../FleetManagerDataTable/StyledComponents\";\r\nimport { Column } from \"../../../../components/DataTable/DataTableHead/DataTableHead\";\r\nimport { MenuItem } from \"@material-ui/core\";\r\nimport parkingProductsActions from \"../../../../store/actions/parkingProducts.actions\";\r\nimport { stringifyDVARowKey } from \"../../../../helpers/vehicleAssignment.utils\";\r\nimport { ForbiddenIconMenu } from \"../../../../ui/Icons/ForbiddenIcon\";\r\nimport { ParkingProductModel } from \"../../../../models/ParkingProductModel\";\r\n\r\nconst Wrapper = styled.div`\r\n display: flex;\r\n flex-flow: row nowrap;\r\n`;\r\n\r\nexport interface AssignedVehicleRow extends IDataTableRow {\r\n numberPlate: JSX.Element;\r\n description?: string;\r\n product: JSX.Element;\r\n assignedDate: string;\r\n startedDate: string | null;\r\n remainingFlex: string;\r\n}\r\ntype VehicleAssignmentsTableProps = Readonly<{\r\n onRevokeClicked: () => void;\r\n onDeleteClicked: () => void;\r\n selectedParkingProduct: ParkingProductModel[] | undefined;\r\n subHeading?: ReactNode;\r\n}>\r\n\r\nconst _createData = (vehicleAssignment: AssignedParkingRight): AssignedVehicleRow => {\r\n\r\n return {\r\n rowKey: stringifyDVARowKey({\r\n vehicleAssignmentId: vehicleAssignment.vehicleAssignmentId,\r\n pmcIds: [vehicleAssignment.parkingRight.pmc],\r\n }),\r\n numberPlate: (\r\n \r\n ),\r\n description: vehicleAssignment.vehicle.description,\r\n product: (\r\n \r\n \r\n \r\n ),\r\n assignedDate: moment(vehicleAssignment.assigned).format(\"DD/MM/YYYY\"),\r\n startedDate:vehicleAssignment.startedAt ? moment(vehicleAssignment.startedAt).format(\"DD/MM/YYYY\") : null,\r\n remainingFlex: convertToRemainingFlex(vehicleAssignment.flexBudgetRemainingTime, vehicleAssignment.flexBudgetUnitType)\r\n };\r\n};\r\n\r\ntype MenuItemsProps = Readonly<{\r\n onDelete: () => void;\r\n onEdit: () => void;\r\n onRevoke: () => void;\r\n}>;\r\n\r\nfunction MenuItems(props: MenuItemsProps) {\r\n const { t } = useTranslation(\"fleetManagerTable\");\r\n\r\n return (\r\n <>\r\n props.onEdit()}>\r\n \r\n {t(\"contextMenuActions.editVehicle\")}\r\n \r\n props.onRevoke()}>\r\n \r\n {t(\"contextMenuActions.revokeVehicle\")}\r\n \r\n props.onDelete()}>\r\n \r\n {t(\"contextMenuActions.deleteVehicle\")}\r\n \r\n \r\n );\r\n}\r\n\r\nfunction VehiclesTable(props: VehicleAssignmentsTableProps) {\r\n const dispatch = useAppDispatch();\r\n const vehicleAssignments = useAppSelector((state) => state.parkingProducts.vehiclesMyProducts);\r\n const useFlexBudgetColumn = useAppSelector(selectUseFlexBudgetColumn);\r\n const getVehicleAssignments = useCallback(\r\n (request: WithFiltersAndPaging) => {\r\n dispatch(parkingProductsActions.getVehicles(request) as any);\r\n },\r\n [dispatch]\r\n );\r\n const { t } = useTranslation([\"myProducts\", \"globals\", \"dataTable\", \"fleetManagerTable\"]);\r\n\r\n const { myProductsState, setSorting } = useMyProductsContext();\r\n const {\r\n fleetManagerState,\r\n setSelectedParkingRightIds,\r\n toggleEditVehicleAssignment,\r\n toggleDeleteVehicleAssignmentsWarning,\r\n toggleRevokeVehicleAssignmentsWarning\r\n } = useFleetManagerContext();\r\n\r\n const dataTableContext = useDataTableContext();\r\n\r\n const { appState } = useAppContext();\r\n\r\n const getTotalOccupiedParkingRights = useGetOccupiedParkingRightsCount();\r\n\r\n const selectedLocatedProduct = useCurrentlySelectedParkingProduct();\r\n const { selectedParkingProduct } = props;\r\n\r\n const getFilters = (): DataTableContextFilters[] => [\r\n {\r\n key: FmpFilters.placeId,\r\n type: FilterType.QueryParam,\r\n value: myProductsState.selectedLocation.toString(),\r\n },\r\n {\r\n key: FmpFilters.sortBy,\r\n type: FilterType.QueryParam,\r\n value: myProductsState.dataTable.sortBy,\r\n },\r\n {\r\n key: FmpFilters.orderDesc,\r\n type: FilterType.QueryParam,\r\n value: myProductsState.dataTable.orderDesc?.toString(),\r\n },\r\n ...(dataTableContext.state.filters as DataTableContextFilters[]),\r\n ];\r\n\r\n const getRequestModel = (): WithFiltersAndPaging => {\r\n const request: WithFiltersAndPaging = {\r\n entity: {\r\n seasonTicketOwnerCrmId: appState.user.seasonTicketOwnerCrmId as string,\r\n language: appState.selectedLanguage,\r\n },\r\n pagination: {\r\n pageSize: dataTableContext.state.pageSize!,\r\n pageNumber: dataTableContext.state.pageNumber!,\r\n },\r\n filters: getFilters(),\r\n };\r\n\r\n return request;\r\n };\r\n\r\n const fetchVehicleAssignments = () => {\r\n if (appState.user.seasonTicketOwnerCrmId) {\r\n getVehicleAssignments(getRequestModel());\r\n }\r\n };\r\n\r\n const memoizedFetch = useCallback(\r\n (): void => fetchVehicleAssignments(), // eslint-disable-next-line\r\n [\r\n dataTableContext.state.pageSize,\r\n dataTableContext.state.pageNumber,\r\n myProductsState.dataTable.orderDesc,\r\n myProductsState.dataTable.sortBy,\r\n myProductsState.selectedLocation,\r\n appState.user.seasonTicketOwnerCrmId,\r\n appState.selectedLanguage,\r\n ]\r\n );\r\n\r\n useEffect(() => {\r\n memoizedFetch();\r\n }, [memoizedFetch]);\r\n\r\n const productTableOptions = useProductOptions();\r\n const sharedProductActions = useSharedProductsMenuAction();\r\n\r\n const columns: Column[] = filteredColumnObjectBuilder.buildVehiclesMyProductsColumns(\r\n t,\r\n productTableOptions,\r\n useFlexBudgetColumn\r\n );\r\n\r\n const onSort = (event: React.MouseEvent, property: keyof AssignedVehicleRow) => {\r\n setSorting(property.toString());\r\n };\r\n\r\n const getTableRows = (): AssignedVehicleRow[] => {\r\n const { pages } = vehicleAssignments;\r\n if (isNil(pages)) return [];\r\n const pageData = pages[dataTableContext.state.pageNumber!]?.data;\r\n if (isNil(pageData)) return [];\r\n return pageData.map(vehicles => _createData(vehicles));\r\n };\r\n\r\n const isLoading =\r\n vehicleAssignments.pages?.[dataTableContext.state.pageNumber!]?.loading ?? false;\r\n const rows = getTableRows();\r\n\r\n const handleEdit = (row: AssignedVehicleRow | null) => {\r\n if (isNil(row)) {\r\n return;\r\n }\r\n toggleEditVehicleAssignment(row);\r\n };\r\n\r\n const handleDelete = (row: AssignedVehicleRow | null) => {\r\n if (isNil(row)) {\r\n return;\r\n }\r\n toggleDeleteVehicleAssignmentsWarning(row);\r\n };\r\n\r\n const handleRevoke = (row: AssignedVehicleRow | null) => {\r\n if (isNil(row)) {\r\n return;\r\n }\r\n toggleRevokeVehicleAssignmentsWarning(row);\r\n };\r\n\r\n return (\r\n \r\n \r\n (\r\n handleDelete(focusedRow)}\r\n onEdit={() => handleEdit(focusedRow)}\r\n onRevoke={() => handleRevoke(focusedRow)}\r\n />\r\n )}\r\n order={myProductsState.dataTable.orderDesc ? \"desc\" : \"asc\"}\r\n heading={{\r\n options: {\r\n useHeading: true,\r\n showHeadingCount: true,\r\n },\r\n title: t(\"globals:parkingRights\"),\r\n count: getTotalOccupiedParkingRights(selectedLocatedProduct || {}),\r\n }}\r\n filtering={{\r\n options: {\r\n useFilters: true,\r\n },\r\n }}\r\n actions={{\r\n options: {\r\n useActions: true,\r\n },\r\n revoke: {\r\n useRevoke: true,\r\n showRevoke: fleetManagerState.selectedRowKeys.length > 0,\r\n revokeLabel: `${t(\"globals:revoke\")} (${fleetManagerState.selectedRowKeys.length})`,\r\n onRevokeClicked: props.onRevokeClicked,\r\n },\r\n menu: sharedProductActions.menu,\r\n }}\r\n subHeading={props.subHeading}\r\n />\r\n \r\n \r\n );\r\n}\r\n\r\nexport default VehiclesTable;\r\n","import { TFunction } from \"i18next\";\r\nimport * as Yup from \"yup\";\r\nimport { format } from \"../../../utils\";\r\nimport { useFormik } from \"formik\";\r\nimport { useMemo } from \"react\";\r\n\r\nexport interface IVehicleFormValues {\r\n description: string;\r\n numberPlate: string;\r\n numberPlatePrefix: string;\r\n products?: number[];\r\n}\r\n\r\nexport function createYupSchema(t: TFunction, isEditMode: boolean, defaultNumberPlatePrefix = \"NL\") {\r\n const productValidationSchema = isEditMode\r\n ? Yup.array(Yup.number()).default([])\r\n : Yup.array(Yup.number())\r\n .min(1, format(t(\"errors:min.field\"), t(\"globals:parkingRights\"), 1))\r\n .required(format(t(\"errors:required.field\"), t(\"globals:parkingRights\").toLowerCase()))\r\n .default([]);\r\n\r\n return Yup.object({\r\n description: Yup.string()\r\n .max(100, t(\"errors:maxLength\", { field: t(\"vehicleForm:description\"), count: 100 }))\r\n .optional()\r\n .default(\"\"),\r\n numberPlatePrefix: Yup.string()\r\n .required(\r\n format(\r\n t(\"errors:required.field\"),\r\n t(\"visitors:visitorDetailsForm.numberPlateRegionPlaceholder\").toLowerCase()\r\n )\r\n )\r\n .default(defaultNumberPlatePrefix),\r\n products: productValidationSchema,\r\n });\r\n}\r\n\r\nconst initialValues: IVehicleFormValues = {\r\n numberPlate: \"\",\r\n numberPlatePrefix: \"\",\r\n description: \"\",\r\n products: [],\r\n};\r\n\r\nconst useValidationSchema = (\r\n t: TFunction,\r\n isEditMode: boolean,\r\n onSubmit: (values: IVehicleFormValues) => void,\r\n defaultNumberPlatePrefix = \"NL\",\r\n) => {\r\n const validationSchema = useMemo(() => createYupSchema(t, isEditMode, defaultNumberPlatePrefix), [t, isEditMode, defaultNumberPlatePrefix]);\r\n initialValues.numberPlatePrefix = defaultNumberPlatePrefix;\r\n\r\n const formik = useFormik({\r\n validateOnBlur: true,\r\n validateOnChange: false,\r\n onSubmit,\r\n validationSchema: validationSchema,\r\n enableReinitialize: true,\r\n initialValues: initialValues,\r\n });\r\n\r\n return {\r\n validationSchema,\r\n formik,\r\n };\r\n};\r\n\r\nexport default useValidationSchema;\r\n","type NumberPlateValidator = {\r\n isValidNumberPlatePrefix: (value: string) => boolean;\r\n isValidNumberPlate: (value: string) => boolean;\r\n isValidGermanNumberPlate: (value: string) => boolean;\r\n isValidGermanRegionNumber: (value: string) => boolean;\r\n isValidNumberPlateWithoutDash: (value: string) => boolean;\r\n};\r\n\r\nconst numberPlateValidator: NumberPlateValidator = (() => {\r\n const numberPlatePrefixPattern = /^[A-Z]{1,3}$/;\r\n const numberPlatePattern = /^(([A-Za-z0-9ÆØæø]+-)?[A-Za-z0-9ÆØæø]+)?$/;\r\n const numberPlatePatternWithoutDash = /^(([A-Za-z0-9ÆØæø]+)?[A-Za-z0-9ÆØæø]+)?$/;\r\n const germanNumberPlatePattern = /^([A-Za-z0-9ÖÜÄöüä]{1,3}-[A-Za-z0-9]+)?$/;\r\n const germanRegionPattern = /^([A-Za-z0-9ÖÜÄöüä]{1,3})?$/;\r\n\r\n const isValidNumberPlatePrefix = (value: string): boolean =>\r\n numberPlatePrefixPattern.test(value);\r\n\r\n const isValidNumberPlate = (value: string): boolean =>\r\n numberPlatePattern.test(value);\r\n\r\n const isValidGermanNumberPlate = (value: string): boolean =>\r\n germanNumberPlatePattern.test(value);\r\n\r\n const isValidGermanRegionNumber = (value: string): boolean =>\r\n germanRegionPattern.test(value);\r\n\r\n const isValidNumberPlateWithoutDash = (value: string): boolean =>\r\n numberPlatePatternWithoutDash.test(value);\r\n\r\n return {\r\n isValidNumberPlatePrefix,\r\n isValidNumberPlate,\r\n isValidGermanNumberPlate,\r\n isValidGermanRegionNumber,\r\n isValidNumberPlateWithoutDash,\r\n };\r\n})();\r\n\r\nexport default numberPlateValidator;\r\n","import React, { Dispatch, useEffect, useMemo, useRef } from \"react\";\r\nimport { Formik } from \"formik\";\r\nimport { InputLabel, Grid, Container, Button, ButtonGroup, Box } from \"@material-ui/core\";\r\nimport { Translation, useTranslation } from \"react-i18next\";\r\nimport { CloseOutlined } from \"@material-ui/icons\";\r\nimport { variables } from \"../../theme/variables\";\r\nimport { without, isUndefined } from \"underscore\";\r\nimport Heading from \"../../ui/Heading/Heading\";\r\nimport CustomButton from \"../../ui/CustomButton/CustomButton\";\r\nimport CustomInput from \"../../ui/CustomInput/CustomInput\";\r\nimport ParkingRightsGrid from \"../DelegeeForm/ParkingRightsGrid/ParkingRightsGrid\";\r\nimport Spacer from \"../../ui/Spacer/Spacer\";\r\nimport { RootReducer } from \"../../store/reducers\";\r\nimport parkingProductsActions from \"../../store/actions/parkingProducts.actions\";\r\nimport { connect } from \"react-redux\";\r\nimport useValidationSchema, { IVehicleFormValues } from \"./hooks/useValidationSchema\";\r\nimport useAppContext from \"../../context/hooks/useAppContext\";\r\nimport { checkHasNoCapacity, checkLicensePlateAlreadyLinked, checkNumberPlateAlreadyAssigned, format } from \"../../utils\";\r\nimport CustomError from \"../../ui/CustomError/CustomError\";\r\nimport useFleetManagerContext from \"../../context/hooks/useFleetManagerContext\";\r\nimport { AssignmentType } from \"../../context/store/reducers/fleetManagerContext.reducer\";\r\nimport { NoPaddingBottomGrid } from \"../DataTable/DataTableStyledComponents\";\r\nimport { NumberPlateDeSupport } from \"../../ui/NumberPlate\";\r\nimport { CountriesNumberPlates, convertIsoCountryCodeToNumberPlatePrefix, convertNumberPlatePrefixToIsoCountryCode, moveCountryToTop, getCountryCodeByLanguage } from \"../../lib/countriesNumberPlates\";\r\nimport RequiredInputLabel from \"../../ui/RequiredInputLabel/RequiredInputLabel\";\r\nimport { MuiHelperText } from \"../MuiHelperText\";\r\nimport { AssignVehicleRequestModel } from \"../../models/vehicle-assignments/AssignVehicleRequestModel\";\r\nimport { UpdateVehicleRequestModel } from \"../../models/vehicle-assignments/UpdateVehicleRequestModel\";\r\nimport { VehicleAssignmentModel } from \"../../models/delegations/DelegatedParkingProductsModel\";\r\nimport { DeleteDelegeeIcon, DeleteText, DeleteWrapper } from \"../DataTable/DataTableFilters/CommonStyledComponents\";\r\nimport { parseAssignedParkingRowKey } from \"../../helpers/vehicleAssignment.utils\";\r\nimport numberPlateValidator from \"../../validators/numberplate.validator\";\r\nimport { ParkingProductModel } from \"../../models/vehicle-assignments/ParkingProductModel\";\r\nimport { useAppSelector } from \"../../store\";\r\nimport { selectUseBulkVehicleAssignments } from \"../../containers/FleetManager/MyProducts/ParkingRightsDataTable/common\";\r\n\r\nconst { typography } = variables;\r\ninterface IFormProps extends StateProps, DispatchProps {\r\n onClose: () => void;\r\n onRefresh?: () => void;\r\n}\r\n\r\nenum Fields {\r\n Description = \"description\",\r\n NumberPlate = \"numberPlate\",\r\n NumberPlatePrefix = \"numberPlatePrefix\",\r\n Products = \"products\"\r\n}\r\n\r\ntype ValidationResult = { status: 'valid' } | { status: 'error' | 'warning'; message: string }\r\n\r\nconst VehicleForm: React.FC = (props) => {\r\n const {\r\n onClose,\r\n onRefresh,\r\n parkingProducts,\r\n getParkingProducts,\r\n assignVehicle,\r\n getVehicleAssignment,\r\n disposeError,\r\n updateVehicleAssignment,\r\n } = props;\r\n\r\n const { appState } = useAppContext();\r\n const {\r\n fleetManagerState,\r\n setAssignmentType,\r\n toggleDeleteVehicleAssignmentsWarning,\r\n setNumberPlateWarning,\r\n setNumberPlateError\r\n } = useFleetManagerContext();\r\n\r\n const isEditMode = fleetManagerState.isEditVehicleAssignmentMode;\r\n const multipleAssignmentEnabled = false; // Will be added later\r\n\r\n const { t } = useTranslation([\"vehicleForm\", \"visitors\", \"globals\", \"errors\"]);\r\n\r\n useEffect(() => {\r\n return () => disposeError();\r\n }, [disposeError]);\r\n\r\n const newVehicleAssignmentIdRef = useRef();\r\n const useBulkVehicleAssignments = useAppSelector(selectUseBulkVehicleAssignments);\r\n\r\n const getParkingProductsFromPmcIds = (pmcIds: number[]) : ParkingProductModel[] => \r\n parkingProducts.locatedParkingProducts.data\r\n ?.flatMap(l => l.parkingProducts)\r\n ?.filter(p => pmcIds.includes(p.pmcId!))\r\n .map(p => ({ pmcId: p.pmcId!, seasonTicketId: p.id!, countryCode: p.countryCode! })) || [];\r\n\r\n const handleFormSubmit = (values: IVehicleFormValues) => {\r\n if (isEditMode) {\r\n const updateRequest : UpdateVehicleRequestModel = {\r\n numberPlate: {\r\n countryCode: convertNumberPlatePrefixToIsoCountryCode(values.numberPlatePrefix).toLowerCase(),\r\n value: values.numberPlate.toUpperCase(),\r\n },\r\n pmcIds: values.products || [],\r\n parkingProducts: getParkingProductsFromPmcIds(values.products || []),\r\n description: values.description,\r\n isUnlimited: useBulkVehicleAssignments! && parkingProducts.hasUnlimitedEntryRights\r\n };\r\n\r\n updateVehicleAssignment(\r\n appState.user.seasonTicketOwnerCrmId!,\r\n getSelectedVehicleAssignemntId(),\r\n updateRequest,\r\n () => {\r\n onClose();\r\n if (onRefresh) {\r\n onRefresh();\r\n }\r\n });\r\n } else {\r\n // lazily gen vehicleAssignmentId for next successful assign vehicle request\r\n if (!newVehicleAssignmentIdRef.current) {\r\n newVehicleAssignmentIdRef.current = crypto.randomUUID();\r\n }\r\n const assignRequest : AssignVehicleRequestModel = {\r\n numberPlate: {\r\n countryCode: convertNumberPlatePrefixToIsoCountryCode(values.numberPlatePrefix).toLowerCase(),\r\n value: values.numberPlate.toUpperCase(),\r\n },\r\n pmcIds: values.products || [],\r\n parkingProducts: getParkingProductsFromPmcIds(values.products || []),\r\n description: values.description,\r\n aggregateId: newVehicleAssignmentIdRef.current,\r\n isUnlimited: useBulkVehicleAssignments! && parkingProducts.hasUnlimitedEntryRights\r\n };\r\n assignVehicle(appState.user.seasonTicketOwnerCrmId!, assignRequest, () => {\r\n // reset the vehicleAssignmentId\r\n newVehicleAssignmentIdRef.current = undefined;\r\n onClose();\r\n if (onRefresh) {\r\n onRefresh();\r\n }\r\n });\r\n }\r\n };\r\n\r\n const getSelectedVehicleAssignemntId = (): string => {\r\n const { vehicleAssignmentId } = parseAssignedParkingRowKey(fleetManagerState.selectedVehicleAssignment!.rowKey);\r\n return vehicleAssignmentId;\r\n }\r\n\r\n const onDeleteVehicleAssignment = () => {\r\n toggleDeleteVehicleAssignmentsWarning(fleetManagerState.selectedVehicleAssignment);\r\n }\r\n\r\n const topCountriesNumberPlatesDVA = new CountriesNumberPlates().getTopCountriesNumberPlatesDVA();\r\n\r\n const supportedNumberPlates = useMemo(() => {\r\n const countriesNumberPlates = new CountriesNumberPlates();\r\n const countries = countriesNumberPlates.getCountriesNumberPlates();\r\n\r\n const countryCode = getCountryCodeByLanguage(appState.selectedLanguage);\r\n const topCountriesNumberPlatesWithSelectedCountryTop = moveCountryToTop(countryCode, topCountriesNumberPlatesDVA);\r\n\r\n let dvaCountries = topCountriesNumberPlatesWithSelectedCountryTop.concat(countries);\r\n\r\n return dvaCountries;\r\n }, []);\r\n\r\n const { validationSchema, formik } = useValidationSchema(\r\n t,\r\n isEditMode,\r\n handleFormSubmit,\r\n supportedNumberPlates[0].numberPlateCode\r\n );\r\n\r\n const fetchParkingProducts = () => {\r\n getParkingProducts(appState.user.seasonTicketOwnerCrmId as string, appState.selectedLanguage);\r\n };\r\n\r\n const initForm = () => {\r\n fetchParkingProducts();\r\n setNumberPlateWarning(undefined);\r\n setNumberPlateError(undefined);\r\n\r\n if (isEditMode) {\r\n setFieldValues();\r\n }\r\n };\r\n\r\n const setFieldValues = () => {\r\n getVehicleAssignment(getSelectedVehicleAssignemntId(), (vehicleAssignment: VehicleAssignmentModel) => {\r\n formik.setFieldValue(Fields.NumberPlatePrefix, convertIsoCountryCodeToNumberPlatePrefix(vehicleAssignment.vehicle.countryCode));\r\n formik.setFieldValue(Fields.NumberPlate, vehicleAssignment.vehicle.value);\r\n formik.setFieldValue(Fields.Description, vehicleAssignment.vehicle.description);\r\n formik.setFieldValue(Fields.Products, vehicleAssignment.assignedProducts.map(p => p.pmcId));\r\n });\r\n }\r\n\r\n useEffect(() => {\r\n initForm();\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (hasNoCapacity()) {\r\n fetchParkingProducts();\r\n }\r\n }, [parkingProducts.error?.errors]);\r\n\r\n const handleSelectAll = (parkingProducts: number[]) => {\r\n formik.setFieldValue(Fields.Products, parkingProducts);\r\n };\r\n\r\n const handleDeselectAll = () => {\r\n formik.setFieldValue(Fields.Products, []);\r\n };\r\n\r\n const handleProductChange = (\r\n event: React.ChangeEvent,\r\n parkingProducts: number[]\r\n ) => {\r\n const { value, checked } = event.currentTarget;\r\n const productId = parseInt(value);\r\n\r\n let products = [...parkingProducts];\r\n if (!checked) {\r\n products = without(products, productId);\r\n } else {\r\n products.push(productId);\r\n }\r\n formik.setFieldValue(Fields.Products, products);\r\n };\r\n\r\n const onInputChange = (field: string, e?: React.ChangeEvent) => {\r\n if (!isUndefined(formik.errors[field as keyof typeof formik.errors])) {\r\n formik.setFieldError(field, undefined);\r\n }\r\n\r\n if (e) {\r\n formik.handleChange(e);\r\n }\r\n };\r\n\r\n const getFormTitle = () => (isEditMode ? t(\"editExistingVehicleAssignment\") : t(\"assignVehicle\"));\r\n const submitButtonText = () => !isEditMode ? t(\"assignVehicle\") : t(\"updateVehicle\");\r\n\r\n const hasNoCapacity = (): boolean => checkHasNoCapacity(parkingProducts.error);\r\n const hasNumberPlateAlreadyLinkedToAnotherUser = () => checkNumberPlateAlreadyAssigned(parkingProducts.error);\r\n const hasLicensePlateAlreadyLinked = () => checkLicensePlateAlreadyLinked(parkingProducts.error);\r\n const setAssignmentTypeSingle = (): void => setAssignmentType(AssignmentType.Single);\r\n const setAssignmentTypeMultiple = (): void => setAssignmentType(AssignmentType.Multiple);\r\n\r\n const handleNumberPlatePrefixChange = (npPrefix: string) => {\r\n onInputChange(Fields.NumberPlatePrefix);\r\n formik.setFieldValue(Fields.NumberPlatePrefix, npPrefix);\r\n validateNumberPlateAndSetState(npPrefix);\r\n };\r\n\r\n const oldNpValue = React.useRef(\"\");\r\n const handleNumberPlateChange = (e: React.ChangeEvent) => {\r\n const np = e.target.value;\r\n const field = Fields.NumberPlate;\r\n if (oldNpValue.current !== np) {\r\n formik.setFieldValue(field, np);\r\n onInputChange(field, e);\r\n oldNpValue.current = np;\r\n }\r\n };\r\n\r\n const tNumberPlate = () => {\r\n const nb = t(\"globals:numberPlate\");\r\n\r\n if (appState.selectedLanguage === 'de') {\r\n return nb;\r\n }\r\n\r\n return nb.toLowerCase();\r\n } \r\n\r\n const validateGermanPlate = (numberPlate: string) : ValidationResult => {\r\n if (formik.values.numberPlate === numberPlate || formik.values.numberPlate.split('-')[0].length === 0) {\r\n return {\r\n status: 'error',\r\n message: format(t(\"errors:required.field\"), tNumberPlate())\r\n };\r\n }\r\n\r\n if (!numberPlateValidator.isValidGermanRegionNumber(formik.values.numberPlate.split('-')[0])) {\r\n return {\r\n status: 'error',\r\n message: t(\"errors:format.numberPlate\"),\r\n };\r\n }\r\n\r\n if(formik.values.numberPlate.split('-').pop()?.length === 0) {\r\n return {\r\n status: 'error',\r\n message: t(\"errors:format.numberPlate\"),\r\n };\r\n }\r\n\r\n if (!numberPlateValidator.isValidGermanNumberPlate(formik.values.numberPlate)) {\r\n return {\r\n status: 'error',\r\n message: t(\"errors:format.numberPlate\"),\r\n };\r\n }\r\n\r\n return { status: 'valid' };\r\n };\r\n\r\n const validateOtherNumberPlate = (numberPlate: string) : ValidationResult => {\r\n if (numberPlate.length === 0) {\r\n return {\r\n status: 'error',\r\n message: format(t(\"errors:required.field\"), tNumberPlate()),\r\n };\r\n }\r\n\r\n if (!numberPlateValidator.isValidNumberPlate(numberPlate)) {\r\n return {\r\n status: 'warning',\r\n message: t(\"errors:format.numberPlate\")\r\n };\r\n }\r\n\r\n return { status: 'valid' };\r\n }\r\n\r\n const getNumberPlate = (prefix: string) => {\r\n return prefix === 'D'\r\n ? formik.values.numberPlate.split('-').pop()! :\r\n formik.values.numberPlate.replace('-', '');\r\n }\r\n\r\n const validateNumberPlate = (numberPlatePrefix?: string) : ValidationResult | undefined => {\r\n let prefix = formik.values.numberPlatePrefix;\r\n\r\n if (numberPlatePrefix !== undefined) {\r\n prefix = numberPlatePrefix;\r\n\r\n if (formik.values.numberPlate.length === 0) {\r\n return;\r\n }\r\n }\r\n\r\n const numberPlate = getNumberPlate(prefix);\r\n\r\n if (prefix === 'D') {\r\n const germanResult = validateGermanPlate(numberPlate);\r\n if (germanResult.status !== 'valid') {\r\n return germanResult;\r\n }\r\n } else {\r\n const nbResult = validateOtherNumberPlate(numberPlate);\r\n if (nbResult.status !== 'valid') {\r\n return nbResult;\r\n }\r\n }\r\n\r\n if (numberPlate.length < 2) {\r\n return {\r\n status: 'warning',\r\n message: t(\"errors:minLength\", { field: t(\"globals:numberPlate\"), count: 2 })\r\n };\r\n }\r\n\r\n if (numberPlate.length > 7) {\r\n return {\r\n status: 'warning',\r\n message: t(\"errors:maxLength\", { field: t(\"globals:numberPlate\"), count: 7 }),\r\n };\r\n }\r\n\r\n return { status: 'valid' };\r\n };\r\n\r\n const setNumberPlateValidationResult = (result: ValidationResult) => {\r\n switch (result.status) {\r\n case 'error':\r\n setNrPlateError(result.message);\r\n break;\r\n case 'warning':\r\n setNrPlateWarning(result.message);\r\n break;\r\n case 'valid':\r\n setNumberPlateWarning(undefined);\r\n setNumberPlateError(undefined);\r\n break;\r\n }\r\n }\r\n\r\n const validateNumberPlateAndSetState = (numberPlatePrefix?: string) : ValidationResult | undefined => {\r\n const result = validateNumberPlate(numberPlatePrefix);\r\n if (!result) {\r\n return;\r\n }\r\n setNumberPlateValidationResult(result);\r\n return result;\r\n }\r\n\r\n const setNrPlateWarning = (warning: string) => {\r\n setNumberPlateError(undefined);\r\n setNumberPlateWarning(warning);\r\n }\r\n\r\n const setNrPlateError = (error: string) => {\r\n setNumberPlateWarning(undefined);\r\n setNumberPlateError(error);\r\n }\r\n\r\n const initiallySelectedPmcIds = useMemo(\r\n () =>\r\n isEditMode\r\n ? parkingProducts.selectedVehicleAssignment.data?.assignedProducts.map(p => p.pmcId)\r\n : [],\r\n [isEditMode, parkingProducts.selectedVehicleAssignment]\r\n );\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n {isEditMode && (\r\n \r\n \r\n {t(\"deleteVehicle\")}\r\n \r\n )}\r\n \r\n {getFormTitle()}\r\n \r\n \r\n \r\n
\r\n \r\n {!isEditMode && multipleAssignmentEnabled && (\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n {t(\"single\")}\r\n \r\n \r\n {t(\"multiple\")}\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n )}\r\n
\r\n \r\n {fleetManagerState.assignmentType == AssignmentType.Single && (\r\n \r\n \r\n \r\n {t(\"accessInformation\")}\r\n \r\n \r\n \r\n \r\n {t(\"globals:numberPlate\")}\r\n \r\n \r\n {isEditMode ? fleetManagerState.selectedVehicleAssignment?.numberPlate :\r\n ({\r\n numberPlatePrefix: s.numberPlateCode,\r\n countryCode: s.countryCode,\r\n }))}\r\n setFieldError={formik.setFieldError}\r\n setFieldValue={formik.setFieldValue}\r\n />}\r\n \r\n \r\n \r\n \r\n {t(\"description\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n {(t) => (\r\n handleProductChange(event, formik.values.products ?? [])}\r\n onStateChange={prs => handleSelectAll(prs.filter(pr => pr.checked).map(pr => pr.right?.pmcId!))}\r\n onSelectAll={(ids) => handleSelectAll(ids)}\r\n onDeselectAll={handleDeselectAll}\r\n error={{\r\n hasError: Boolean(formik.errors.products),\r\n message: formik.errors.products,\r\n }}\r\n title={t(\"selectProduct\")}\r\n required={!isEditMode}\r\n selectAllTooltipText={t(\"selectTooltip\")}\r\n deselectAllTooltipText={t(\"deselectTooltip\")}\r\n selectAllText={t(\"selectAll\")}\r\n deselectAllText={t(\"deselectAll\")}\r\n />\r\n )}\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n {\r\n e?.preventDefault();\r\n if (fleetManagerState.numberPlateError) {\r\n formik.validateForm();\r\n return;\r\n }\r\n const res = validateNumberPlateAndSetState();\r\n if (res !== undefined && res.status === 'error') {\r\n formik.validateForm();\r\n return;\r\n }\r\n formik.handleSubmit();\r\n }}\r\n text={submitButtonText()}\r\n id=\"submit-invite\"\r\n />\r\n \r\n \r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { parkingProducts } = state;\r\n\r\n return {\r\n parkingProducts\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n disposeError: () => dispatch(parkingProductsActions.disposeError()),\r\n getParkingProducts: (seasonTicketOwnerCrmId: string, location: string,) => dispatch(parkingProductsActions.getParkingProducts(seasonTicketOwnerCrmId, location)),\r\n getVehicleAssignment: (aggregateId: string, onSuccess?: (res: any) => void) => dispatch(parkingProductsActions.getVehicleAssignment(aggregateId, onSuccess)),\r\n assignVehicle: (seasonTicketOwnerCrmId: string, req: AssignVehicleRequestModel, onSuccess?: () => void) => dispatch(parkingProductsActions.assignVehicle(seasonTicketOwnerCrmId, req, onSuccess)),\r\n updateVehicleAssignment: (seasonTicketOwnerCrmId: string, aggregateId: string, req: UpdateVehicleRequestModel, onSuccess?: () => void) => dispatch(parkingProductsActions.updateVehicleAssignment(seasonTicketOwnerCrmId, aggregateId, req, onSuccess)),\r\n});\r\n\r\ntype StateProps = ReturnType;\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(VehicleForm);\r\n","import React, { Dispatch } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { connect } from \"react-redux\";\r\nimport Warning from \"./Warning\";\r\nimport parkingProductsActions from \"../../store/actions/parkingProducts.actions\";\r\nimport useFleetManagerContext from \"../../context/hooks/useFleetManagerContext\";\r\nimport { RootReducer } from \"../../store/reducers\";\r\nimport { RevokeVehicleAssignmentsModel } from \"../../models/vehicle-assignments/RevokeVehicleAssignmentsModel\";\r\nimport { VehicleAssignmentProduct } from \"../../models/vehicle-assignments/VehicleAssignmentProduct\";\r\nimport {parseDVARowKey } from \"../../helpers/vehicleAssignment.utils\";\r\n\r\ninterface IFormProps extends StateProps, DispatchProps {\r\n onRefresh: (vehiclesToExclude?: VehicleAssignmentProduct[]) => void;\r\n}\r\n\r\nconst RevokeVehicleAssignmentWarning = ({\r\n parkingProducts,\r\n revokeVehicleAssignmentsParkingRights,\r\n onRefresh,\r\n}: IFormProps) => {\r\n const { t } = useTranslation([\"revokeVehicleAssignmentWarning\", \"globals\"]);\r\n const { toggleRevokeVehicleAssignmentsWarning, fleetManagerState } = useFleetManagerContext();\r\n\r\n const handleRevokeCancellation = () => {\r\n toggleRevokeVehicleAssignmentsWarning();\r\n };\r\n\r\n const handleSuccessfulRevoke = (model: VehicleAssignmentProduct[]) => {\r\n toggleRevokeVehicleAssignmentsWarning();\r\n\r\n onRefresh(model);\r\n };\r\n\r\n const handleRevokeConfirmation = () => {\r\n const parsedKey = parseDVARowKey(fleetManagerState.selectedVehicleAssignment!.rowKey);\r\n const model: RevokeVehicleAssignmentsModel = {\r\n vehicleAssignmentProducts: parsedKey.pmcIds.map(pmcId => { return { pmcId: pmcId, vehicleAssignmentId: parsedKey.vehicleAssignmentId }}),\r\n };\r\n revokeVehicleAssignmentsParkingRights(model, () =>\r\n handleSuccessfulRevoke(model.vehicleAssignmentProducts)\r\n );\r\n };\r\n \r\n return (\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { parkingProducts } = state;\r\n\r\n return {\r\n parkingProducts,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n revokeVehicleAssignmentsParkingRights: (\r\n model: RevokeVehicleAssignmentsModel,\r\n callback: (vehiclesToExclude?: VehicleAssignmentProduct[]) => void\r\n ) =>\r\n dispatch(\r\n parkingProductsActions.revokeVehicleAssignmentProducts(model, () =>\r\n callback(model.vehicleAssignmentProducts)\r\n )\r\n ),\r\n});\r\n\r\ntype StateProps = ReturnType;\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RevokeVehicleAssignmentWarning);\r\n","import React from \"react\";\r\nimport { Dispatch } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { connect } from \"react-redux\";\r\nimport Warning from \"./Warning\";\r\nimport parkingProductsActions from \"../../store/actions/parkingProducts.actions\";\r\nimport { RevokeParkingRightsModel } from \"../../models/RevokeParkingRightsModel\";\r\nimport useFleetManagerContext from \"../../context/hooks/useFleetManagerContext\";\r\nimport { RootReducer } from \"../../store/reducers\";\r\n\r\ninterface IFormProps extends StateProps, DispatchProps {\r\n selectedParkingRightIds: string[];\r\n onRefresh: () => void;\r\n}\r\n\r\nconst RevokeParkingRightsWarning = ({\r\n parkingProducts,\r\n revokeParkingRights,\r\n selectedParkingRightIds,\r\n onRefresh\r\n}: IFormProps) => {\r\n const { t } = useTranslation([\"revokeDelegeeWarning\", \"globals\"]);\r\n const { toggleRevokeParkingRightsWarning } = useFleetManagerContext();\r\n\r\n const warningText = t(\"warning\", {count: 1});\r\n const warningDetails = t(\"details\", {count: 1});\r\n\r\n const handleRevokeCancellation = () => {\r\n toggleRevokeParkingRightsWarning();\r\n }\r\n\r\n const handleSuccessfulRevoke = () => {\r\n toggleRevokeParkingRightsWarning();\r\n onRefresh();\r\n }\r\n\r\n const handleRevokeConfirmation = () => {\r\n revokeParkingRights(selectedParkingRightIds, handleSuccessfulRevoke);\r\n }\r\n \r\n return (\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { parkingProducts } = state;\r\n\r\n return {\r\n parkingProducts,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n revokeParkingRights: (parkingRightIds: string[], callback?: () => void) => {\r\n const model: RevokeParkingRightsModel = {\r\n parkingRightIds\r\n };\r\n dispatch(parkingProductsActions.revokeParkingRights(model, callback))\r\n },\r\n});\r\n\r\ntype StateProps = ReturnType;\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RevokeParkingRightsWarning);\r\n","import { TFunction } from \"i18next\";\r\nimport * as Yup from \"yup\";\r\nimport { format } from \"../../../utils\";\r\nimport { useFormik } from \"formik\";\r\nimport { useMemo } from \"react\";\r\n\r\nexport interface IWhitelistVehiclesFormValues {\r\n products?: number[];\r\n}\r\n\r\nexport function createYupSchema(t: TFunction, defaultNumberPlatePrefix = \"NL\") {\r\n const productValidationSchema = Yup.array(Yup.number())\r\n .min(1, format(t(\"errors:min.field\"), t(\"globals:parkingRights\"), 1))\r\n .required(format(t(\"errors:required.field\"), t(\"globals:parkingRights\").toLowerCase()))\r\n .default([]);\r\n\r\n return Yup.object({ products: productValidationSchema });\r\n}\r\n\r\nconst initialValues: IWhitelistVehiclesFormValues = {\r\n products: [],\r\n};\r\n\r\nconst useValidationSchema = (\r\n t: TFunction,\r\n onSubmit: (values: IWhitelistVehiclesFormValues) => void,\r\n) => {\r\n const validationSchema = useMemo(() => createYupSchema(t), [t]);\r\n\r\n const formik = useFormik({\r\n validateOnBlur: true,\r\n validateOnChange: false,\r\n onSubmit,\r\n validationSchema: validationSchema,\r\n enableReinitialize: true,\r\n initialValues: initialValues,\r\n });\r\n\r\n return {\r\n validationSchema,\r\n formik,\r\n };\r\n};\r\n\r\nexport default useValidationSchema;\r\n","import { ImportVehiclesCtx } from \"../ImportVehiclesContext\";\r\nimport { useContext } from \"react\";\r\n\r\nconst useImportVehiclesContext = () => useContext(ImportVehiclesCtx);\r\n\r\nexport default useImportVehiclesContext;\r\n","import React, { Dispatch, useEffect } from \"react\";\r\nimport { Formik } from \"formik\";\r\nimport { Container, Button, Box } from \"@material-ui/core\";\r\nimport { Translation, useTranslation } from \"react-i18next\";\r\nimport { CloseOutlined } from \"@material-ui/icons\";\r\nimport { variables } from \"../../theme/variables\";\r\nimport { without } from \"underscore\";\r\nimport Heading from \"../../ui/Heading/Heading\";\r\nimport CustomButton from \"../../ui/CustomButton/CustomButton\";\r\nimport ParkingRightsGrid from \"../DelegeeForm/ParkingRightsGrid/ParkingRightsGrid\";\r\nimport { RootReducer } from \"../../store/reducers\";\r\nimport parkingProductsActions from \"../../store/actions/parkingProducts.actions\";\r\nimport { connect } from \"react-redux\";\r\nimport useAppContext from \"../../context/hooks/useAppContext\";\r\nimport useValidationSchema, { IWhitelistVehiclesFormValues } from \"./hooks/useValidationSchema\";\r\nimport useFleetManagerContext from \"../../context/hooks/useFleetManagerContext\";\r\nimport useImportVehiclesContext from \"../../context/hooks/useImportVehiclesContext\";\r\n\r\nconst { typography } = variables;\r\ninterface IFormProps extends StateProps, DispatchProps {\r\n onClose: () => void;\r\n onRefresh?: () => void;\r\n}\r\n\r\nenum Fields {\r\n Products = \"products\"\r\n}\r\n\r\nconst WhitelistVehiclesForm: React.FC = (props) => {\r\n const {\r\n onClose,\r\n parkingProducts,\r\n getUnlimitedParkingProducts,\r\n disposeError,\r\n } = props;\r\n\r\n const { appState } = useAppContext();\r\n const { setVehicleDragAndDropView } =\r\n useFleetManagerContext();\r\n const {\r\n setSelectedProducts,\r\n } = useImportVehiclesContext();\r\n\r\n const { t } = useTranslation([\"fleetManagerTable\"]);\r\n\r\n useEffect(() => {\r\n return () => disposeError();\r\n }, [disposeError]);\r\n\r\n const handleFormSubmit = (values: IWhitelistVehiclesFormValues) => {\r\n setSelectedProducts(values.products!);\r\n goToUploadFile();\r\n };\r\n \r\n const { validationSchema, formik } = useValidationSchema(\r\n t,\r\n handleFormSubmit\r\n );\r\n\r\n const fetchParkingProducts = () => {\r\n getUnlimitedParkingProducts(appState.user.seasonTicketOwnerCrmId as string, appState.selectedLanguage);\r\n };\r\n\r\n const initForm = () => {\r\n fetchParkingProducts();\r\n };\r\n\r\n useEffect(() => {\r\n initForm();\r\n }, []);\r\n\r\n const handleSelectAll = (parkingProducts: number[]) => {\r\n formik.setFieldValue(Fields.Products, parkingProducts);\r\n };\r\n\r\n const handleDeselectAll = () => {\r\n formik.setFieldValue(Fields.Products, []);\r\n };\r\n\r\n const handleProductChange = (\r\n event: React.ChangeEvent,\r\n parkingProducts: number[]\r\n ) => {\r\n const { value, checked } = event.currentTarget;\r\n const productId = parseInt(value);\r\n\r\n let products = [...parkingProducts];\r\n if (!checked) {\r\n products = without(products, productId);\r\n } else {\r\n products.push(productId);\r\n }\r\n formik.setFieldValue(Fields.Products, products);\r\n };\r\n\r\n const getFormTitle = () => t(\"whitelistVehicles\");\r\n const submitButtonText = () => t(\"delegeeForm:goToUpload\")\r\n const goToUploadFile = (): void => setVehicleDragAndDropView(true);\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n \r\n {getFormTitle()}\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n {(t) => (\r\n handleProductChange(event, formik.values.products ?? [])}\r\n onStateChange={prs => handleSelectAll(prs.filter(pr => pr.checked).map(pr => pr.right?.pmcId!))}\r\n onSelectAll={(ids) => handleSelectAll(ids)}\r\n onDeselectAll={handleDeselectAll}\r\n error={{\r\n hasError: Boolean(formik.errors.products),\r\n message: formik.errors.products,\r\n }}\r\n title={t(\"selectProduct\")}\r\n required={true}\r\n selectAllTooltipText={t(\"selectTooltip\")}\r\n deselectAllTooltipText={t(\"deselectTooltip\")}\r\n selectAllText={t(\"selectAll\")}\r\n deselectAllText={t(\"deselectAll\")}\r\n />\r\n )}\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n {\r\n e?.preventDefault();\r\n formik.handleSubmit();\r\n }}\r\n text={submitButtonText()}\r\n id=\"submit-invite\"\r\n />\r\n \r\n \r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { parkingProducts } = state;\r\n\r\n return {\r\n parkingProducts\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n disposeError: () => dispatch(parkingProductsActions.disposeError()),\r\n getUnlimitedParkingProducts: (seasonTicketOwnerCrmId: string, location: string,) => dispatch(parkingProductsActions.getUnlimitedParkingProducts(seasonTicketOwnerCrmId, location)),\r\n});\r\n\r\ntype StateProps = ReturnType;\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(WhitelistVehiclesForm);\r\n","import React, { memo, useEffect, useRef, useState } from \"react\";\r\nimport { NoPaddingBottomGrid } from \"../../DataTable/DataTableStyledComponents\";\r\nimport CircleImage from \"../../../ui/CircleImage/CircleImage\";\r\nimport XlsFileAdd from \"../../../assets/images/xls-file-add.svg\";\r\nimport XlsFileDropping from \"../../../assets/images/xls-file-dropping.svg\";\r\nimport XlsFileEmpty from \"../../../assets/images/xls-file-empty.svg\";\r\nimport XlsFileChecked from \"../../../assets/images/xls-file-checked.svg\";\r\nimport { variables } from \"../../../theme/variables\";\r\nimport Heading from \"../../../ui/Heading/Heading\";\r\nimport ImgBg from \"../../../ui/ImgBg/ImgBg.\";\r\nimport { contains, first } from \"underscore\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport CustomButton from \"../../../ui/CustomButton/CustomButton\";\r\nimport \"../../../scss/_dragAndDrop.scss\";\r\nimport useAppContext from \"../../../context/hooks/useAppContext\";\r\n\r\nconst { typography } = variables;\r\n\r\nconst WhitelistDragAndDrop: React.FC = (props) => {\r\n const { t } = useTranslation([\"whitelistDragAndDrop\", \"downloadFile\"]);\r\n const [state, setState] = useState(props.state);\r\n const [error, setError] = useState(props.error);\r\n const [whitelistDelta, setWhitelistDelta] = useState(props.whitelistDelta);\r\n const { appState } = useAppContext();\r\n\r\n const fileInput = useRef(null);\r\n const maxFileSizeInMBFallBack = 2;\r\n const bytesPerMB = 1000000;\r\n\r\n useEffect(() => {\r\n if (props.state !== state) {\r\n setState(props.state);\r\n }\r\n if (props.error !== error) {\r\n setError(props.error);\r\n }\r\n\r\n if (props.whitelistDelta !== whitelistDelta) {\r\n setWhitelistDelta(props.whitelistDelta);\r\n }\r\n\r\n if (props.state === \"default\" && fileInput.current) {\r\n fileInput.current.files = null;\r\n fileInput.current.value = \"\";\r\n }\r\n }, [props.state, props.error, props.whitelistDelta]);\r\n\r\n const handleFileSelected = (e: React.ChangeEvent) => {\r\n handleWhitelistFile(e.target.files as FileList);\r\n };\r\n\r\n const handleWhitelistFile = (files: FileList) => {\r\n if (state === \"processing\") return;\r\n\r\n const isValid = isValidDrop(files as FileList);\r\n\r\n if(!isValid){\r\n return;\r\n }\r\n\r\n setState(\"processing\");\r\n\r\n const file = first(files) as File;\r\n props.onFileUploaded(file);\r\n\r\n if (fileInput.current) {\r\n fileInput.current.value = \"\";\r\n }\r\n };\r\n\r\n const handleDragOver = (e: React.DragEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n };\r\n\r\n const handleDragEnter = (e: React.DragEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (state === \"processing\") return;\r\n\r\n if (e.dataTransfer.items && e.dataTransfer.items.length > 0) {\r\n setState(\"dragging\");\r\n }\r\n };\r\n\r\n const handleDragLeave = (e: React.DragEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n setState(\"default\");\r\n };\r\n\r\n const handleDrop = (e: React.DragEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n handleWhitelistFile(e.dataTransfer.files);\r\n };\r\n\r\n const isValidDrop = (files: FileList): boolean => {\r\n if (files.length > 1) {\r\n setState(\"error\");\r\n return false;\r\n }\r\n\r\n const file = first(files);\r\n if (!isSupportedFileType((file as File)?.type)) {\r\n setState(\"error\");\r\n return false;\r\n }\r\n\r\n if(reachedMaxFileSize(file as File)){\r\n setError(\"maxFileSize\");\r\n setState(\"error\");\r\n return false\r\n }\r\n\r\n return true;\r\n };\r\n\r\n const reachedMaxFileSize = (file: File) => {\r\n if (file!.size > (props.maxFileSizeInMB ?? maxFileSizeInMBFallBack) * bytesPerMB) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n const isSupportedFileType = (fileType: string): boolean =>\r\n contains(props.supportedFileTypes, fileType);\r\n\r\n const getImgWrapperSrc = () => {\r\n switch (state) {\r\n case \"error\":\r\n return XlsFileEmpty;\r\n case \"success\":\r\n return XlsFileChecked;\r\n default:\r\n return XlsFileAdd;\r\n }\r\n };\r\n\r\n const emptyFileView = () => {\r\n return (\r\n
\r\n \r\n {t(\"emptyFileDetected\")}\r\n \r\n

\r\n \r\n {t(\"uploadEmptyFile\")}\r\n
\r\n \r\n {t(\"uploadEmptyFileContinue\")}\r\n
\r\n \r\n {t(\"uploadEmptyFileDontContinue\")}\r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n const excelFileSizeToLargeView = () => {\r\n return (\r\n
\r\n \r\n {t(\"noVehiclesUploaded\")}\r\n \r\n

\r\n \r\n {t(\"excelFileSizeToLarge\")}\r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n const incorrectExcelFileView = () => {\r\n return (\r\n
\r\n \r\n {t(\"noVehiclesUploaded\")}\r\n \r\n

\r\n \r\n {t(\"incorrectExcelFile\")}\r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n const invalidValidationView = () => {\r\n return (\r\n
\r\n \r\n {t(\"noVehiclesUploaded\")}\r\n \r\n

\r\n \r\n {t(\"validateVehicleDetailsError\", { errorsCount: props.invalidVehicleCount, })}\r\n \r\n \r\n

\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n const unexpectedErrorView = () => {\r\n return (\r\n
\r\n \r\n {t(\"noVehiclesUploaded\")}\r\n \r\n

\r\n \r\n {t(\"unexpectedError\", { errorsCount: props.invalidVehicleCount, })}\r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n const getSuccessView = () => {\r\n if (!props.whitelistDelta?.hasChanges) {\r\n return successWithoutChangesView();\r\n }\r\n\r\n return successChangesView();\r\n }\r\n\r\n const successChangesView = () => {\r\n return (\r\n
\r\n \r\n {t(\"successFile\")}\r\n \r\n

\r\n \r\n {t(\"successFileChangesUnchanged\", { noChangesCount: props.whitelistDelta?.amountOfVehiclesWithNoChanges, })}\r\n
\r\n {t(\"successFileChangesAdded\", { addedCount: props.whitelistDelta?.amountOfVehiclesToCreate, })}\r\n
\r\n {t(\"successFileChangesUpdated\", { updateCount: props.whitelistDelta?.amountOfVehiclesToUpdate, })}\r\n
\r\n {t(\"successFileChangesRemoved\", { removeCount: props.whitelistDelta?.amountOfVehiclesToDelete, })}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n const successWithoutChangesView = () => {\r\n return (\r\n
\r\n \r\n {t(\"noVehiclesUploaded\")}\r\n \r\n

\r\n \r\n {t(\"noFileChangesDetected\")}\r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n const getErrorView = () => {\r\n\r\n if (error === \"empty\") {\r\n return emptyFileView();\r\n }\r\n\r\n if(error === \"maxFileSize\") {\r\n return excelFileSizeToLargeView();\r\n }\r\n\r\n if(error === \"invalid\") {\r\n return invalidValidationView();\r\n }\r\n\r\n if(error === \"unexpected\") {\r\n return unexpectedErrorView();\r\n }\r\n\r\n if(error == \"invalidFile\"){\r\n return incorrectExcelFileView();\r\n }\r\n\r\n return unexpectedErrorView();\r\n }\r\n\r\n return (\r\n
\r\n \r\n {state !== \"success\" &&\r\n props.error !== \"invalid\" && (\r\n \r\n )}\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n {t(\"dragAndDropHere\")}\r\n \r\n
\r\n {\r\n \r\n {t(\"or\")} \r\n {t(\"browseFiles\")}\r\n \r\n }\r\n
\r\n
\r\n
\r\n { getErrorView() }\r\n
\r\n
\r\n { getSuccessView() }\r\n
\r\n
\r\n \r\n {t(\"releaseFile\")}\r\n \r\n {t(\"releaseFileSubtitle\")}\r\n
\r\n
\r\n \r\n {t(\"processingFile\")}\r\n \r\n {t(\"processingFileSubtitle\")}\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n {t(\"acceptedFileTypes\")}\r\n \r\n \r\n \r\n {t(\"multipleFilesNotSupported\")}\r\n \r\n \r\n \r\n {t(\"maxFileSize\", {\r\n maxFileSize: props.maxFileSizeInMB ?? maxFileSizeInMBFallBack,\r\n })}\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport type DndState = \"default\" | \"dragging\" | \"error\" | \"processing\" | \"success\";\r\n\r\nexport type DndError = \"empty\" | \"invalid\" | \"unexpected\" | \"maxFileSize\" | \"invalidFile\";\r\n\r\nexport type whitelistDelta = {\r\n amountOfVehiclesToUpdate: number;\r\n amountOfVehiclesToCreate: number;\r\n amountOfVehiclesToDelete: number;\r\n amountOfVehiclesWithNoChanges: number;\r\n hasChanges: boolean;\r\n}\r\n\r\ninterface DragAndDropProps {\r\n onFileUploaded: (file: File) => void;\r\n onDownloadErrorFile: () => void;\r\n state: DndState;\r\n error?: DndError;\r\n whitelistDelta?: whitelistDelta;\r\n supportedFileTypes: string[];\r\n extraSuccessMsg?: string;\r\n maxFileSizeInMB?: number;\r\n seasonTicketOwnerCrmId?: string;\r\n invalidVehicleCount?: number;\r\n}\r\n\r\nexport default memo(WhitelistDragAndDrop);\r\n","import { VehicleData } from \"../../../context/store/reducers/importVehicles.reducer\";\r\nimport numberPlateValidator from \"../../../validators/numberplate.validator\";\r\nimport { CountriesNumberPlates } from \"../../../lib/countriesNumberPlates\"\r\nimport { isEmpty } from \"underscore\";\r\nimport { vehicleErrorType } from \"../../../context/store/reducers/importVehicles.reducer\";\r\nimport { TFunction } from \"i18next\";\r\n \r\nexport const validateFile = (vehicles: VehicleData[]): number => {\r\n validateDuplicateNumberPlate(vehicles);\r\n vehicles.forEach(validateVehicle);\r\n\r\n return countVehicleErrors(vehicles);\r\n}\r\n\r\nexport const getValidationErrorMessage = (vehicleErrorType: vehicleErrorType, t: TFunction): string => {\r\n const vehicleErrorMessages = {\r\n \"invalidDescriptionLength\": t(\"invalidDescriptionLengthMessage\"),\r\n \"invalidGermanNumberPlate\": t(\"invalidGermanNumberPlateMessage\"),\r\n \"invalidNumberPlate\": t(\"invalidNumberPlateMessage\"),\r\n \"invalidCountryCode\": t(\"invalidCountryCodeMessage\"),\r\n \"missingNumberPlate\": t(\"missingNumberPlateMessage\"),\r\n \"missingCountryCode\": t(\"missingCountryCodeMessage\"),\r\n \"duplicatedNumberPlate\": t(\"duplicatedNumberPlateMessage\")\r\n };\r\n\r\n return vehicleErrorMessages[vehicleErrorType];\r\n}\r\n\r\nconst validateVehicle = (vehicle: VehicleData) => {\r\n validateCountry(vehicle);\r\n validateNumberplate(vehicle);\r\n validateDescription(vehicle);\r\n}\r\n\r\nconst validateDuplicateNumberPlate = (vehicles: VehicleData[]) => {\r\n var vehicleCount = {};\r\n vehicles.forEach(v => { \r\n if(!isEmpty(v.country.value) && !isEmpty(v.numberPlate.value) ){\r\n const key = getVehicleKey(v.country.value, v.numberPlate.value);\r\n vehicleCount[key] = (vehicleCount[key]||0) + 1;\r\n }\r\n });\r\n\r\n vehicles.forEach(v => {\r\n const key = getVehicleKey(v.country.value, v.numberPlate.value);\r\n const hasDuplicate = vehicleCount[key] > 1;\r\n\r\n if(hasDuplicate){\r\n v.numberPlate.isValid = false;\r\n v.numberPlate.errorMessageKey = \"duplicatedNumberPlate\";\r\n }\r\n });\r\n};\r\n\r\nconst getVehicleKey = (countryCode: string, numberplate: string): string => {\r\n return countryCode?.toLowerCase() + \".\" + numberplate?.toLowerCase();\r\n}\r\n\r\nconst validateCountry = (vehicle: VehicleData) => {\r\n const country = vehicle.country.value;\r\n\r\n if(isEmpty(country)){\r\n vehicle.country.isValid = false;\r\n vehicle.country.errorMessageKey = \"missingCountryCode\";\r\n } else {\r\n vehicle.country.isValid = new CountriesNumberPlates().isValidNumberPlateCode(country);\r\n vehicle.country.errorMessageKey = vehicle.country.isValid ? undefined : \"invalidCountryCode\";\r\n }\r\n}\r\n\r\nconst validateNumberplate = (vehicle: VehicleData) => {\r\n const country = vehicle.country.value;\r\n const numberPlate = vehicle.numberPlate.value;\r\n\r\n if(isEmpty(numberPlate)){\r\n vehicle.numberPlate.isValid = false;\r\n vehicle.numberPlate.errorMessageKey = \"missingNumberPlate\";\r\n } else if(vehicle.numberPlate.isValid) {\r\n if(vehicle.country.isValid && country.toLowerCase() === \"d\"){\r\n vehicle.numberPlate.isValid = numberPlateValidator.isValidGermanNumberPlate(numberPlate);\r\n vehicle.numberPlate.errorMessageKey = vehicle.numberPlate.isValid ? undefined : \"invalidGermanNumberPlate\";\r\n } else {\r\n vehicle.numberPlate.isValid = numberPlateValidator.isValidNumberPlate(numberPlate);\r\n vehicle.numberPlate.errorMessageKey = vehicle.numberPlate.isValid ? undefined : \"invalidNumberPlate\";\r\n }\r\n }\r\n}\r\n\r\nconst validateDescription = (vehicle: VehicleData) => {\r\n const isValidDescription = vehicle.description.value === undefined || vehicle.description.value.length <= 100;\r\n if (!isValidDescription){\r\n vehicle.description.errorMessageKey = \"invalidDescriptionLength\";\r\n vehicle.description.isValid = false;\r\n }\r\n}\r\n\r\nconst countVehicleErrors = (vehicles: VehicleData[]): number => {\r\n return vehicles.reduce((amount, vehicle) => {\r\n amount += vehicle.country.isValid ? 0 : 1;\r\n amount += vehicle.description.isValid ? 0 : 1;\r\n amount += vehicle.numberPlate.isValid ? 0 : 1;\r\n\r\n return amount;\r\n }, 0);\r\n}\r\n ","import React, { Dispatch, useState } from \"react\";\r\nimport { Container } from \"@material-ui/core\";\r\nimport { KeyboardArrowDown } from \"@material-ui/icons\";\r\nimport { NoPaddingBottomGrid } from \"../../DataTable/DataTableStyledComponents\";\r\nimport Heading from \"../../../ui/Heading/Heading\";\r\nimport { variables } from \"../../../theme/variables\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport * as XLSX from \"xlsx\";\r\nimport { isEmpty } from \"underscore\";\r\nimport { connect } from \"react-redux\";\r\nimport useAppContext from \"../../../context/hooks/useAppContext\";\r\nimport { VehicleData } from \"../../../context/store/reducers/importVehicles.reducer\";\r\nimport useImportVehiclesContext from \"../../../context/hooks/useImportVehiclesContext\";\r\nimport WhitelistDragAndDrop, { DndError, DndState, whitelistDelta } from \"../WhitelistDragAndDrop/WhitelistDragAndDrop\";\r\nimport { getValidationErrorMessage, validateFile } from \"./ValidateVehicleBulkFile\";\r\nimport { CalculatedWhitelistDeltaResponse, CalculateWhitelistDeltaRequest, VehicleInfo } from \"../../../models/vehicle-assignments/CalculateWhitelistDelta\";\r\nimport parkingProductsActions from \"../../../store/actions/parkingProducts.actions\";\r\nimport { convertNumberPlatePrefixToIsoCountryCode } from \"../../../lib/countriesNumberPlates\";\r\n\r\nconst { typography } = variables;\r\n\r\nconst dprSheetName = \"Import Vehicles\";\r\nconst countryName = \"Country\";\r\nconst numberPlateName = \"Number Plate\";\r\nconst descriptionName = \"Description\";\r\nconst rowNumber = \"__rowNum__\";\r\n\r\nconst VehiclesImportDragAndDrop: React.FC = (\r\n props\r\n) => {\r\n const [state, setState] = useState(\"default\");\r\n const [error, setError] = useState(undefined);\r\n const [invalidVehicleCount, setInvalidVehicleCount] = useState();\r\n const [fileReference, setFileReference] = useState();\r\n const [whitelistDelta, setWhitelistDelta] = useState(undefined);\r\n const [validateVehicles, setValidateVehicles] = useState([]);\r\n const { appState } = useAppContext();\r\n\r\n const { importVehiclesState } = useImportVehiclesContext();\r\n\r\n const { t } = useTranslation([\"whitelistVehicleForm\"]);\r\n const supportedFileTypes = [\r\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n \"application/vnd.ms-excel\",\r\n ];\r\n\r\n const handleFileUpload = (file: File) => {\r\n setState(\"processing\");\r\n props.onProcessing(true);\r\n readVehiclesFromXls(file);\r\n };\r\n\r\n const readVehiclesFromXls = (file: File) => {\r\n const reader = new FileReader();\r\n reader.readAsBinaryString(file);\r\n reader.onload = handleUploadedData;\r\n };\r\n\r\n const handleUploadedData = (e: ProgressEvent) => {\r\n const vehiclesToImport: VehicleData[] = [];\r\n\r\n const data = e.target?.result;\r\n const wb = XLSX.read(data, { type: \"binary\" });\r\n\r\n if (wb.SheetNames && wb.SheetNames.includes(dprSheetName)) {\r\n readDataFromExcel(wb, vehiclesToImport);\r\n\r\n const fileIsEmpty = isEmpty(vehiclesToImport);\r\n if (fileIsEmpty) {\r\n setState(\"error\");\r\n setError(\"empty\");\r\n props.onProcessing(false);\r\n props.onWhitelistDelta(true);\r\n return;\r\n }\r\n\r\n const products = [...importVehiclesState.products];\r\n\r\n const countValidationErrors = validateFile(vehiclesToImport);\r\n setValidateVehicles(vehiclesToImport);\r\n props.onFileProcessed(vehiclesToImport);\r\n \r\n if (countValidationErrors === 0) {\r\n const req: CalculateWhitelistDeltaRequest = {\r\n seasonTicketOwnerCrmId: appState.user.seasonTicketOwnerCrmId as string,\r\n pmcIds: products,\r\n vehicles: vehiclesToImport.map(v => ({\r\n value: v.numberPlate.value,\r\n countryCode: convertNumberPlatePrefixToIsoCountryCode(v.country.value.toUpperCase()), \r\n description: v.description.value\r\n } as VehicleInfo) ) \r\n };\r\n\r\n props.calculateWhitelistDelta(\r\n req,\r\n (data) => {\r\n\r\n props.onProcessing(false);\r\n\r\n const delta: whitelistDelta = {\r\n amountOfVehiclesToCreate: data.amountOfVehiclesToCreate,\r\n amountOfVehiclesToDelete: data.amountOfVehiclesToDelete,\r\n amountOfVehiclesToUpdate: data.amountOfVehiclesToUpdate,\r\n amountOfVehiclesWithNoChanges: data.amountOfVehiclesWithNoChanges,\r\n hasChanges: data.hasChanges\r\n };\r\n\r\n props.onWhitelistDelta(delta.hasChanges);\r\n setFileReference(data.fileReference);\r\n setWhitelistDelta(delta);\r\n setState(\"success\");\r\n },\r\n (errorCode) => {\r\n setState(\"error\");\r\n setError(\"unexpected\");\r\n });\r\n }\r\n else {\r\n setState(\"error\");\r\n setError(\"invalid\");\r\n setInvalidVehicleCount(countValidationErrors);\r\n } \r\n } else {\r\n setState(\"error\");\r\n setError(\"invalidFile\");\r\n }\r\n };\r\n\r\n const readDataFromExcel = (wb: XLSX.WorkBook, vehiclesToImport: VehicleData[]) => {\r\n const rows: any[] = XLSX.utils.sheet_to_json(wb.Sheets[dprSheetName]);\r\n rows.forEach((row) => {\r\n if (row[countryName] || row[numberPlateName] || row[descriptionName]) {\r\n let vehicle: VehicleData;\r\n vehicle = {\r\n country: { value: convertFileValueToString(row[countryName]), isValid: true },\r\n numberPlate: { value: convertFileValueToString(row[numberPlateName]), isValid: true },\r\n description: { value: convertFileValueToString(row[descriptionName]), isValid: true },\r\n lineNumber: row[rowNumber] + 1\r\n };\r\n vehiclesToImport.push(vehicle);\r\n }\r\n });\r\n }\r\n\r\n const convertFileValueToString = (value: any): string => {\r\n return isEmpty(value) ? '' : String(value);\r\n }\r\n\r\n const createVehicleErrorFileData = (vehicleToImport: VehicleData[]) => {\r\n const errorData: VehicleErrorData[] = [];\r\n\r\n vehicleToImport.forEach(x => {\r\n if(!x.country.isValid){\r\n errorData.push(mapVehicleErrorData(x, getValidationErrorMessage(x.country.errorMessageKey!, t)))\r\n }\r\n\r\n if(!x.description.isValid){\r\n errorData.push(mapVehicleErrorData(x, getValidationErrorMessage(x.description.errorMessageKey!, t)))\r\n }\r\n\r\n if(!x.numberPlate.isValid){\r\n errorData.push(mapVehicleErrorData(x, getValidationErrorMessage(x.numberPlate.errorMessageKey!, t)))\r\n }\r\n });\r\n\r\n return errorData;\r\n }\r\n\r\n const mapVehicleErrorData = (vehicleToImport: VehicleData, errorMessage: string) => {\r\n const error: VehicleErrorData = {\r\n country: vehicleToImport.country.value,\r\n numberPlate: vehicleToImport.numberPlate.value,\r\n description: vehicleToImport.description.value,\r\n errorMessage: errorMessage\r\n };\r\n\r\n return error;\r\n }\r\n\r\n const handleDownloadFile = () => {\r\n const errorData = createVehicleErrorFileData(validateVehicles);\r\n const csvData = createCsvFile(errorData);\r\n\r\n // Add encoding for deserializing punctuation marks correctly, ex: déjà-> déjà\r\n const url = URL.createObjectURL(new Blob([new Uint8Array([0xEF, 0xBB, 0xBF]),csvData],{ type: \"text/plain;charset=utf-8\" }));\r\n const link = document.createElement(\"a\");\r\n link.href = url;\r\n const date = new Date();\r\n const dateValue = `${date.getDate()}-${date.getMonth() + 1}-${date.getFullYear()}-${date.getHours()}${date.getMinutes()}`;\r\n link.download = `validationNP_errors-${dateValue}.csv`;\r\n document.body.appendChild(link);\r\n\r\n link.click();\r\n\r\n document.body.removeChild(link);\r\n window.URL.revokeObjectURL(url);\r\n }\r\n\r\n const createCsvFile = (data: VehicleErrorData[]) => {\r\n let csvRows: string[] = [];\r\n\r\n const headers = Object.keys(data[0]);\r\n csvRows.push(headers.join(','));\r\n\r\n data.forEach(x => {\r\n const values = Object.values(x).join(',');\r\n csvRows.push(values);\r\n });\r\n\r\n return csvRows.join('\\n');\r\n }\r\n\r\n\r\n if (!props.show) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {error === undefined && (\r\n \r\n \r\n \r\n {t(\"uploadFile\")}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n {t(\"downloadTemplate\")}\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
)}\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport type VehicleErrorData = {\r\n country: string;\r\n numberPlate: string;\r\n description: string;\r\n errorMessage: string;\r\n}\r\n\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n calculateWhitelistDelta: (\r\n req: CalculateWhitelistDeltaRequest,\r\n onSuccess: (response: CalculatedWhitelistDeltaResponse) => void,\r\n onError: (errorCode: string) => void) =>\r\n dispatch(parkingProductsActions.calculateWhitelistDelta(\r\n req,\r\n onSuccess,\r\n onError))\r\n});\r\n\r\ninterface VehiclesImportDragAndDropProps extends DispatchProps {\r\n show: boolean;\r\n onFileProcessed: (data: VehicleData[]) => void;\r\n onWhitelistDelta: (hasChanges: boolean) => void;\r\n onProcessing: (processing: boolean) => void;\r\n}\r\n\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(null, mapDispatchToProps)(VehiclesImportDragAndDrop);\r\n","import \"../../../scss/_uploadView.scss\";\r\nimport React, { useState } from \"react\";\r\nimport { Container, Button, Stepper, Step, StepLabel } from \"@material-ui/core\";\r\nimport Heading from \"../../../ui/Heading/Heading\";\r\nimport { variables } from \"../../../theme/variables\";\r\nimport { CloseOutlined } from \"@material-ui/icons\";\r\nimport CustomButton from \"../../../ui/CustomButton/CustomButton\";\r\nimport useFleetManagerContext from \"../../../context/hooks/useFleetManagerContext\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport ActionDrawer from \"../../../ui/ActionDrawer/ActionDrawer\";\r\nimport CloseImportWarning from \"../../Warnings/CloseImportWarning\";\r\nimport { connect } from \"react-redux\";\r\nimport VehiclesImportDragAndDrop from \"../VehiclesImportDragAndDrop/VehiclesImportDragAndDrop\";\r\nimport useSmartState from \"../../../utils/hooks/useSmartState\";\r\nimport useImportVehiclesContext from \"../../../context/hooks/useImportVehiclesContext\";\r\nimport { isEmpty } from \"underscore\";\r\nimport parkingProductsActions from \"../../../store/actions/parkingProducts.actions\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../store\";\r\nimport useAppContext from \"../../../context/hooks/useAppContext\";\r\n\r\nconst { typography } = variables;\r\n\r\nconst WhitelistVehiclesUploadView = () => {\r\n const { t } = useTranslation([\"whitelistVehicleForm\"]);\r\n const {\r\n fleetManagerState,\r\n setVehicleDragAndDropView,\r\n toggleCloseImportWarning: toggleCloseImportWarning, \r\n } = useFleetManagerContext();\r\n \r\n const closeUploadView = () => {\r\n setVehicleDragAndDropView(false);\r\n setVehicleData([]);\r\n }\r\n\r\n const initialState: VehicleDndState = {\r\n step: DndStep.FileUpload,\r\n afterWarningConfirmationAction: closeUploadView,\r\n showOnlyErrors: true,\r\n showConfirmationScreen: false,\r\n };\r\n \r\n const { state, updateState } = useSmartState(initialState);\r\n const { appState } = useAppContext();\r\n const dispatch = useAppDispatch();\r\n const {\r\n importVehiclesState,\r\n setVehicleData,\r\n setWhitelistDeltaChanges,\r\n setProcessing, \r\n } = useImportVehiclesContext();\r\n \r\n const parkingProducts = useAppSelector((state) => state.parkingProducts.locatedParkingProducts.data)\r\n ?.flatMap(l => l.parkingProducts)\r\n .map(p => ({ pmcId: p.pmcId!, seasonTicketId: p.id!, countryCode: p.countryCode! })) || [];\r\n\r\n const fileReference = useAppSelector((state) => state.parkingProducts.calculatedWhitelistDelta.fileReference);\r\n\r\n const onClose = () => {\r\n if (shouldShowDataRemovalWarning()) {\r\n setAfterWarningConfirmationAction(closeUploadView);\r\n toggleCloseImportWarning();\r\n return;\r\n }\r\n\r\n closeUploadView();\r\n };\r\n\r\n const shouldShowDataRemovalWarning = () => {\r\n return (\r\n importVehiclesState.processing ||\r\n (importVehiclesState.data &&\r\n importVehiclesState.data.filter(\r\n (d) => d.country.value !== \"\" || d.numberPlate.value !== \"\" || d.description.value !== \"\"\r\n ).length > 0)\r\n );\r\n };\r\n\r\n const startBulkVehicleAssignment = () => \r\n dispatch(parkingProductsActions.startBulkVehicleAssignment(appState.user.seasonTicketOwnerCrmId!, fileReference!, { parkingProducts: parkingProducts}) as any);\r\n \r\n \r\n const isStartBulkVehicleAssignmentButtonDisabled = (): boolean => {\r\n return (\r\n importVehiclesState.data.length > 0 &&\r\n importVehiclesState.data.some((d) => !d.country.isValid || !d.numberPlate.isValid || !d.description.isValid)\r\n ) || state.step === DndStep.BulkInProgress || !importVehiclesState.hasWhitelistChanges;\r\n }\r\n\r\n const setAfterWarningConfirmationAction = (\r\n afterWarningConfirmationAction: () => void\r\n ) => updateState({ afterWarningConfirmationAction });\r\n \r\n return (\r\n
\r\n
\r\n \r\n \r\n {t(\"whitelistVehicles\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n DndStep.FileUpload}\r\n >\r\n \r\n \r\n {(\r\n \r\n \r\n \r\n )\r\n }\r\n \r\n \r\n
\r\n
\r\n
\r\n setVehicleData(data)}\r\n onWhitelistDelta={(onChanges) => setWhitelistDeltaChanges(onChanges)}\r\n onProcessing={(processing) => setProcessing(processing)}\r\n />\r\n
\r\n
\r\n
\r\n \r\n \r\n {(\r\n startBulkVehicleAssignment()} \r\n text={t(\"whitelistVehicles\")}\r\n disabled={ isStartBulkVehicleAssignmentButtonDisabled() }\r\n />\r\n )}\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nenum DndStep {\r\n FileUpload = 0,\r\n BulkInProgress = 1,\r\n}\r\n\r\ninterface VehicleDndState {\r\n step?: DndStep;\r\n afterWarningConfirmationAction?: () => void;\r\n showOnlyErrors?: boolean;\r\n showConfirmationScreen?: boolean;\r\n}\r\n\r\nexport default connect(null,)(WhitelistVehiclesUploadView);\r\n","import React, { Dispatch, useEffect, useState } from \"react\";\r\nimport { Grid } from \"@material-ui/core\";\r\nimport Section from \"../../../ui/Section/Section\";\r\nimport { variables } from \"../../../theme/variables\";\r\nimport DelegeeForm from \"../../../components/DelegeeForm/DelegeeForm\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport ActionDrawer from \"../../../ui/ActionDrawer/ActionDrawer\";\r\nimport { Helmet } from \"react-helmet\";\r\nimport Spacer from \"../../../ui/Spacer/Spacer\";\r\nimport useMyProductsContext from \"../../../context/hooks/useMyProductsContext\";\r\nimport LocationCards from \"./LocationCards/LocationCards\";\r\nimport DeleteDelegeeWarning from \"../../../components/Warnings/DeleteDelegeeWarning\";\r\nimport BatchRevokeParkingRightsWarning from \"../../../components/Warnings/BatchRevokeParkingRightsWarning\";\r\nimport BatchRevokeVehicleAssignmentWarning from \"../../../components/Warnings/BatchRevokeVehicleAssignmentWarning\";\r\nimport DeleteVehiclesAssignmentWarning from \"../../../components/Warnings/DeleteVehiclesAssignmentWarning\";\r\nimport { Position } from \"../../../components/LocationCard/locationCard.business\";\r\nimport useFleetManagerContext from \"../../../context/hooks/useFleetManagerContext\";\r\nimport parkingProductsActions from \"../../../store/actions/parkingProducts.actions\";\r\nimport useAppContext from \"../../../context/hooks/useAppContext\";\r\nimport { connect } from \"react-redux\";\r\nimport { WithFiltersAndPaging } from \"../../../models/filters/WithFiltersAndPaging\";\r\nimport { ForFleetManager } from \"../../../models/ForFleetManager\";\r\nimport { DataTableContextFilters, useDataTableContext } from \"../../../components/DataTable/DataTableContext/DataTableContextProvider\";\r\nimport { FmpFilters } from \"../../../constants/filtering.constants\";\r\nimport { FilterType } from \"../../../components/DataTable/DataTableFilters/DataTableFilters\";\r\nimport MultipleDelegeesForm from \"../../../components/MultipleDelegeesForm/MultipleDelegeesForm\";\r\nimport \"./_myProducts.scss\";\r\nimport ImportDelegationsContextProvider from \"../../../context/ImportDelegationsContext\";\r\nimport ImportVehiclesContext from \"../../../context/ImportVehiclesContext\";\r\nimport { useOnBulkImportFinishedCallback } from \"../../../hooks/useOnBulkImportFinishedCallback\";\r\nimport TableSwitcher, { TabOption } from \"./ParkingRightsDataTable/TableSwitcher\";\r\nimport FleetMembersTable from \"./ParkingRightsDataTable/FleetMembersTable\";\r\nimport VehiclesTable from \"./ParkingRightsDataTable/VehiclesTable\";\r\nimport { useAppSelector } from \"../../../store\";\r\nimport { selectUseBulkVehicleAssignments, selectUseSingleDirectVehicleAssignment, useCurrentlySelectedParkingProduct } from \"./ParkingRightsDataTable/common\";\r\nimport VehicleForm from \"../../../components/VehicleForm/VehicleForm\";\r\nimport { VehicleAssignmentProduct } from \"../../../models/vehicle-assignments/VehicleAssignmentProduct\";\r\nimport RevokeVehicleAssignmentWarning from \"../../../components/Warnings/RevokeVehicleAssignmentWarning\";\r\nimport RevokeParkingRightsWarning from \"../../../components/Warnings/RevokeParkingRightsWarning\";\r\nimport WhitelistVehiclesForm from \"../../../components/WhitelistVehiclesForm/WhitelistVehiclesForm\";\r\nimport WhitelistVehiclesUploadView from \"../../../components/WhitelistVehiclesForm/WhitelistVehiclesUploadView/WhitelistVehiclesUploadView\";\r\n\r\nconst { colors } = variables;\r\n\r\ninterface IProps extends DispatchProps { }\r\nconst MyProducts = ({ getDelegatedParkingRights, getLocatedParkingProducts, getVehicles }: IProps) => {\r\n const { appState } = useAppContext();\r\n const {\r\n myProductsState,\r\n resetContext: resetMyProductsContext,\r\n setSorting\r\n } = useMyProductsContext();\r\n const { state: dataTable, resetContext, resetFilters, resetPageNumber, resetPageSize } = useDataTableContext();\r\n\r\n const {\r\n fleetManagerState,\r\n toggleAddDelegee,\r\n toggleAssignVehicle,\r\n toggleEditVehicleAssignment,\r\n toggleEditDelegee,\r\n toggleWhitelistVehicles,\r\n toggleDeleteDelegeeWarning,\r\n toggleBatchRevokeParkingRightsWarning,\r\n toggleBatchRevokeVehicleAssignmentsWarning,\r\n toggleRevokeParkingRightsWarning,\r\n toggleRevokeVehicleAssignmentsWarning,\r\n toggleDeleteVehicleAssignmentsWarning,\r\n setSelectedParkingRightIds,\r\n resetContext: resetFleetManagerContext,\r\n } = useFleetManagerContext();\r\n\r\n const [tab, setTab] = useState(TabOption.FleetMembers);\r\n\r\n const useSingleDirectVehicleAssignment = useAppSelector(selectUseSingleDirectVehicleAssignment);\r\n const useBulkVehicleAssignments = useAppSelector(selectUseBulkVehicleAssignments);\r\n\r\n const selectedLocatedProduct = useCurrentlySelectedParkingProduct();\r\n const switcher = !useSingleDirectVehicleAssignment || useBulkVehicleAssignments ? (\r\n <>\r\n ) : (\r\n {\r\n if (tab !== newTab) {\r\n resetPageNumber();\r\n resetPageSize();\r\n setSelectedParkingRightIds([]);\r\n\r\n let sorting = \"\";\r\n switch (newTab) {\r\n case TabOption.FleetMembers:\r\n sorting = \"invitationDate\";\r\n break;\r\n case TabOption.Vehicles:\r\n sorting = \"assignedDate\";\r\n break;\r\n }\r\n\r\n resetContext();\r\n setSorting(sorting, true);\r\n }\r\n setTab(newTab);\r\n }}\r\n getCount={(option) => {\r\n switch (option) {\r\n case TabOption.FleetMembers:\r\n return selectedLocatedProduct?.totalDelegatedParkingRights ?? 0;\r\n case TabOption.Vehicles:\r\n return selectedLocatedProduct?.totalAssignedParkingRights ?? 0\r\n }\r\n }}\r\n />\r\n );\r\n const { t } = useTranslation([\"myProducts\", \"globals\", \"dataTable\"]);\r\n const getMetaTitle = () =>\r\n fleetManagerState.showDelegeeDetails ? t(\"addDelegee\") : t(\"myProducts\");\r\n\r\n useEffect(() => {\r\n if (useBulkVehicleAssignments) {\r\n setTab(TabOption.Vehicles);\r\n }\r\n }, [useBulkVehicleAssignments]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n resetMyProductsContext();\r\n resetFleetManagerContext();\r\n resetContext();\r\n };\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n const onDelegeeFormClose = () => {\r\n if (fleetManagerState.isEditDelegeeMode) {\r\n toggleEditDelegee(\"\");\r\n } else {\r\n toggleAddDelegee();\r\n }\r\n };\r\n\r\n const onVehicleFormClose = () => {\r\n if (fleetManagerState.isEditVehicleAssignmentMode) {\r\n toggleEditVehicleAssignment();\r\n } else {\r\n toggleAssignVehicle();\r\n }\r\n };\r\n\r\n const onWhitelistVehiclesClose = () => {\r\n toggleWhitelistVehicles();\r\n };\r\n\r\n const [position, setPosition] = useState({\r\n left: 0,\r\n right: 0,\r\n width: 0,\r\n });\r\n\r\n const onLocationCardSelect = (pos?: Position) => {\r\n resetFilters();\r\n setSelectedParkingRightIds([]);\r\n\r\n setPosition({\r\n ...position,\r\n left: pos?.left as number,\r\n right: pos?.right as number,\r\n width: pos?.width as number,\r\n });\r\n };\r\n\r\n const onRefresh = (vehiclesToExclude?: VehicleAssignmentProduct[], excludeByVehicleAssignmentId?: boolean) => {\r\n getLocatedParkingProducts(\r\n appState.user.seasonTicketOwnerCrmId as string,\r\n appState.selectedLanguage\r\n );\r\n\r\n const delegatedParkingRightsRequest: WithFiltersAndPaging = {\r\n entity: {\r\n seasonTicketOwnerCrmId: appState.user.seasonTicketOwnerCrmId as string,\r\n language: appState.selectedLanguage,\r\n },\r\n pagination: {\r\n pageSize: dataTable.pageSize!,\r\n pageNumber: dataTable.pageNumber!,\r\n },\r\n filters: [\r\n {\r\n key: FmpFilters.placeId,\r\n type: FilterType.QueryParam,\r\n value: myProductsState.selectedLocation.toString(),\r\n },\r\n ...(dataTable.filters as DataTableContextFilters[]),\r\n ],\r\n };\r\n\r\n if (tab === TabOption.FleetMembers) {\r\n getDelegatedParkingRights(delegatedParkingRightsRequest);\r\n } else {\r\n getVehicles(delegatedParkingRightsRequest, vehiclesToExclude, excludeByVehicleAssignmentId);\r\n }\r\n };\r\n\r\n useOnBulkImportFinishedCallback(onRefresh);\r\n\r\n const getDeleteDelegeeWarningText = (parkingRightsCount: number): string =>\r\n t(\"deleteDelegeeWarning.warning\", { count: parkingRightsCount });\r\n\r\n const getDeleteDelegeeWarningDetails = (parkingRightsCount: number): string =>\r\n t(\"deleteDelegeeWarning.details\", { count: parkingRightsCount });\r\n\r\n return (\r\n \r\n \r\n {`Q-Park | ${getMetaTitle()}`}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {fleetManagerState.showDelegeeDetails && }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {myProductsState.selectedLocation !== 0 && (\r\n \r\n \r\n {tab === TabOption.FleetMembers &&\r\n \r\n }\r\n {tab === TabOption.Vehicles &&\r\n \r\n }\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n getLocatedParkingProducts: (seasonTicketOwnerCrmId: string, language: string) => {\r\n dispatch(parkingProductsActions.getLocatedParkingProducts(seasonTicketOwnerCrmId, language));\r\n },\r\n getDelegatedParkingRights: (request: WithFiltersAndPaging) =>\r\n dispatch(parkingProductsActions.getDelegatedParkingProducts(request)),\r\n\r\n getVehicles: (request: WithFiltersAndPaging, vehiclesToExclude?: VehicleAssignmentProduct[], excludeByVehicleAssignmentId?: boolean) => {\r\n dispatch(parkingProductsActions.getVehicles(request, vehiclesToExclude, excludeByVehicleAssignmentId));\r\n }\r\n});\r\n\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(null, mapDispatchToProps)(MyProducts);\r\n","import React from \"react\";\r\nimport DataTableContextProvider from \"../../components/DataTable/DataTableContext/DataTableContextProvider\";\r\nimport MyProducts from \"../../containers/FleetManager/MyProducts/MyProducts\";\r\nimport MyProductsContextProvider from \"../../context/MyProductsContextProvider\";\r\nimport ImportDelegationsContextProvider from \"../../context/ImportDelegationsContext\";\r\n\r\nconst MyProductsPage = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default MyProductsPage;\r\n","export const myFleetContextTypes = {\r\n RESET_MYFLEET_CONTEXT: \"context/RESET_MYFLEET_CONTEXT\",\r\n SET_SORTING: \"context/SET_SORTING\",\r\n} as const;\r\n\r\nexport type MyFleetContextAction =\r\n | { type: typeof myFleetContextTypes.SET_SORTING; payload: { by: string; descending?: boolean } }\r\n | { type: typeof myFleetContextTypes.RESET_MYFLEET_CONTEXT };\r\n","import { MyFleetContextAction, myFleetContextTypes } from \"../actions/myFleet.types\";\r\n\r\nexport type MyFleetContextDataGridState = {\r\n sortBy?: string;\r\n orderDesc?: boolean;\r\n};\r\n\r\nexport const initialState: MyFleetContextDataGridState = {\r\n sortBy: \"invitationDate\",\r\n orderDesc: true,\r\n};\r\n\r\nexport default (\r\n state: MyFleetContextDataGridState = initialState,\r\n action: MyFleetContextAction\r\n): MyFleetContextDataGridState => {\r\n switch (action.type) {\r\n case myFleetContextTypes.SET_SORTING: {\r\n const payloadDesc = action.payload.descending;\r\n return {\r\n ...state,\r\n sortBy: action.payload.by,\r\n orderDesc: typeof payloadDesc === \"boolean\" ? payloadDesc : !state.orderDesc,\r\n };\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n","import React, { createContext, useReducer } from \"react\";\r\nimport { myFleetContextTypes } from \"./store/actions/myFleet.types\";\r\nimport { MyFleetContextDataGridState } from \"./store/reducers/myFleet.reducer\";\r\nimport myFleetReducer, { initialState } from \"./store/reducers/myFleet.reducer\";\r\n\r\ntype MyFleetContextType = {\r\n myFleetContextState: MyFleetContextDataGridState;\r\n setSorting: (sortBy: string, descending?: boolean) => void;\r\n};\r\n\r\nexport const MyFleetContext = createContext(null);\r\n\r\nconst MyFleetContextProvider: React.FC = ({ children }) => {\r\n const [ myFleetContextState, dispatch ] = useReducer(myFleetReducer, initialState);\r\n\r\n const setSorting = (sortBy: string, descending?: boolean) => {\r\n dispatch({\r\n type: myFleetContextTypes.SET_SORTING,\r\n payload: { by: sortBy, descending },\r\n });\r\n };\r\n\r\n const store: MyFleetContextType = {\r\n myFleetContextState,\r\n setSorting,\r\n };\r\n\r\n return {children};\r\n};\r\n\r\nexport default MyFleetContextProvider;\r\n","import { useContext } from \"react\";\r\nimport { MyFleetContext } from \"../MyFleetContextProvider\";\r\n\r\nconst useMyFleetContext = () => {\r\n const context = useContext(MyFleetContext);\r\n\r\n if (context === null) {\r\n throw new Error('You forgot to use MyFleetContextProvider');\r\n }\r\n\r\n return context;\r\n};\r\n\r\nexport default useMyFleetContext;\r\n","import React from \"react\";\r\nimport styled from \"styled-components\";\r\nimport { isEmpty, contains, first, without, min } from \"underscore\";\r\nimport { Statuses } from \"../../../components/DelegeeStatus/DelegeeStatus\";\r\nimport ProductsTooltip from \"../../../components/LocationCard/ProductsTooltip/ProductsTooltip\";\r\nimport { DelegatedParkingProductModel } from \"../../../models/delegations/DelegatedParkingProductsModel\";\r\nimport { ParkingProductModel } from \"../../../models/ParkingProductModel\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\nimport { QParkChip } from \"../../../components/QParkChip\";\r\n\r\n\r\nexport const getCreatedDate = (products: DelegatedParkingProductModel[]): Date | null => {\r\n const createDates = products.map((p) => new Date(p.created));\r\n\r\n if (isEmpty(createDates)) {\r\n return null;\r\n }\r\n\r\n return min(createDates) as Date;\r\n};\r\n\r\nexport const getStatus = (products: DelegatedParkingProductModel[]): number | null => {\r\n const statuses = products.map((p) => p.status);\r\n\r\n if (isEmpty(statuses)) {\r\n return null;\r\n }\r\n\r\n if (contains(statuses, Statuses.Accepted)) {\r\n return Statuses.Accepted;\r\n }\r\n\r\n return Statuses.Pending;\r\n};\r\n\r\nconst TooltipWrapper = styled.div`\r\n display: flex;\r\n width: 100%;\r\n`;\r\n\r\nconst Wrapper = styled.div`\r\n display: flex;\r\n flex-flow: row nowrap;\r\n`;\r\n\r\nexport const toProductsJsx = (products: DelegatedParkingProductModel[]): JSX.Element | null => {\r\n if (isEmpty(products)) {\r\n return null;\r\n }\r\n\r\n const elements: JSX.Element[] = [];\r\n const firstProduct = first(products);\r\n\r\n elements.push(\r\n \r\n );\r\n\r\n if (products.length > 1) {\r\n const parkingProducts: ParkingProductModel[] = without(products, firstProduct!).map(\r\n (pp: DelegatedParkingProductModel) => ({\r\n pmcName: pp.name,\r\n location: pp.location,\r\n })\r\n );\r\n\r\n elements.push(\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return {elements};\r\n};","import { TFunction } from \"i18next\";\r\nimport { isUndefined } from \"underscore\";\r\nimport { DataTableContextState } from \"../../../components/DataTable/DataTableContext/DataTableContextProvider\";\r\nimport { FleetManagerContextState } from \"../../../context/store/reducers/fleetManagerContext.reducer\";\r\n\r\nexport const getSelectedParkingRightIds = (\r\n fleetManagerState: FleetManagerContextState,\r\n dataTableState: DataTableContextState,\r\n delegees: any\r\n) => {\r\n return fleetManagerState.selectedRowKeys.flatMap((id) =>\r\n getParkingRightIdsByRegistrationId(id, delegees, dataTableState)\r\n );\r\n};\r\n\r\nexport const getSelectedParkingRightIdSingle = (\r\n fleetManagerState: FleetManagerContextState,\r\n dataTableState: DataTableContextState,\r\n delegees: any\r\n) => {\r\n return getParkingRightIdsByRegistrationId(fleetManagerState.selectedRegistrationId, delegees, dataTableState);\r\n};\r\n\r\nconst getParkingRightIdsByRegistrationId = (\r\n registrationId: string,\r\n delegees: any,\r\n dataTableState: DataTableContextState\r\n) => {\r\n if (\r\n delegees.pages == null ||\r\n !delegees.pages[dataTableState.pageNumber!] ||\r\n delegees.pages[dataTableState.pageNumber!].data == null\r\n ) {\r\n return [];\r\n }\r\n\r\n const delegate = delegees.pages[dataTableState.pageNumber!].data?.find(\r\n (delegate: { registrationId: string }) =>\r\n delegate.registrationId === registrationId\r\n );\r\n if (delegate == null) {\r\n return [];\r\n }\r\n\r\n return delegate.products.map(\r\n (product: { parkingRightId: any }) => product.parkingRightId\r\n );\r\n};\r\n\r\nexport const getMessage = (\r\n t: TFunction,\r\n TKey: string,\r\n count?: number,\r\n TKeyCount?: string\r\n): string => {\r\n if (!isUndefined(count) && !isUndefined(TKeyCount) && count > 1) {\r\n return t(TKeyCount, { count });\r\n }\r\n\r\n return t(TKey);\r\n};\r\n","import { ISelectOption } from \"../components/DataTable/DataTableFilters/DataTableFilterTypes/SelectFilter\";\r\nimport { ParkingProductModel } from \"../models/ParkingProductModel\";\r\nimport { VisitorBookingProductConfiguration } from \"../models/visitor-booking\";\r\nimport { ParkingLocationCountry } from \"../models/visitor-booking/ParkingLocationCountry\";\r\n\r\nexport const getParkingProductOptions = (\r\n parkingProducts: ParkingProductModel[] \r\n): ISelectOption[] => {\r\n const productOptions: ISelectOption[] = [];\r\n\r\n parkingProducts?.forEach(product => {\r\n productOptions.push({\r\n label: `${product.pmcName} - ${product.location}`,\r\n value: product.pmcId,\r\n })\r\n });\r\n\r\n return productOptions;\r\n};\r\n\r\nexport const getProductConfigurationOptions = (\r\n productConfigurations : VisitorBookingProductConfiguration[]\r\n): ISelectOption[] => {\r\n const productOptions: ISelectOption[] = [];\r\n\r\n productConfigurations?.forEach(product => {\r\n productOptions.push({\r\n label: product.name,\r\n value: product.id,\r\n })\r\n });\r\n\r\n return productOptions;\r\n};\r\n\r\nexport const getFacilityOptions = (\r\n parkingLocations: ParkingLocationCountry[] //Data\r\n): ISelectOption[] => {\r\n const facilityOptions: ISelectOption[] = [];\r\n\r\n parkingLocations?.forEach((countryLoc) => {\r\n countryLoc?.cities?.forEach((city) => {\r\n city.physicalZones?.map((location) =>\r\n facilityOptions.push({\r\n label: location.name,\r\n value: location.physicalZoneId,\r\n })\r\n );\r\n });\r\n });\r\n\r\n return facilityOptions;\r\n};\r\n","import React, { useEffect, Dispatch, useCallback, useState, ReactNode } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport DelegeeStatus, {\r\n Statuses,\r\n} from \"../../../../components/DelegeeStatus/DelegeeStatus\";\r\nimport { RootReducer } from \"../../../../store/reducers\";\r\nimport parkingProductsActions from \"../../../../store/actions/parkingProducts.actions\";\r\nimport { connect } from \"react-redux\";\r\nimport moment from \"moment\";\r\nimport { IDataTableRow } from \"../../../../components/DataTable/DataTableBody/DataTableBody\";\r\nimport useAppContext from \"../../../../context/hooks/useAppContext\";\r\nimport { DelegeeWithProductsModel } from \"../../../../models/delegations/DelegatedParkingProductsModel\";\r\nimport { isUndefined, isNull } from \"underscore\";\r\nimport FleetManagerDataTable, {\r\n IFleetManagerDataTableModel,\r\n} from \"../../FleetManagerDataTable/FleetManagerDataTable\";\r\nimport {\r\n toProductsJsx,\r\n} from \"../../Helpers/ParkingRightsHelpers\";\r\nimport { getSelectedParkingRightIds } from \"../MyFleetHelpers\";\r\nimport useFleetManagerContext from \"../../../../context/hooks/useFleetManagerContext\";\r\nimport { WithFiltersAndPaging } from \"../../../../models/filters/WithFiltersAndPaging\";\r\nimport { ForFleetManager } from \"../../../../models/ForFleetManager\";\r\nimport {\r\n DataTableContextFilters,\r\n useDataTableContext,\r\n} from \"../../../../components/DataTable/DataTableContext/DataTableContextProvider\";\r\nimport filteredColumnObjectBuilder from \"../../MyProducts/ObjectBuilders/FilteredColumnObjectBuilder\";\r\nimport {\r\n FilterType,\r\n IFilteredColumn,\r\n} from \"../../../../components/DataTable/DataTableFilters/DataTableFilters\";\r\nimport useMyFleetContext from \"../../../../context/hooks/useMyFleetContext\";\r\nimport { FmpFilters } from \"../../../../constants/filtering.constants\";\r\nimport { getParkingProductOptions } from \"../../../../helpers/selectOptionHelper\";\r\nimport PersonIcon from \"@material-ui/icons/Person\";\r\nimport VehicleIcon from \"../../../../ui/Icons/Vehicle\";\r\n\r\nexport interface IDelegeeDataTableModel extends IFleetManagerDataTableModel {\r\n products: JSX.Element | null;\r\n}\r\n\r\ninterface IDelegeesDataTable extends StateProps, DispatchProps {\r\n onAssignVehicleClicked: () => void;\r\n onInviteFleetMemberClicked: () => void;\r\n onRevokeClicked: () => void;\r\n onDeleteClicked: () => void;\r\n subHeading?: ReactNode;\r\n}\r\n\r\nconst _createData = (\r\n delegeeWithRights: DelegeeWithProductsModel\r\n): IDelegeeDataTableModel => {\r\n return {\r\n rowKey: delegeeWithRights.registrationId,\r\n name: delegeeWithRights.name,\r\n email: delegeeWithRights.emailAddress,\r\n products: toProductsJsx(delegeeWithRights.products),\r\n invitationDate: moment(delegeeWithRights.invitationDate).format(\"DD/MM/YYYY\"),\r\n status: (\r\n \r\n ),\r\n };\r\n};\r\n\r\nconst DelegeesDataTable = (props: IDelegeesDataTable) => {\r\n const {\r\n onAssignVehicleClicked,\r\n onInviteFleetMemberClicked,\r\n onRevokeClicked,\r\n onDeleteClicked,\r\n parkingProducts,\r\n getDelegees,\r\n useSingleDirectVehicleAssignment\r\n } = props;\r\n const { t } = useTranslation([\r\n \"myFleet\",\r\n \"globals\",\r\n \"dataTable\",\r\n \"fleetManagerTable\",\r\n ]);\r\n\r\n const { fleetManagerState } = useFleetManagerContext();\r\n const dataTableContext = useDataTableContext();\r\n const { myFleetContextState, setSorting } = useMyFleetContext();\r\n\r\n const { appState } = useAppContext();\r\n const { delegees } = parkingProducts;\r\n\r\n const [selectedParkingRightsCount, setSelectedParkingRightsCount] =\r\n useState(0);\r\n\r\n const getRequestModel = (): WithFiltersAndPaging => {\r\n const request: WithFiltersAndPaging = {\r\n entity: {\r\n seasonTicketOwnerCrmId: appState.user.seasonTicketOwnerCrmId as string,\r\n language: appState.selectedLanguage,\r\n },\r\n pagination: {\r\n pageNumber: dataTableContext.state.pageNumber!,\r\n pageSize: dataTableContext.state.pageSize!,\r\n },\r\n filters: [\r\n {\r\n key: FmpFilters.sortBy,\r\n type: FilterType.QueryParam,\r\n value: myFleetContextState.sortBy,\r\n },\r\n {\r\n key: FmpFilters.orderDesc,\r\n type: FilterType.QueryParam,\r\n value: myFleetContextState.orderDesc?.toString(),\r\n },\r\n ...(dataTableContext.state.filters as DataTableContextFilters[]),\r\n ],\r\n };\r\n\r\n return request;\r\n };\r\n\r\n const countAndSetSelectedParkingRights = () => {\r\n let parkingRightIds = getSelectedParkingRightIds(\r\n fleetManagerState,\r\n dataTableContext.state,\r\n delegees\r\n );\r\n\r\n if (parkingRightIds.length != selectedParkingRightsCount) {\r\n setSelectedParkingRightsCount(parkingRightIds.length);\r\n }\r\n };\r\n\r\n const fetchDelegees = () => {\r\n if (appState.user.seasonTicketOwnerCrmId) {\r\n getDelegees(getRequestModel());\r\n countAndSetSelectedParkingRights();\r\n }\r\n };\r\n\r\n const memoizedFetch = useCallback(\r\n (): void => fetchDelegees(),\r\n // eslint-disable-next-line\r\n [\r\n dataTableContext.state.pageSize,\r\n dataTableContext.state.pageNumber,\r\n myFleetContextState.orderDesc,\r\n myFleetContextState.sortBy,\r\n appState.user.seasonTicketOwnerCrmId,\r\n appState.selectedLanguage,\r\n ]\r\n );\r\n\r\n useEffect(() => {\r\n memoizedFetch();\r\n }, [memoizedFetch]);\r\n\r\n useEffect(() => {\r\n countAndSetSelectedParkingRights();\r\n }, [fleetManagerState.selectedRowKeys]);\r\n\r\n const columns: IFilteredColumn[] =\r\n filteredColumnObjectBuilder.buildDelegeesColumns(\r\n t,\r\n getParkingProductOptions(parkingProducts.parkingProducts?.data ?? [])\r\n );\r\n\r\n const getTableRows = (): IDelegeeDataTableModel[] => {\r\n if (\r\n !isNull(delegees.pages) &&\r\n !isUndefined(delegees.pages) &&\r\n !isUndefined(delegees.pages[dataTableContext.state.pageNumber!])\r\n ) {\r\n return delegees.pages[dataTableContext.state.pageNumber!].data?.map(\r\n _createData\r\n ) as IDelegeeDataTableModel[];\r\n }\r\n\r\n return [];\r\n };\r\n\r\n const getLoadingState = () => {\r\n if (\r\n !isNull(delegees.pages) &&\r\n !isUndefined(delegees.pages) &&\r\n !isUndefined(delegees.pages[dataTableContext.state.pageNumber!])\r\n ) {\r\n return delegees.pages[dataTableContext.state.pageNumber!].loading;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n const isLoading = getLoadingState();\r\n const rows: IDelegeeDataTableModel[] = getTableRows();\r\n\r\n const getRegistrationIdByTableRow = (\r\n focusedRow: IDataTableRow | null\r\n ): string | null => {\r\n return focusedRow?.rowKey;\r\n };\r\n\r\n const isResendInviteDisabled = (focusedRow: IDataTableRow | null) => {\r\n const delegeeRow = (focusedRow as IDelegeeDataTableModel) || null;\r\n\r\n return (\r\n delegeeRow?.products == null ||\r\n delegeeRow.status.props?.type !== Statuses.Pending\r\n );\r\n };\r\n\r\n const onSort = (\r\n event: React.MouseEvent,\r\n property: keyof IDelegeeDataTableModel\r\n ) => {\r\n setSorting(property.toString());\r\n };\r\n\r\n return (\r\n 0,\r\n deleteLabel: `${t(\"globals:delete\")} (${\r\n fleetManagerState.selectedRowKeys.length\r\n })`,\r\n onDeleteClicked: onDeleteClicked,\r\n },\r\n revoke: {\r\n useRevoke: true,\r\n showRevoke: selectedParkingRightsCount > 0,\r\n revokeLabel: `${t(\"globals:revoke\")} (${selectedParkingRightsCount})`,\r\n onRevokeClicked: onRevokeClicked,\r\n },\r\n menu: {\r\n useMenu: useSingleDirectVehicleAssignment,\r\n showMenu: useSingleDirectVehicleAssignment, \r\n menuItems: [\r\n {\r\n label: t(\"fleetManagerTable:inviteFleetMember\"),\r\n action: onInviteFleetMemberClicked,\r\n icon: \r\n },\r\n {\r\n label: t(\"fleetManagerTable:assignVehicle\"),\r\n action: onAssignVehicleClicked,\r\n icon: \r\n }\r\n ]\r\n }\r\n }}\r\n />\r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { parkingProducts } = state;\r\n const { environment } = state;\r\n\r\n const useSingleDirectVehicleAssignment = environment.featureFlags?.find(\r\n (item) => item.name === \"UseSingleDirectVehicleAssignment\"\r\n );\r\n\r\n return {\r\n parkingProducts,\r\n useSingleDirectVehicleAssignment: useSingleDirectVehicleAssignment?.value ?? false,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n getDelegees: (request: WithFiltersAndPaging) =>\r\n dispatch(parkingProductsActions.getDelegees(request)),\r\n});\r\n\r\ntype StateProps = ReturnType;\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DelegeesDataTable);\r\n","import React, { Dispatch } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport Warning from \"./Warning\";\r\nimport parkingProductsActions from \"../../store/actions/parkingProducts.actions\";\r\nimport useFleetManagerContext from \"../../context/hooks/useFleetManagerContext\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { DeleteDelegationsRequestModel } from \"../../models/delegations/DeleteDelegationsRequestModel\";\r\nimport { RootReducer } from \"../../store/reducers\";\r\n\r\ntype FormOptions = {\r\n warning: string;\r\n warningDescription: string;\r\n};\r\n\r\ninterface IFormProps extends IStateProps, DispatchProps {\r\n onRefresh: () => void;\r\n options: FormOptions;\r\n}\r\n\r\nconst BatchDeleteDelegeeWarning: React.FC = (props) => {\r\n const { deleteDelegations, onRefresh, options, loading } = props;\r\n const { t } = useTranslation(\"globals\");\r\n\r\n const {\r\n fleetManagerState,\r\n setSelectedParkingRightIds,\r\n toggleBatchDeleteDelegationsWarning,\r\n } = useFleetManagerContext();\r\n\r\n const handleSuccessfulDelete = () => {\r\n toggleBatchDeleteDelegationsWarning();\r\n\r\n onRefresh();\r\n setSelectedParkingRightIds([]);\r\n };\r\n\r\n const handleDeleteConfirmation = () =>\r\n deleteDelegations(\r\n { registrationIds: fleetManagerState.selectedRowKeys },\r\n handleSuccessfulDelete\r\n );\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { parkingProducts } = state;\r\n const { loading } = parkingProducts;\r\n\r\n return { loading };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n deleteDelegations: (request: DeleteDelegationsRequestModel, callback?: () => void) =>\r\n dispatch(parkingProductsActions.deleteDelegations(request, callback)),\r\n});\r\n\r\ntype IStateProps = ReturnType;\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BatchDeleteDelegeeWarning);\r\n","import React, { useEffect, useCallback, ReactNode, useMemo } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport moment from \"moment\";\r\nimport { IDataTableRow } from \"../../../../components/DataTable/DataTableBody/DataTableBody\";\r\nimport useAppContext from \"../../../../context/hooks/useAppContext\";\r\nimport { DelegatedParkingProductModel, VehicleAssignment, VehicleAssignmentProduct } from \"../../../../models/delegations/DelegatedParkingProductsModel\";\r\nimport useFleetManagerContext from \"../../../../context/hooks/useFleetManagerContext\";\r\nimport { ForFleetManager } from \"../../../../models/ForFleetManager\";\r\nimport { WithFiltersAndPaging } from \"../../../../models/filters/WithFiltersAndPaging\";\r\nimport {\r\n DataTableContextFilters,\r\n useDataTableContext,\r\n} from \"../../../../components/DataTable/DataTableContext/DataTableContextProvider\";\r\nimport { FmpFilters } from \"../../../../constants/filtering.constants\";\r\nimport { FilterType } from \"../../../../components/DataTable/DataTableFilters/DataTableFilters\";\r\nimport { useAppDispatch, useAppSelector } from \"../../../../store\";\r\nimport { isNil } from \"lodash\";\r\nimport DataTable from \"../../../../components/DataTable/DataTable\";\r\nimport {\r\n DeleteDelegeeIcon,\r\n DeleteDelegeeMenuItem,\r\n EditIcon,\r\n NoPaddingGrid,\r\n} from \"../../FleetManagerDataTable/StyledComponents\";\r\nimport { Column } from \"../../../../components/DataTable/DataTableHead/DataTableHead\";\r\nimport { MenuItem } from \"@material-ui/core\";\r\nimport parkingProductsActions from \"../../../../store/actions/parkingProducts.actions\";\r\nimport { NumberPlate, selectUseBulkVehicleAssignments } from \"../../MyProducts/ParkingRightsDataTable/common\";\r\nimport filteredColumnObjectBuilder from \"../../MyProducts/ObjectBuilders/FilteredColumnObjectBuilder\";\r\nimport useMyFleetContext from \"../../../../context/hooks/useMyFleetContext\";\r\nimport { toProductsJsx } from \"../../Helpers/ParkingRightsHelpers\";\r\nimport { AssignedVehicleRow } from \"../../MyProducts/ParkingRightsDataTable/VehiclesTable\";\r\nimport PersonIcon from \"@material-ui/icons/Person\";\r\nimport VehicleIcon from \"../../../../ui/Icons/Vehicle\";\r\nimport { parseDVARowKey, stringifyDVARowKey } from \"../../../../helpers/vehicleAssignment.utils\";\r\nimport { getParkingProductOptions } from \"../../../../helpers/selectOptionHelper\";\r\nimport { ForbiddenIconMenu } from \"../../../../ui/Icons/ForbiddenIcon\";\r\n\r\nexport interface VehicleAssignmentRow extends IDataTableRow {\r\n numberPlate: JSX.Element;\r\n description?: string;\r\n products: JSX.Element | null;\r\n assignedDate: string;\r\n}\r\ntype VehicleAssignmentsTableProps = Readonly<{\r\n onAssignVehicleClicked: () => void;\r\n onInviteFleetMemberClicked: () => void;\r\n onWhitelistVehiclesClicked: () => void;\r\n onRevokeClicked: () => void;\r\n onDeleteClicked: () => void;\r\n subHeading?: ReactNode;\r\n}>\r\n\r\nconst toDelegatedParkingProductModel = (products: VehicleAssignmentProduct[]) : DelegatedParkingProductModel[] => \r\n products.map(p =>{ return { parkingRightId: p.parkingRightId, location: p.locationName, name:p.pmcName, pmcId: p.pmcId, created: null!, id: null!, status: null!, flexBudgetRemainingTime: null!, flexBudgetUnitType: null!}});\r\n\r\nconst _createData = (vehicleAssignment: VehicleAssignment): VehicleAssignmentRow => {\r\n return {\r\n rowKey: stringifyDVARowKey({\r\n vehicleAssignmentId: vehicleAssignment.vehicleAssignmentId,\r\n pmcIds: vehicleAssignment.products.map(p => p.pmcId),\r\n }),\r\n numberPlate: (\r\n \r\n ),\r\n description: vehicleAssignment.vehicle.description,\r\n products: toProductsJsx(toDelegatedParkingProductModel(vehicleAssignment.products)),\r\n assignedDate: moment(vehicleAssignment.assignedAt).format(\"DD/MM/YYYY\")\r\n };\r\n};\r\n\r\ntype MenuItemsProps = Readonly<{\r\n onDelete: () => void;\r\n onEdit: () => void;\r\n onRevoke: () => void;\r\n focusedRow: IDataTableRow | null;\r\n}>;\r\n\r\nfunction MenuItems(props: MenuItemsProps) {\r\n const { t } = useTranslation([\"fleetManagerTable\", \"myFleet\"]);\r\n\r\n return (\r\n <>\r\n props.onEdit()}>\r\n \r\n {t(\"contextMenuActions.editVehicle\")}\r\n \r\n props.onRevoke()}>\r\n \r\n {t(\"contextMenuActions.revokeVehicle\")}\r\n \r\n props.onDelete()}>\r\n \r\n {t(\"contextMenuActions.deleteVehicle\")}\r\n \r\n \r\n );\r\n}\r\n\r\nfunction VehiclesTableMyFleet(props: VehicleAssignmentsTableProps) {\r\n const dispatch = useAppDispatch();\r\n const vehicleAssignments = useAppSelector((state) => state.parkingProducts.vehicleAssignmentsMyFleet);\r\n const parkingProducts = useAppSelector((state) => state.parkingProducts.parkingProducts);\r\n\r\n const getVehicleAssignmentsMyFleet = useCallback(\r\n (request) => {\r\n dispatch(parkingProductsActions.getVehicleAssignmentsMyFleet(request) as any);\r\n },\r\n [dispatch]\r\n );\r\n const { t } = useTranslation([\"myProducts\", \"globals\", \"dataTable\", \"fleetManagerTable\"]);\r\n\r\n const { myFleetContextState, setSorting } = useMyFleetContext();\r\n const {\r\n fleetManagerState,\r\n setSelectedParkingRightIds,\r\n toggleEditVehicleAssignment,\r\n toggleDeleteVehicleAssignmentsWarning,\r\n toggleRevokeVehicleAssignmentsWarning\r\n } = useFleetManagerContext();\r\n\r\n const dataTableContext = useDataTableContext();\r\n\r\n const { appState } = useAppContext();\r\n\r\n const getFilters = (): DataTableContextFilters[] => [ \r\n {\r\n key: FmpFilters.sortBy,\r\n type: FilterType.QueryParam,\r\n value: myFleetContextState.sortBy,\r\n },\r\n {\r\n key: FmpFilters.orderDesc,\r\n type: FilterType.QueryParam,\r\n value: myFleetContextState.orderDesc?.toString(),\r\n },\r\n ...(dataTableContext.state.filters as DataTableContextFilters[]),\r\n ];\r\n\r\n const getRequestModel = (): WithFiltersAndPaging => {\r\n const request: WithFiltersAndPaging = {\r\n entity: {\r\n seasonTicketOwnerCrmId: appState.user.seasonTicketOwnerCrmId as string,\r\n language: appState.selectedLanguage,\r\n },\r\n pagination: {\r\n pageSize: dataTableContext.state.pageSize!,\r\n pageNumber: dataTableContext.state.pageNumber!,\r\n },\r\n filters: getFilters(),\r\n };\r\n return request;\r\n };\r\n\r\n const fetchVehicleAssignments = () => {\r\n if (appState.user.seasonTicketOwnerCrmId) {\r\n getVehicleAssignmentsMyFleet(getRequestModel());\r\n }\r\n };\r\n\r\n const memoizedFetch = useCallback(\r\n (): void => fetchVehicleAssignments(), // eslint-disable-next-line\r\n [\r\n dataTableContext.state.pageSize,\r\n dataTableContext.state.pageNumber,\r\n myFleetContextState.orderDesc,\r\n myFleetContextState.sortBy,\r\n appState.user.seasonTicketOwnerCrmId,\r\n appState.selectedLanguage,\r\n ]\r\n );\r\n\r\n \r\n const useBulkVehicleAssignments = useAppSelector(selectUseBulkVehicleAssignments);\r\n\r\n const getMenuItems = () => {\r\n const menuItems = [\r\n {\r\n label: t(\"fleetManagerTable:assignVehicle\"),\r\n action: props.onAssignVehicleClicked,\r\n icon: \r\n }\r\n ];\r\n\r\n if (!useBulkVehicleAssignments) {\r\n menuItems.unshift({\r\n label: t(\"fleetManagerTable:inviteFleetMember\"),\r\n action: props.onInviteFleetMemberClicked,\r\n icon: \r\n });\r\n } else {\r\n menuItems.push({\r\n label: t(\"fleetManagerTable:whitelistVehicles\"),\r\n action: props.onWhitelistVehiclesClicked,\r\n icon: \r\n });\r\n }\r\n\r\n return menuItems;\r\n };\r\n\r\n\r\n useEffect(() => {\r\n memoizedFetch();\r\n }, [memoizedFetch]);\r\n\r\n const columns: Column[] = filteredColumnObjectBuilder.buildVehiclesMyFleetColumns(\r\n t,\r\n getParkingProductOptions(parkingProducts?.data ?? []),\r\n );\r\n\r\n const onSort = (event: React.MouseEvent, property: keyof VehicleAssignmentRow) => {\r\n setSorting(property.toString());\r\n };\r\n\r\n const getTableRows = (): VehicleAssignmentRow[] => {\r\n const { pages } = vehicleAssignments;\r\n if (isNil(pages)) {\r\n return [];\r\n }\r\n const pageData = pages[dataTableContext.state.pageNumber!]?.data;\r\n if (isNil(pageData)) {\r\n return [];\r\n } \r\n return pageData.map(_createData);\r\n };\r\n\r\n const isLoading = vehicleAssignments.pages?.[dataTableContext.state.pageNumber!]?.loading ?? false;\r\n const rows = getTableRows();\r\n\r\n const toAssignedVehicleRow = (row: VehicleAssignmentRow) : AssignedVehicleRow => {\r\n return {\r\n assignedDate: row.assignedDate,\r\n numberPlate: row.numberPlate,\r\n description: row.description,\r\n disabled: row.disabled,\r\n product: null!,\r\n rowKey: row.rowKey,\r\n startedDate: null!,\r\n remainingFlex: '',\r\n }\r\n }\r\n\r\n const handleEdit = (row: VehicleAssignmentRow | null) => {\r\n if (isNil(row)) {\r\n return;\r\n }\r\n toggleEditVehicleAssignment(toAssignedVehicleRow(row));\r\n };\r\n\r\n const handleDelete = (row: VehicleAssignmentRow | null) => { \r\n if (isNil(row)) { \r\n return;\r\n } \r\n toggleDeleteVehicleAssignmentsWarning(toAssignedVehicleRow(row));\r\n };\r\n\r\n const handleRevoke = (row: VehicleAssignmentRow | null) => { \r\n if (isNil(row)) { \r\n return;\r\n } \r\n toggleRevokeVehicleAssignmentsWarning(toAssignedVehicleRow(row));\r\n };\r\n\r\n const parsedSelectedRows = useMemo(() => fleetManagerState.selectedRowKeys.map(parseDVARowKey), [fleetManagerState.selectedRowKeys]);\r\n const selectedPmcsCount = useMemo(() => {\r\n return parsedSelectedRows.reduce((acc, x) => acc + x.pmcIds.length, 0)\r\n }, [parsedSelectedRows]);\r\n\r\n return (\r\n \r\n \r\n (\r\n handleDelete(focusedRow)}\r\n onEdit={() => handleEdit(focusedRow)}\r\n onRevoke={() => handleRevoke(focusedRow)}\r\n focusedRow={focusedRow}\r\n />\r\n )}\r\n order={myFleetContextState.orderDesc ? \"desc\" : \"asc\"}\r\n heading={{\r\n options: {\r\n useHeading: true,\r\n showHeadingCount: false,\r\n },\r\n title: t(\"myFleet:myFleet\"),\r\n }}\r\n filtering={{\r\n options: {\r\n useFilters: true,\r\n },\r\n }}\r\n actions={{\r\n options: {\r\n useActions: true,\r\n },\r\n revoke: {\r\n useRevoke: true,\r\n showRevoke: selectedPmcsCount > 0,\r\n revokeLabel: `${t(\"globals:revoke\")} (${selectedPmcsCount})`,\r\n onRevokeClicked: props.onRevokeClicked,\r\n },\r\n delete: {\r\n useDelete: true,\r\n showDelete: fleetManagerState.selectedRowKeys.length > 0,\r\n deleteLabel: `${t(\"globals:delete\")} (${fleetManagerState.selectedRowKeys.length})`,\r\n onDeleteClicked: props.onDeleteClicked,\r\n },\r\n menu: {\r\n useMenu: true,\r\n showMenu: true,\r\n menuItems: getMenuItems(),\r\n } \r\n }}\r\n subHeading={props.subHeading}\r\n />\r\n \r\n \r\n );\r\n}\r\n\r\nexport default VehiclesTableMyFleet;\r\n","import React, { Dispatch, useEffect, useState } from \"react\";\r\nimport { Grid } from \"@material-ui/core\";\r\nimport Section from \"../../../ui/Section/Section\";\r\nimport DelegeeForm from \"../../../components/DelegeeForm/DelegeeForm\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport ActionDrawer from \"../../../ui/ActionDrawer/ActionDrawer\";\r\nimport { Helmet } from \"react-helmet\";\r\nimport DeleteDelegeeWarning from \"../../../components/Warnings/DeleteDelegeeWarning\";\r\nimport useFleetManagerContext from \"../../../context/hooks/useFleetManagerContext\";\r\nimport useMyFleetContext from \"../../../context/hooks/useMyFleetContext\";\r\nimport DelegeesDataTable from \"./DelegeesDataTable/DelegeesDataTable\";\r\nimport BatchRevokeParkingRightsWarning from \"../../../components/Warnings/BatchRevokeParkingRightsWarning\";\r\nimport useAppContext from \"../../../context/hooks/useAppContext\";\r\nimport { connect } from \"react-redux\";\r\nimport parkingProductsActions from \"../../../store/actions/parkingProducts.actions\";\r\nimport { RootReducer } from \"../../../store/reducers\";\r\nimport { getMessage, getSelectedParkingRightIdSingle as getSelectedParkingRightIdsSingle, getSelectedParkingRightIds } from \"./MyFleetHelpers\";\r\nimport BatchDeleteDelegeeWarning from \"../../../components/Warnings/BatchDeleteDelegationWarning\";\r\nimport { WithFiltersAndPaging } from \"../../../models/filters/WithFiltersAndPaging\";\r\nimport { ForFleetManager } from \"../../../models/ForFleetManager\";\r\nimport MultipleDelegeesForm from \"../../../components/MultipleDelegeesForm/MultipleDelegeesForm\";\r\nimport { useOnBulkImportFinishedCallback } from \"../../../hooks/useOnBulkImportFinishedCallback\";\r\nimport VehicleForm from \"../../../components/VehicleForm/VehicleForm\";\r\nimport TableSwitcher, { TabOption } from \"../MyProducts/ParkingRightsDataTable/TableSwitcher\";\r\nimport { useAppSelector } from \"../../../store\";\r\nimport { selectUseBulkVehicleAssignments, selectUseSingleDirectVehicleAssignment } from \"../MyProducts/ParkingRightsDataTable/common\";\r\nimport { useDataTableContext } from \"../../../components/DataTable/DataTableContext/DataTableContextProvider\";\r\nimport VehiclesTableMyFleet from \"./VehiclesTableMyFleet/VehiclesTableMyFleet\";\r\nimport DeleteVehiclesAssignmentWarning from \"../../../components/Warnings/DeleteVehiclesAssignmentWarning\";\r\nimport BatchRevokeVehicleAssignmentWarning from \"../../../components/Warnings/BatchRevokeVehicleAssignmentWarning\";\r\nimport RevokeParkingRightsWarning from \"../../../components/Warnings/RevokeParkingRightsWarning\";\r\nimport RevokeVehicleAssignmentWarning from \"../../../components/Warnings/RevokeVehicleAssignmentWarning\";\r\nimport WhitelistVehiclesForm from \"../../../components/WhitelistVehiclesForm/WhitelistVehiclesForm\";\r\nimport WhitelistVehiclesUploadView from \"../../../components/WhitelistVehiclesForm/WhitelistVehiclesUploadView/WhitelistVehiclesUploadView\";\r\n\r\ninterface IProps extends StateProps, DispatchProps {}\r\n\r\nconst MyFleet = ({ \r\n getDelegees, \r\n getParkingProducts, \r\n getVehicleAssignmentsMyFleet,\r\n getLocations,\r\n delegees }: IProps) => {\r\n const { appState } = useAppContext();\r\n\r\n const {\r\n fleetManagerState,\r\n toggleAddDelegee,\r\n toggleAssignVehicle,\r\n toggleWhitelistVehicles,\r\n toggleBatchRevokeParkingRightsWarning,\r\n toggleRevokeParkingRightsWarning,\r\n toggleEditDelegee,\r\n toggleEditVehicleAssignment,\r\n toggleDeleteDelegeeWarning,\r\n toggleRevokeVehicleAssignmentsWarning,\r\n toggleBatchRevokeVehicleAssignmentsWarning,\r\n toggleDeleteVehicleAssignmentsWarning,\r\n toggleBatchDeleteDelegationsWarning,\r\n setSelectedParkingRightIds,\r\n resetContext: resetFleetManagerContext, \r\n } = useFleetManagerContext();\r\n \r\n const [tab, setTab] = useState(TabOption.FleetMembers);\r\n const { setSorting } = useMyFleetContext();\r\n const {\r\n resetContext,\r\n state: dataTable,\r\n resetPageNumber,\r\n resetPageSize,\r\n } = useDataTableContext();\r\n \r\n const useSingleDirectVehicleAssignment = useAppSelector(selectUseSingleDirectVehicleAssignment);\r\n const useBulkVehicleAssignments = useAppSelector(selectUseBulkVehicleAssignments);\r\n\r\n const { t } = useTranslation([\"myFleet\", \"globals\", \"dataTable\"]);\r\n const getMetaTitle = () =>\r\n fleetManagerState.showDelegeeDetails ? t(\"addDelegee\") : t(\"myFleet\");\r\n\r\n const fetchParkingProducts = () => {\r\n getParkingProducts(appState.user.seasonTicketOwnerCrmId as string, appState.selectedLanguage);\r\n };\r\n\r\n useEffect(() => {\r\n fetchParkingProducts();\r\n getLocations(appState.user.seasonTicketOwnerCrmId as string, appState.selectedLanguage);\r\n getVehicleAssignmentsMyFleet({ \r\n entity: {\r\n seasonTicketOwnerCrmId: appState.user.seasonTicketOwnerCrmId as string,\r\n language: appState.selectedLanguage\r\n },\r\n pagination: {\r\n pageNumber:1,\r\n pageSize:1\r\n }\r\n });\r\n return () => {\r\n resetFleetManagerContext();\r\n };\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n const onDelegeeFormClose = () => {\r\n if (fleetManagerState.isEditDelegeeMode) {\r\n toggleEditDelegee(\"\");\r\n } else {\r\n toggleAddDelegee();\r\n }\r\n };\r\n\r\n const onVehicleFormClose = () => {\r\n if (fleetManagerState.isEditVehicleAssignmentMode) {\r\n toggleEditVehicleAssignment();\r\n } else {\r\n toggleAssignVehicle();\r\n }\r\n };\r\n\r\n const onWhitelistVehiclesClose = () => {\r\n toggleWhitelistVehicles();\r\n };\r\n\r\n const createRequest = (): WithFiltersAndPaging => ({\r\n entity: {\r\n seasonTicketOwnerCrmId: appState.user.seasonTicketOwnerCrmId as string,\r\n language: appState.selectedLanguage,\r\n },\r\n pagination: {\r\n pageSize: dataTable.pageSize!,\r\n pageNumber: dataTable.pageNumber!,\r\n },\r\n filters: dataTable.filters,\r\n });\r\n\r\n const onRefresh = () => {\r\n const request = createRequest();\r\n\r\n if (tab === TabOption.FleetMembers) {\r\n getDelegees(request);\r\n } else {\r\n getVehicleAssignmentsMyFleet(request);\r\n }\r\n };\r\n\r\n useOnBulkImportFinishedCallback(onRefresh);\r\n\r\n const getDeleteDelegeeWarningText = (parkingRightsCount: number): string =>\r\n parkingRightsCount > 0\r\n ? t(\"deleteDelegeeWarning.warning\", { count: parkingRightsCount })\r\n : t(\"deleteDelegeeWarning.warningNoPRs\");\r\n\r\n const getDeleteDelegeeWarningDetails = (parkingRightsCount: number): string =>\r\n parkingRightsCount > 0\r\n ? t(\"deleteDelegeeWarning.details\", { count: parkingRightsCount })\r\n : t(\"deleteDelegeeWarning.detailsNoPRs\");\r\n\r\n const getBatchDeleteWarning = (): string =>\r\n getMessage(\r\n t,\r\n \"deleteDelegeeWarning.warningBatch\",\r\n fleetManagerState.selectedRowKeys.length,\r\n \"deleteDelegeeWarning.warningBatchPlural\"\r\n );\r\n\r\n const getBatchDeleteDescription = (): string =>\r\n getMessage(\r\n t,\r\n \"deleteDelegeeWarning.detailsBatch\",\r\n fleetManagerState.selectedRowKeys.length,\r\n \"deleteDelegeeWarning.detailsBatchPlural\"\r\n );\r\n\r\n const selectedParkingRightIds = getSelectedParkingRightIds(\r\n fleetManagerState,\r\n dataTable,\r\n delegees\r\n );\r\n\r\n const selectedParkingRightIdsSingle = getSelectedParkingRightIdsSingle(\r\n fleetManagerState,\r\n dataTable,\r\n delegees\r\n );\r\n\r\n const onAddClickHandler = () => {\r\n setSelectedParkingRightIds([]);\r\n toggleAddDelegee();\r\n };\r\n\r\n const onAssignVehicleClickHandler = () => {\r\n toggleAssignVehicle();\r\n };\r\n\r\n const onWhitelistVehiclesClickHandler = () => {\r\n toggleWhitelistVehicles();\r\n };\r\n\r\n \r\n useEffect(() => {\r\n if (useBulkVehicleAssignments) {\r\n resetPageNumber();\r\n resetPageSize();\r\n setSelectedParkingRightIds([]);\r\n resetContext();\r\n setSorting(\"assignedDate\", true);\r\n setTab(TabOption.Vehicles);\r\n }\r\n }, [useBulkVehicleAssignments]);\r\n\r\n const vehicleAssignmentsCount = useAppSelector((state) => state.parkingProducts.vehicleAssignmentsMyFleet.totalRecords);\r\n const fleetMembersCount = useAppSelector((state) => state.parkingProducts.delegees.totalRecords);\r\n const switcher = !useSingleDirectVehicleAssignment || useBulkVehicleAssignments ? (\r\n <>\r\n ) : (\r\n {\r\n if (tab !== newTab) {\r\n resetPageNumber();\r\n resetPageSize();\r\n setSelectedParkingRightIds([]);\r\n\r\n let sorting = \"\";\r\n switch (newTab) {\r\n case TabOption.FleetMembers:\r\n sorting = \"invitationDate\";\r\n break;\r\n case TabOption.Vehicles:\r\n sorting = \"assignedDate\";\r\n break;\r\n }\r\n\r\n resetContext();\r\n setSorting(sorting, true);\r\n }\r\n setTab(newTab);\r\n }}\r\n getCount={(option) => {\r\n switch (option) {\r\n case TabOption.FleetMembers:\r\n return fleetMembersCount ?? 0;\r\n case TabOption.Vehicles:\r\n return vehicleAssignmentsCount ?? 0\r\n }\r\n }}\r\n />\r\n );\r\n\r\n return (\r\n \r\n \r\n {`Q-Park | ${getMetaTitle()}`}\r\n \r\n \r\n {!fleetManagerState.dragAndDropView ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n // my fleet vehicles are reduced client side when revoked\r\n }}\r\n selectedVehicleAssignmentKeys={fleetManagerState.selectedRowKeys}\r\n />\r\n \r\n \r\n {\r\n // my fleet vehicles are reduced client side when revoked\r\n }}\r\n />\r\n \r\n \r\n {\r\n getVehicleAssignmentsMyFleet(createRequest(), toExclude?.map(x => x.vehicleAssignmentId))\r\n }}\r\n selectedVehicleAssignmentKeys={fleetManagerState.selectedRowKeys}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n
\r\n {useSingleDirectVehicleAssignment && tab === TabOption.FleetMembers &&\r\n }\r\n {useSingleDirectVehicleAssignment && tab === TabOption.Vehicles &&\r\n }\r\n {!useSingleDirectVehicleAssignment && \r\n } \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { delegees } = state.parkingProducts;\r\n\r\n return { delegees };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n getDelegees: (request: WithFiltersAndPaging) =>\r\n dispatch(parkingProductsActions.getDelegees(request)),\r\n getParkingProducts: (seasonTicketOwnerCrmId: string, location: string) =>\r\n dispatch(parkingProductsActions.getParkingProducts(seasonTicketOwnerCrmId, location)),\r\n getVehicleAssignmentsMyFleet: (request: WithFiltersAndPaging, excludeIds?: string[]) => \r\n dispatch(parkingProductsActions.getVehicleAssignmentsMyFleet(request, excludeIds)), \r\n getLocations: (seasonTicketOwnerCrmId: string, language: string) =>\r\n dispatch(parkingProductsActions.getLocatedParkingProducts(seasonTicketOwnerCrmId, language)),\r\n});\r\n\r\ntype StateProps = ReturnType;\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MyFleet);\r\n","import React from \"react\";\r\nimport DataTableContextProvider from \"../../components/DataTable/DataTableContext/DataTableContextProvider\";\r\nimport MyFleet from \"../../containers/FleetManager/MyFleet/MyFleet\";\r\nimport MyFleetContextProvider from \"../../context/MyFleetContextProvider\";\r\nimport ImportDelegationsContextProvider from \"../../context/ImportDelegationsContext\";\r\n\r\nconst MyFleetPage = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default MyFleetPage;\r\n","var _path;\nconst _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }\nimport React from \"react\";\nconst SvgArrowRight = _ref => {\n let {\n svgRef,\n title\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 14,\n height: 8,\n viewBox: \"0 0 14 8\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n id: \"Path_15771\",\n \"data-name\": \"Path 15771\",\n d: \"M9.72-9.89,9.5-9.669a.375.375,0,0,0,0,.53l2.623,2.608H.375A.375.375,0,0,0,0-6.156v.312a.375.375,0,0,0,.375.375H12.121L9.5-2.861a.375.375,0,0,0,0,.53l.221.221a.375.375,0,0,0,.53,0l3.64-3.625a.375.375,0,0,0,0-.53L10.25-9.89A.375.375,0,0,0,9.72-9.89Z\",\n transform: \"translate(0 10)\",\n fill: \"#a2a2a2\"\n })));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgArrowRight, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/arrow-right.5d41884d.svg\";\nexport { ForwardRef as ReactComponent };","import * as React from \"react\";\r\nimport Flag from \"react-world-flags\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../theme/variables\";\r\nimport { ReactComponent as ArrowRightIcon } from \"../../assets/images/arrow-right.svg\";\r\n\r\nconst { colors, typography } = variables;\r\n\r\ninterface IFaqButtonProps {\r\n countryName: string;\r\n countryCode: string;\r\n url: string;\r\n}\r\n\r\nconst FaqButton: React.FC = ({ countryCode, countryName, url }) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {countryName}\r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nconst ButtonContainer = styled.a`\r\n background-color: ${colors.white};\r\n border: 1px solid ${colors.veryLightGray};\r\n display: flex;\r\n flex-flow: row nowrap;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 0.5em 1em;\r\n height: 50px;\r\n border-radius: 6px;\r\n text-decoration: none;\r\n width: 100%;\r\n color: ${colors.black};\r\n\r\n &:hover {\r\n cursor: pointer;\r\n }\r\n`;\r\n\r\nconst FlagAndCountryContainer = styled.div`\r\n display: flex;\r\n flex-flow: row nowrap;\r\n align-items: center;\r\n width: 100%;\r\n`;\r\n\r\nconst FlagContainer = styled.div`\r\n width: 26px;\r\n height: 21px;\r\n border-radius: 6px;\r\n overflow: hidden;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n`;\r\n\r\nconst CountryNameContainer = styled.div`\r\n padding: 0 1em;\r\n font-size: ${typography.fontSizeBase};\r\n`;\r\n\r\nconst IconContainer = styled.div`\r\n color: ${colors.black};\r\n`;\r\n\r\nexport default FaqButton;\r\n","import { Container, Grid } from \"@material-ui/core\";\r\nimport * as React from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport styled from \"styled-components\";\r\nimport { isEmpty } from \"underscore\";\r\nimport FaqButton from \"../../components/FaqButton/FaqButton\";\r\nimport { getFaqCountries } from \"../../pages/FAQ/data\";\r\nimport { variables } from \"../../theme/variables\";\r\nimport Spacer from \"../../ui/Spacer/Spacer\";\r\n\r\nconst { colors, typography, breakpoints } = variables;\r\n\r\ninterface IFaqProps {}\r\n\r\nconst FAQ: React.FC = () => {\r\n const countries = getFaqCountries();\r\n\r\n const { t } = useTranslation(\"faq\");\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(\"selectCountry\")}\r\n \r\n \r\n \r\n {t(\"heading\")}\r\n \r\n \r\n \r\n \r\n \r\n\r\n {!isEmpty(countries) && countries.map((c) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst FlexContainer = styled(Container)`\r\n align-items: center;\r\n justify-content: center;\r\n display: flex;\r\n flex-direction: column;\r\n`;\r\n\r\nconst PaddingRow = styled(Grid)`\r\n padding: 0 9em;\r\n background-color: ${colors.white};\r\n box-shadow: 0px 1px 3px ${colors.veryLightGraySecondary};\r\n border-radius: 6px;\r\n max-width: 75%;\r\n\r\n @media screen and (max-width: ${breakpoints.screenMd}) {\r\n max-width: 95%;\r\n padding: 0 0.5em;\r\n }\r\n\r\n @media screen and (max-width: ${breakpoints.screenLg}) {\r\n max-width: 85%;\r\n padding: 0 1.5em;\r\n }\r\n`;\r\n\r\nconst PaddingCol = styled(Grid)`\r\n padding: 0 0 0.7em 0;\r\n\r\n &:nth-child(even) {\r\n padding: 0 1.2em 0.7em 0;\r\n }\r\n\r\n @media screen and (max-width: ${breakpoints.screenMd}) {\r\n padding: 0.25em 0;\r\n\r\n &:nth-child(even) {\r\n padding: 0.25em 0;\r\n }\r\n }\r\n\r\n @media screen and (max-width: ${breakpoints.screenLg}) {\r\n padding: 0.25em;\r\n\r\n &:nth-child(even) {\r\n padding: 0.25em;\r\n }\r\n }\r\n`;\r\n\r\nconst StyledSpanContainer = styled.div`\r\n max-width: 25em;\r\n text-align: center;\r\n font-size: ${typography.fontSizeBase};\r\n color: ${colors.darkGraySecondary};\r\n`;\r\n\r\nconst CenteredTextH1 = styled.h1`\r\n text-align: center;\r\n`;\r\n\r\nexport default FAQ;\r\n","import { isEmpty, isUndefined } from \"underscore\";\r\nimport faqs from \"./faq.json\";\r\n\r\nexport type FaqCountryModel = {\r\n DisplayName: string;\r\n CountryCode: string;\r\n Url: string;\r\n};\r\n\r\nexport const getFaqCountries = (): FaqCountryModel[] => {\r\n const results: FaqCountryModel[] = faqs\r\n .filter((f) => !isEmpty(f.url) && !isUndefined(f.url))\r\n .map(\r\n (f) =>\r\n ({\r\n DisplayName: f.displayName,\r\n CountryCode: f.countryCode,\r\n Url: f.url,\r\n } as FaqCountryModel)\r\n );\r\n\r\n return results;\r\n};\r\n","import React from \"react\";\r\nimport FAQ from \"../../containers/FAQ/Faq\";\r\n\r\nconst FaqPage: React.FC<{}> = () => \r\n\r\nexport default FaqPage;","export const visitorBookingContextTypes = {\r\n RESET_VISITORBOOKING_CONTEXT: \"context/RESET_VISITORBOOKING_CONTEXT\",\r\n SET_SORTING: \"context/SET_SORTING\",\r\n TOGGLE_SHOW_CANCEL_VISITORBOOKING:\r\n \"context/TOGGLE_SHOW_CANCEL_VISITORBOOKING\",\r\n SET_SELECTED_ROW_VALUES: \"context/SET_SELECTED_ROW_VALUES\",\r\n};\r\n","import { visitorBookingContextTypes } from \"../actions/visitorBooking.types\";\r\n\r\nexport type VisitorBookingRowValues = {\r\n customerName: string;\r\n referenceNumber: string;\r\n};\r\n\r\nexport type VisitorBookingContextDataGridState = {\r\n sortBy?: string;\r\n orderDesc?: boolean;\r\n showCancelBookingWarning: boolean;\r\n selectedRowValues?: VisitorBookingRowValues;\r\n};\r\n\r\nexport type VisitorBookingContextAction = {\r\n type: string;\r\n payload?: string | VisitorBookingRowValues;\r\n};\r\n\r\nexport const initialState: VisitorBookingContextDataGridState = {\r\n sortBy: \"creationDate\",\r\n orderDesc: true,\r\n showCancelBookingWarning: false,\r\n};\r\n\r\nexport default (\r\n state: VisitorBookingContextDataGridState = initialState,\r\n action: VisitorBookingContextAction\r\n): VisitorBookingContextDataGridState => {\r\n switch (action.type) {\r\n case visitorBookingContextTypes.SET_SORTING:\r\n return {\r\n ...state,\r\n sortBy: action.payload as string,\r\n orderDesc: state.orderDesc != null ? !state.orderDesc : false,\r\n };\r\n case visitorBookingContextTypes.TOGGLE_SHOW_CANCEL_VISITORBOOKING:\r\n return {\r\n ...state,\r\n showCancelBookingWarning: !state.showCancelBookingWarning,\r\n };\r\n case visitorBookingContextTypes.SET_SELECTED_ROW_VALUES:\r\n return {\r\n ...state,\r\n selectedRowValues: action.payload as VisitorBookingRowValues,\r\n };\r\n }\r\n\r\n return state;\r\n};\r\n","import React, { createContext, useMemo, useReducer } from \"react\";\r\nimport {\r\n DataTableContextState,\r\n useDataTableContext,\r\n} from \"../components/DataTable/DataTableContext/DataTableContextProvider\";\r\nimport { visitorBookingContextTypes } from \"./store/actions/visitorBooking.types\";\r\nimport visitorBookingReducer, {\r\n initialState,\r\n VisitorBookingContextDataGridState,\r\n VisitorBookingRowValues,\r\n} from \"./store/reducers/visitorBooking.reducer\";\r\n\r\ntype VisitorBookingContextType = {\r\n dataTable: DataTableContextState;\r\n visitorBookingContextState: VisitorBookingContextDataGridState;\r\n setPageNumber: (pageNumber: number) => void;\r\n setPageSize: (pageSize: number) => void;\r\n setSorting: (sortBy: string) => void;\r\n resetPageNumber: () => void;\r\n resetPageSize: () => void;\r\n toggleCancelVisitorBookingWarning: () => void;\r\n setSelectedRowValues: (visitorBookingRowValues: VisitorBookingRowValues) => void;\r\n};\r\n\r\nexport const VisitorBookingContext = createContext(\r\n {} as VisitorBookingContextType\r\n);\r\n\r\ninterface IVisitorBookingContextProps {}\r\n\r\nconst VisitorBookingContextProvider: React.FC = ({\r\n children,\r\n}) => {\r\n const dataTableContext = useDataTableContext();\r\n const [visitorBookingContextState, dispatch] = useReducer(\r\n visitorBookingReducer,\r\n initialState\r\n );\r\n\r\n const setSorting = (sortBy: string) => {\r\n dispatch({\r\n type: visitorBookingContextTypes.SET_SORTING,\r\n payload: sortBy,\r\n });\r\n };\r\n\r\n const setPageNumber = (pageNumber: number): void =>\r\n dataTableContext.setPageNumber(pageNumber);\r\n const setPageSize = (pageSize: number): void =>\r\n dataTableContext.setPageSize(pageSize);\r\n const resetPageNumber = (): void => dataTableContext.resetPageNumber();\r\n const resetPageSize = (): void => dataTableContext.resetPageSize();\r\n\r\n const toggleCancelVisitorBookingWarning = () =>\r\n dispatch({\r\n type: visitorBookingContextTypes.TOGGLE_SHOW_CANCEL_VISITORBOOKING,\r\n });\r\n\r\n const setSelectedRowValues = (visitorBookingRowValues: VisitorBookingRowValues) =>\r\n dispatch({\r\n type: visitorBookingContextTypes.SET_SELECTED_ROW_VALUES,\r\n payload: visitorBookingRowValues,\r\n });\r\n\r\n const store: VisitorBookingContextType = {\r\n dataTable: dataTableContext.state,\r\n visitorBookingContextState,\r\n setSorting,\r\n setPageNumber,\r\n setPageSize,\r\n resetPageNumber,\r\n resetPageSize,\r\n toggleCancelVisitorBookingWarning,\r\n setSelectedRowValues\r\n };\r\n\r\n const memoStore = useMemo(\r\n () => ({\r\n store,\r\n }),\r\n [store]\r\n );\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport default VisitorBookingContextProvider;\r\n","import { useContext } from \"react\";\r\nimport { VisitorBookingContext } from \"../VisitorBookingContextProvider\";\r\n\r\nconst useVisitorBookingContext = () => useContext(VisitorBookingContext);\r\n\r\nexport default useVisitorBookingContext;\r\n","import { VisitorBookingApi } from \"./visitorBookingApi.types\";\r\n\r\nexport const visitorBookingApi: VisitorBookingApi = (() => {\r\n const baseUrl = \"/api/VisitorBooking\";\r\n\r\n const getProductConfigurationsUrl = (customerId: string) =>\r\n `${baseUrl}/GetProductConfigurations/${customerId}`;\r\n\r\n const getParkingLocationsUrl = () => `${baseUrl}/GetParkingLocations`;\r\n\r\n const getCreateVisitorBookingUrl = (\r\n customerId: string,\r\n referenceNumber: string\r\n ) => `${baseUrl}/CreateVisitorBooking/${customerId}/${referenceNumber}`;\r\n\r\n const getCreateVisitorBookingsUrl = (\r\n customerId: string\r\n ) => `${baseUrl}/CreateVisitorBookings/${customerId}`;\r\n\r\n const getVisitorBookingsUrl = (customerId: string) =>\r\n `${baseUrl}/GetVisitorBookings/${customerId}`;\r\n\r\n const getCancelVisitorBookingUrl = (\r\n customerId: string,\r\n referenceNumber: string\r\n ) => `${baseUrl}/CancelVisitorBooking/${customerId}/${referenceNumber}`;\r\n\r\n const getParkingFacilityImagesUrl = () => \r\n `${baseUrl}/GetFacilityImages`;\r\n\r\n return {\r\n getProductConfigurationsUrl,\r\n getParkingLocationsUrl,\r\n getCreateVisitorBookingUrl,\r\n getCreateVisitorBookingsUrl,\r\n getVisitorBookingsUrl,\r\n getCancelVisitorBookingUrl,\r\n getParkingFacilityImagesUrl\r\n };\r\n})();\r\n","import {\r\n CreateVisitorBookingRequest,\r\n VisitorBookingProductConfiguration,\r\n VisitorBookingsList,\r\n} from \"../../models/visitor-booking\";\r\nimport { VisitorBookingService } from \"./visitorBookingService.types\";\r\nimport { visitorBookingApi } from \"../../api/visitor-booking\";\r\nimport { AxiosResponse } from \"axios\";\r\nimport { ParkingLocationCountry } from \"../../models/visitor-booking/ParkingLocationCountry\";\r\nimport { ParkingLocationsRequestModel } from \"../../models/visitor-booking/ParkingLocationsRequestModel\";\r\nimport { VisitorBookingsRequest } from \"../../models/visitor-booking/VisitorBookingsRequest\";\r\nimport axios from \"../../axios\";\r\nimport { WithFiltersAndPaging } from \"../../models/filters/WithFiltersAndPaging\";\r\nimport queryParam from \"../../utils/queryParam.utils\";\r\nimport { CreateVisitorBookingsRequest } from \"../../models/visitor-booking/CreateVisitorBookingsRequest\";\r\nimport { GetFacilityImagesRequest } from \"../../models/visitor-booking/GetFacilityImagesRequest\";\r\nimport { ParkingFacilityImageModel } from \"../../models/visitor-booking/ParkingFacilityImageModel\";\r\n\r\nexport const visitorBookingService: VisitorBookingService = (() => {\r\n const getProductsConfigurations = (\r\n customerId: string\r\n ): Promise> => {\r\n return axios.get(visitorBookingApi.getProductConfigurationsUrl(customerId));\r\n };\r\n\r\n const getParkingLocations = (\r\n parkingLocationsRequest: ParkingLocationsRequestModel\r\n ): Promise> => {\r\n return axios.post(visitorBookingApi.getParkingLocationsUrl(), parkingLocationsRequest);\r\n };\r\n\r\n const createVisitorBooking = (\r\n customerId: string,\r\n referenceNumber: string,\r\n body: CreateVisitorBookingRequest\r\n ) => {\r\n return axios.post(\r\n visitorBookingApi.getCreateVisitorBookingUrl(customerId, referenceNumber),\r\n body\r\n );\r\n };\r\n\r\n const createVisitorBookings = (customerId: string, body: CreateVisitorBookingsRequest) => {\r\n return axios.post(visitorBookingApi.getCreateVisitorBookingsUrl(customerId), body);\r\n };\r\n\r\n const getVisitorBookings = (\r\n request: WithFiltersAndPaging\r\n ): Promise> => {\r\n const params = queryParam.buildQueryParam(request.filters!, request.pagination);\r\n\r\n return axios.get(visitorBookingApi.getVisitorBookingsUrl(request.entity.customerId), {\r\n params,\r\n });\r\n };\r\n\r\n const cancelVisitorBooking = (customerId: string, referenceNumber: string) =>\r\n axios.post(visitorBookingApi.getCancelVisitorBookingUrl(customerId, referenceNumber));\r\n\r\n const getParkingFacilityImages = (body: GetFacilityImagesRequest[]) =>\r\n axios.post(visitorBookingApi.getParkingFacilityImagesUrl(), body);\r\n\r\n return {\r\n getProductsConfigurations,\r\n getParkingLocations,\r\n createVisitorBooking,\r\n createVisitorBookings,\r\n getVisitorBookings,\r\n cancelVisitorBooking,\r\n getParkingFacilityImages,\r\n };\r\n})();\r\n","export type PrebookingProductsApi = {\r\n getProductSalesAvailabilityUrl: (\r\n physicalZoneUid: string,\r\n startDate: string,\r\n endDate: string,\r\n customerId: string,\r\n productId: string\r\n ) => string;\r\n};\r\n\r\nexport const prebookingProductsApi: PrebookingProductsApi = (() => {\r\n const baseUrl = \"/api/PrebookingProducts\";\r\n\r\n const getProductSalesAvailabilityUrl = (\r\n physicalZoneUid: string,\r\n startDate: string,\r\n endDate: string,\r\n customerId: string,\r\n productId: string\r\n ) =>\r\n `${baseUrl}/availability/${customerId}/${productId}?physicalZoneUid=${physicalZoneUid}&startDate=${startDate}&endDate=${endDate}`;\r\n return {\r\n getProductSalesAvailabilityUrl,\r\n };\r\n})();\r\n","import { AxiosResponse } from \"axios\";\r\nimport axios from \"../axios\";\r\nimport { ProductsSalesAvailability } from \"../models/visitor-booking/ProductsSalesAvailability\";\r\nimport { prebookingProductsApi } from \"../api/prebookingProducts.api\";\r\n\r\nexport type PrebookingProductsService = {\r\n getProductSalesAvailability: (\r\n physicalZoneUid: string,\r\n startDate: string,\r\n endDate: string,\r\n customerId: string,\r\n productId: string\r\n ) => Promise>;\r\n};\r\n\r\nexport const prebookingProductsService: PrebookingProductsService = (() => {\r\n const getProductSalesAvailability = (\r\n physicalZoneUid: string,\r\n startDate: string,\r\n endDate: string,\r\n customerId: string,\r\n productId: string\r\n ) =>\r\n axios.get(\r\n prebookingProductsApi.getProductSalesAvailabilityUrl(\r\n physicalZoneUid,\r\n startDate,\r\n endDate,\r\n customerId,\r\n productId\r\n )\r\n );\r\n\r\n return {\r\n getProductSalesAvailability,\r\n };\r\n})();\r\n","import { isEmpty, isUndefined } from \"underscore\";\r\nimport {\r\n CreateVisitorBookingRequest,\r\n VisitorBookingsList,\r\n} from \"./../../../models/visitor-booking\";\r\nimport { AxiosError, AxiosResponse } from \"axios\";\r\nimport { Dispatch } from \"react\";\r\nimport { VisitorBookingProductConfiguration } from \"../../../models/visitor-booking\";\r\nimport { visitorBookingService } from \"../../../services/visitor-booking\";\r\nimport { visitorBookingTypes } from \"../../action-types\";\r\nimport { request, success, failure } from \"../../helpers/action.helper\";\r\nimport { VisitorBookingAction, VisitorBookingActions } from \"./visitorBookingActions.types\";\r\nimport { loaderActions } from \"../loader.actions\";\r\nimport { ParkingLocationCountry } from \"../../../models/visitor-booking/ParkingLocationCountry\";\r\nimport { ParkingLocationsRequestModel } from \"../../../models/visitor-booking/ParkingLocationsRequestModel\";\r\nimport { toastTriggers } from \"../../../ui/CustomToast/toastTriggers\";\r\nimport { VisitorBookingsRequest } from \"../../../models/visitor-booking/VisitorBookingsRequest\";\r\nimport { WithFiltersAndPaging } from \"../../../models/filters/WithFiltersAndPaging\";\r\nimport { RootReducer } from \"../../reducers\";\r\nimport { ErrorDetailsModel } from \"../../../models/ErrorDetailsModel\";\r\nimport { checkRequestError } from \"../../../utils/errors.utils\";\r\nimport { CreateVisitorBookingsRequest } from \"../../../models/visitor-booking/CreateVisitorBookingsRequest\";\r\nimport { ProductsSalesAvailability } from \"../../../models/visitor-booking/ProductsSalesAvailability\";\r\nimport { GetFacilityImagesRequest } from \"../../../models/visitor-booking/GetFacilityImagesRequest\";\r\nimport { ParkingFacilityImageModel } from \"../../../models/visitor-booking/ParkingFacilityImageModel\";\r\nimport { prebookingProductsService } from \"../../../services/prebookingProducts.service\";\r\n\r\nexport const visitorBookingActions: VisitorBookingActions = (() => {\r\n const getProductConfigurations = (customerId: string) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch(loaderActions.loadTheLoader() as any);\r\n dispatch({\r\n type: request(visitorBookingTypes.GET_PRODUCT_CONFIGURATIONS),\r\n });\r\n\r\n visitorBookingService\r\n .getProductsConfigurations(customerId)\r\n .then((response: AxiosResponse) => {\r\n dispatch({\r\n type: success(visitorBookingTypes.GET_PRODUCT_CONFIGURATIONS),\r\n productConfigurationsPayload: response.data,\r\n });\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(visitorBookingTypes.GET_PRODUCT_CONFIGURATIONS),\r\n });\r\n })\r\n .finally(() => {\r\n dispatch(loaderActions.killTheLoader() as any);\r\n });\r\n };\r\n };\r\n\r\n const getParkingLocations = (model: ParkingLocationsRequestModel) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch(loaderActions.loadTheLoader() as any);\r\n dispatch({\r\n type: request(visitorBookingTypes.GET_PARKING_LOCATIONS),\r\n });\r\n\r\n visitorBookingService\r\n .getParkingLocations(model)\r\n .then((response: AxiosResponse) => {\r\n dispatch({\r\n type: success(visitorBookingTypes.GET_PARKING_LOCATIONS),\r\n parkingLocationsPayload: response.data,\r\n });\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(visitorBookingTypes.GET_PARKING_LOCATIONS),\r\n });\r\n })\r\n .finally(() => {\r\n dispatch(loaderActions.killTheLoader() as any);\r\n });\r\n };\r\n };\r\n\r\n const createVisitorBooking = (\r\n customerId: string,\r\n referenceNumber: string,\r\n body: CreateVisitorBookingRequest,\r\n onSuccess?: VoidFunction\r\n ) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch(loaderActions.loadTheLoader() as any);\r\n dispatch({\r\n type: request(visitorBookingTypes.CREATE_VISITOR_BOOKING),\r\n });\r\n\r\n visitorBookingService\r\n .createVisitorBooking(customerId, referenceNumber, body)\r\n .then(() => {\r\n dispatch({\r\n type: success(visitorBookingTypes.CREATE_VISITOR_BOOKING),\r\n });\r\n\r\n toastTriggers.success({\r\n content: {\r\n key: \"visitorBooking.createVisitorBooking.success\",\r\n },\r\n });\r\n\r\n if (!isUndefined(onSuccess)) {\r\n onSuccess();\r\n }\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(visitorBookingTypes.CREATE_VISITOR_BOOKING),\r\n });\r\n\r\n const errorDetails = (error.response?.data as any)?.error;\r\n let toastKey = \"visitorBooking.createVisitorBooking.error\";\r\n\r\n if (checkRequestError(errorDetails, \"Price\", \"NotFound\")) {\r\n toastKey = \"visitorBooking.createVisitorBooking.priceSetupNotFound\";\r\n }\r\n\r\n if (checkRequestError(errorDetails, \"NumberPlate\", \"NotValid\")) {\r\n toastKey = \"visitorBooking.createVisitorBooking.numberPlateNotValid\";\r\n }\r\n\r\n toastTriggers.error({\r\n content: {\r\n key: toastKey,\r\n },\r\n });\r\n })\r\n .finally(() => {\r\n dispatch(loaderActions.killTheLoader() as any);\r\n });\r\n };\r\n };\r\n\r\n const createVisitorBookings = (\r\n customerId: string,\r\n body: CreateVisitorBookingsRequest,\r\n onSuccess?: VoidFunction\r\n ) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch(loaderActions.loadTheLoader() as any);\r\n dispatch({\r\n type: request(visitorBookingTypes.CREATE_VISITOR_BOOKINGS),\r\n });\r\n\r\n visitorBookingService\r\n .createVisitorBookings(customerId, body)\r\n .then(() => {\r\n dispatch({\r\n type: success(visitorBookingTypes.CREATE_VISITOR_BOOKINGS),\r\n });\r\n\r\n toastTriggers.success({\r\n content: {\r\n key: \"visitorBooking.createVisitorBookings.success\",\r\n },\r\n });\r\n\r\n if (!isUndefined(onSuccess)) {\r\n onSuccess();\r\n }\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(visitorBookingTypes.CREATE_VISITOR_BOOKINGS),\r\n });\r\n\r\n const errorDetails = (error.response?.data as any)?.error;\r\n let toastKey = \"visitorBooking.createVisitorBookings.error\";\r\n\r\n if (checkRequestError(errorDetails, \"Price\", \"NotFound\")) {\r\n toastKey = \"visitorBooking.createVisitorBookings.priceSetupNotFound\";\r\n }\r\n\r\n if (checkRequestError(errorDetails, \"NumberPlate\", \"NotValid\")) {\r\n toastKey = \"visitorBooking.createVisitorBookings.numberPlateNotValid\";\r\n }\r\n\r\n if (checkRequestError(errorDetails, \"VisitorBookings\", \"IsRequired\")) {\r\n toastKey = \"visitorBooking.createVisitorBookings.visitorBookingsMissing\";\r\n }\r\n\r\n toastTriggers.error({\r\n content: {\r\n key: toastKey,\r\n },\r\n });\r\n })\r\n .finally(() => {\r\n dispatch(loaderActions.killTheLoader() as any);\r\n });\r\n };\r\n };\r\n\r\n const getVisitorBookings = (req: WithFiltersAndPaging) => {\r\n return (dispatch: Dispatch, getState: () => RootReducer) => {\r\n const { parkingProducts } = getState().parkingProducts;\r\n const { parkingLocations } = getState().visitorBooking;\r\n\r\n if (isEmpty(parkingProducts.data) || isEmpty(parkingLocations.data)) {\r\n dispatch(loaderActions.loadTheLoader() as any);\r\n }\r\n\r\n dispatch({\r\n type: request(visitorBookingTypes.GET_VISITOR_BOOKINGS),\r\n });\r\n\r\n visitorBookingService\r\n .getVisitorBookings(req)\r\n .then((response: AxiosResponse) => {\r\n dispatch({\r\n type: success(visitorBookingTypes.GET_VISITOR_BOOKINGS),\r\n visitorBookingsPayload: response.data,\r\n });\r\n })\r\n .catch(() => {\r\n dispatch({\r\n type: failure(visitorBookingTypes.GET_VISITOR_BOOKINGS),\r\n });\r\n })\r\n .finally(() => {\r\n dispatch(loaderActions.killTheLoader() as any);\r\n });\r\n };\r\n };\r\n\r\n const cancelVisitorBooking = (\r\n customerId: string,\r\n referenceNumber: string,\r\n onSuccess?: VoidFunction\r\n ) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch(loaderActions.loadTheLoader() as any);\r\n dispatch({\r\n type: request(visitorBookingTypes.CANCEL_VISITOR_BOOKING),\r\n });\r\n\r\n visitorBookingService\r\n .cancelVisitorBooking(customerId, referenceNumber)\r\n .then(() => {\r\n dispatch({\r\n type: success(visitorBookingTypes.CANCEL_VISITOR_BOOKING),\r\n cancelledVisitorBookingReference: referenceNumber,\r\n });\r\n\r\n toastTriggers.success({\r\n content: {\r\n key: \"visitorBooking.cancelVisitorBooking.success\",\r\n },\r\n });\r\n\r\n if (!isUndefined(onSuccess)) {\r\n onSuccess();\r\n }\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(visitorBookingTypes.CANCEL_VISITOR_BOOKING),\r\n });\r\n\r\n const details = error.response?.data as ErrorDetailsModel;\r\n let toastKey = \"visitorBooking.cancelVisitorBooking.error\";\r\n\r\n let detailsError = details.errors[0];\r\n if (detailsError) {\r\n if (detailsError.visitorBookingStartTime === \"notBeforeNow\") {\r\n toastKey = \"visitorBooking.cancelVisitorBooking.pastBookingWarning\";\r\n }\r\n\r\n if (detailsError.session === \"usedSession\") {\r\n toastKey = \"visitorBooking.cancelVisitorBooking.usedSession\";\r\n }\r\n }\r\n\r\n toastTriggers.error({\r\n content: {\r\n key: toastKey,\r\n },\r\n });\r\n })\r\n .finally(() => {\r\n dispatch(loaderActions.killTheLoader() as any);\r\n });\r\n };\r\n };\r\n\r\n const visitorBookingValidationLoading = (loading: boolean) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: success(visitorBookingTypes.HANDLE_VISITOR_BOOKING_VALIDATION),\r\n loading: loading,\r\n });\r\n };\r\n };\r\n\r\n const getProductSalesAvailability = (\r\n physicalZoneUid: string,\r\n startDate: string,\r\n endDate: string,\r\n customerId: string,\r\n productId: string\r\n ) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch(loaderActions.loadTheLoader() as any);\r\n dispatch({\r\n type: request(visitorBookingTypes.GET_PRODUCT_SALES_AVAILABILITY),\r\n });\r\n\r\n prebookingProductsService\r\n .getProductSalesAvailability(\r\n physicalZoneUid,\r\n startDate,\r\n endDate,\r\n customerId,\r\n productId\r\n )\r\n .then((response: AxiosResponse) => {\r\n dispatch({\r\n type: success(visitorBookingTypes.GET_PRODUCT_SALES_AVAILABILITY),\r\n productSalesAvailabilityPayload: response.data,\r\n });\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(visitorBookingTypes.GET_PRODUCT_SALES_AVAILABILITY),\r\n });\r\n })\r\n .finally(() => {\r\n dispatch(loaderActions.killTheLoader() as any);\r\n });\r\n };\r\n };\r\n\r\n const getParkingFacilityImages = (body: GetFacilityImagesRequest[]) => {\r\n return (dispatch: Dispatch) => {\r\n dispatch(loaderActions.loadTheLoader() as any);\r\n dispatch({\r\n type: request(visitorBookingTypes.GET_PARKING_FACILITY_IMAGES),\r\n });\r\n\r\n visitorBookingService\r\n .getParkingFacilityImages(body)\r\n .then((response: AxiosResponse) => {\r\n dispatch({\r\n type: success(visitorBookingTypes.GET_PARKING_FACILITY_IMAGES),\r\n facilityImagesPayload: response.data,\r\n });\r\n })\r\n .catch((error: AxiosError) => {\r\n dispatch({\r\n type: failure(visitorBookingTypes.GET_PARKING_FACILITY_IMAGES),\r\n });\r\n })\r\n .finally(() => {\r\n dispatch(loaderActions.killTheLoader() as any);\r\n });\r\n };\r\n };\r\n\r\n return {\r\n getProductConfigurations,\r\n getParkingLocations,\r\n createVisitorBooking,\r\n createVisitorBookings,\r\n getVisitorBookings,\r\n cancelVisitorBooking,\r\n visitorBookingValidationLoading,\r\n getProductSalesAvailability,\r\n getParkingFacilityImages,\r\n };\r\n})();\r\n","import React, { Dispatch } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport Warning from \"./Warning\";\r\nimport useAppContext from \"../../context/hooks/useAppContext\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport useVisitorBookingContext from \"../../context/hooks/useVisitorBookingContext\";\r\nimport { visitorBookingActions } from \"../../store/actions/visitor-booking\";\r\n\r\ninterface IFormProps extends DispatchProps {\r\n customerName: string;\r\n referenceNumber: string;\r\n}\r\n\r\nconst CancelVisitorBookingWarning = (props: IFormProps) => {\r\n const { customerName, referenceNumber, cancelVisitorBooking } = props;\r\n const { t } = useTranslation([\"visitors\"]);\r\n\r\n const { toggleCancelVisitorBookingWarning } = useVisitorBookingContext();\r\n const {\r\n appState: { user },\r\n } = useAppContext();\r\n\r\n const handleDeleteCancelation = () => {\r\n toggleCancelVisitorBookingWarning();\r\n };\r\n\r\n const handleDeleteConfirmation = () => {\r\n cancelVisitorBooking(user.seasonTicketOwnerCrmId!, referenceNumber);\r\n toggleCancelVisitorBookingWarning();\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n cancelVisitorBooking: (customerId: string, referenceNumber: string) =>\r\n dispatch(\r\n visitorBookingActions.cancelVisitorBooking(customerId, referenceNumber)\r\n ),\r\n});\r\n\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(null, mapDispatchToProps)(CancelVisitorBookingWarning);\r\n","import React from \"react\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../theme/variables\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Fonts } from \"../../typography\";\r\nimport { VisitorBookingStatus } from \"../../models/visitor-booking\";\r\n\r\nconst { colors, typography } = variables;\r\nconst { FuturaD } = Fonts;\r\n\r\ninterface IStatus {\r\n variant: string;\r\n}\r\n\r\ninterface IVisitorBookingStatusProps {\r\n type?: VisitorBookingStatus;\r\n}\r\n\r\nconst StyledStatus = styled.div`\r\n background-color: ${({ variant }: IStatus) => `rgba(${variant}, .1)`};\r\n color: ${({ variant }: IStatus) => `rgb(${variant})`};\r\n font-size: ${typography.fontSizeSmaller};\r\n font-family: ${FuturaD.fontFamily};\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 3px 15px;\r\n border-radius: 500px;\r\n`;\r\n\r\nconst VisitorStatus = (props: IVisitorBookingStatusProps) => {\r\n const { type } = props;\r\n\r\n if (type === VisitorBookingStatus.Draft) {\r\n return ;\r\n }\r\n if (type === VisitorBookingStatus.Booked) {\r\n return ;\r\n }\r\n if (type === VisitorBookingStatus.Cancelled) {\r\n return ;\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst Draft = () => {\r\n const { t } = useTranslation(\"globals\");\r\n\r\n return (\r\n \r\n {t(\"draft\")}\r\n \r\n );\r\n};\r\n\r\nconst Booked = () => {\r\n const { t } = useTranslation(\"globals\");\r\n\r\n return {t(\"booked\")};\r\n};\r\n\r\nconst Cancelled = () => {\r\n const { t } = useTranslation(\"globals\");\r\n\r\n return (\r\n \r\n {t(\"cancelled\")}\r\n \r\n );\r\n};\r\n\r\nexport default VisitorStatus;","export class VisitorBookingConstants {\r\n public static ReferenceNumber: string = \"ref\";\r\n}","import moment from \"moment-timezone\";\r\nimport React, { useEffect, Dispatch, useCallback } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { RootReducer } from \"../../../../store/reducers\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useHistory } from \"react-router\";\r\nimport { isEmpty, isUndefined } from \"underscore\";\r\nimport { v4 as uuidV4 } from \"uuid\";\r\nimport { IDataTableRow } from \"../../../../components/DataTable/DataTableBody/DataTableBody\";\r\nimport {\r\n FilterType,\r\n IFilteredColumn,\r\n} from \"../../../../components/DataTable/DataTableFilters/DataTableFilters\";\r\nimport { QParkChip } from \"../../../../components/QParkChip\";\r\nimport VisitorStatus from \"../../../../components/VisitorStatus/VisitorStatus\";\r\nimport { VisitorBookingConstants } from \"../../../../constants\";\r\nimport {\r\n ProductType,\r\n VisitorBookingDetails,\r\n VisitorBookingsList,\r\n VisitorBookingStatus,\r\n} from \"../../../../models/visitor-booking\";\r\nimport routes from \"../../../../router/routes\";\r\nimport filteredColumnObjectBuilder from \"../../../FleetManager/MyProducts/ObjectBuilders/FilteredColumnObjectBuilder\";\r\nimport {\r\n useDataTableContext,\r\n DataTableContextFilters,\r\n} from \"../../../../components/DataTable/DataTableContext/DataTableContextProvider\";\r\nimport { visitorBookingActions } from \"../../../../store/actions/visitor-booking\";\r\nimport { VisitorBookingsRequest } from \"../../../../models/visitor-booking/VisitorBookingsRequest\";\r\nimport {\r\n FmpFilters,\r\n} from \"../../../../constants/filtering.constants\";\r\nimport useAppContext from \"../../../../context/hooks/useAppContext\";\r\nimport { WithFiltersAndPaging } from \"../../../../models/filters/WithFiltersAndPaging\";\r\nimport useVisitorBookingContext from \"../../../../context/hooks/useVisitorBookingContext\";\r\nimport {\r\n getFacilityOptions,\r\n getProductConfigurationOptions,\r\n} from \"../../../../helpers/selectOptionHelper\";\r\nimport { NoPaddingGrid } from \"../../../FleetManager/FleetManagerDataTable/StyledComponents\";\r\nimport DataTable from \"../../../../components/DataTable/DataTable\";\r\nimport { Tooltip } from \"@material-ui/core\";\r\nimport {\r\n ActionsIconHoverButton,\r\n CancelIcon,\r\n} from \"../../../../components/DataTable/DataTableStyledComponents\";\r\n\r\nexport interface VisitorBookingTableModel extends IDataTableRow {\r\n customerId?: string;\r\n referenceNumber?: string;\r\n customerName: string;\r\n customerEmailAddress: string;\r\n facility: string;\r\n creationDate: string;\r\n product: JSX.Element;\r\n startDateTime: string;\r\n endDateTime: string;\r\n status: JSX.Element | null;\r\n visitorStatus: VisitorBookingStatus;\r\n}\r\n\r\nconst _createData = (\r\n visitorBookingDetails: VisitorBookingDetails\r\n): VisitorBookingTableModel => ({\r\n rowKey: visitorBookingDetails.referenceNumber,\r\n disabled: visitorBookingDetails.status == VisitorBookingStatus.Cancelled,\r\n customerName: visitorBookingDetails.customerName,\r\n customerEmailAddress: visitorBookingDetails.customerEmailAddress,\r\n facility: visitorBookingDetails.facility,\r\n product: ,\r\n creationDate: moment(visitorBookingDetails.creationDate).local()\r\n .format(\"DD/MM/YYYY HH:mm\"),\r\n startDateTime:\r\n visitorBookingDetails.productType === ProductType.FixedRate\r\n ? moment(visitorBookingDetails.startDateTime).format(\"DD/MM/YYYY\")\r\n : FormatDateTimeForFacilityTimeZone(visitorBookingDetails.startDateTime, visitorBookingDetails.physicalZoneUid),\r\n endDateTime:\r\n visitorBookingDetails.productType === ProductType.HourlyRate\r\n ? FormatDateTimeForFacilityTimeZone(visitorBookingDetails.endDateTime, visitorBookingDetails.physicalZoneUid)\r\n : \"-\",\r\n status: ,\r\n visitorStatus: visitorBookingDetails.status\r\n});\r\n\r\n\r\nconst FormatDateTimeForFacilityTimeZone = function (dateTime: Date, physicalZoneUid: string): string {\r\n return moment(dateTime).tz(moment.tz.zonesForCountry(physicalZoneUid.split(\".\")[0])[0]).format(\"DD/MM/YYYY HH:mm\");\r\n};\r\n\r\nconst VisitorBookingDataTable = (props: VisitorBookingDataTableProps) => {\r\n const {\r\n hasProductsConfigured,\r\n isLoading,\r\n parkingLocations,\r\n productConfigurations,\r\n visitorBookingsList: { visitorBookings, totalPages },\r\n getVisitorBookings,\r\n } = props;\r\n const {\r\n appState: { user, selectedLanguage },\r\n } = useAppContext();\r\n const { push } = useHistory();\r\n\r\n const dataTableContext = useDataTableContext();\r\n const {\r\n visitorBookingContextState,\r\n setSorting,\r\n setSelectedRowValues,\r\n toggleCancelVisitorBookingWarning,\r\n } = useVisitorBookingContext();\r\n const { t } = useTranslation([\"visitors\"]);\r\n\r\n const memoizedFetch = useCallback(\r\n (): void => fetchVisitorBookings(),\r\n // eslint-disable-next-line\r\n [\r\n dataTableContext.state.pageSize,\r\n dataTableContext.state.pageNumber,\r\n visitorBookingContextState.orderDesc,\r\n visitorBookingContextState.sortBy,\r\n user.seasonTicketOwnerCrmId,\r\n selectedLanguage,\r\n ]\r\n );\r\n\r\n useEffect(() => {\r\n memoizedFetch();\r\n }, [memoizedFetch]);\r\n\r\n const getRequestModel = (): WithFiltersAndPaging => {\r\n const filters = JSON.parse(\r\n JSON.stringify(dataTableContext.state.filters ?? [])\r\n ) as DataTableContextFilters[];\r\n\r\n const request: WithFiltersAndPaging = {\r\n entity: {\r\n customerId: user.seasonTicketOwnerCrmId!,\r\n },\r\n pagination: {\r\n pageNumber: dataTableContext.state.pageNumber!,\r\n pageSize: dataTableContext.state.pageSize!,\r\n },\r\n filters: [\r\n {\r\n key: FmpFilters.sortBy,\r\n type: FilterType.QueryParam,\r\n value: visitorBookingContextState.sortBy,\r\n },\r\n {\r\n key: FmpFilters.orderDesc,\r\n type: FilterType.QueryParam,\r\n value: visitorBookingContextState.orderDesc?.toString(),\r\n },\r\n ...filters,\r\n ],\r\n };\r\n\r\n return request;\r\n };\r\n\r\n const redirectToNewBooking = () => {\r\n if (isUndefined(routes.visitors.subRoutes)) {\r\n return;\r\n }\r\n\r\n const newBookingPath = routes.visitors.subRoutes.find(\r\n (p) => p.name === \"newBooking\"\r\n );\r\n\r\n if (isUndefined(newBookingPath)) {\r\n return;\r\n }\r\n\r\n push({\r\n pathname: newBookingPath.path as string,\r\n search: `${VisitorBookingConstants.ReferenceNumber}=${uuidV4()}`,\r\n });\r\n };\r\n\r\n const clickCancelVisitorBooking = (dataRow: IDataTableRow) => {\r\n setSelectedRowValues({\r\n customerName: dataRow.customerName,\r\n referenceNumber: dataRow.rowKey,\r\n });\r\n toggleCancelVisitorBookingWarning();\r\n };\r\n\r\n const columns: IFilteredColumn[] =\r\n filteredColumnObjectBuilder.buildVisitorBookingsColumns(\r\n t,\r\n getProductConfigurationOptions(productConfigurations?.data ?? []),\r\n getFacilityOptions(parkingLocations?.data ?? [])\r\n );\r\n\r\n const getTableRows = (): VisitorBookingTableModel[] => {\r\n if (isEmpty(visitorBookings)) {\r\n return [];\r\n }\r\n\r\n return visitorBookings.map(_createData);\r\n };\r\n const rows: VisitorBookingTableModel[] = getTableRows();\r\n\r\n const fetchVisitorBookings = () => {\r\n getVisitorBookings(getRequestModel());\r\n };\r\n\r\n const onSort = (\r\n _: React.MouseEvent,\r\n property: keyof VisitorBookingTableModel\r\n ) => {\r\n setSorting(property.toString());\r\n };\r\n\r\n const renderCancelBtn = (focusedRow: IDataTableRow): JSX.Element => {\r\n if (focusedRow?.disabled || focusedRow?.visitorStatus === VisitorBookingStatus.Draft) {\r\n return <>;\r\n }\r\n return (\r\n \r\n clickCancelVisitorBooking(focusedRow)}\r\n >\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n return (\r\n \r\n \r\n []}\r\n actionBtn={renderCancelBtn}\r\n loading={isLoading}\r\n heading={{\r\n options: {\r\n useHeading: true,\r\n showHeadingCount: false,\r\n },\r\n title: t(\"bookingOverview\"),\r\n }}\r\n filtering={{\r\n options: {\r\n useFilters: true,\r\n },\r\n }}\r\n onFilterClicked={fetchVisitorBookings}\r\n onResetFiltersClicked={fetchVisitorBookings}\r\n actions={{\r\n options: {\r\n useActions: true,\r\n },\r\n add: {\r\n useAdd: true,\r\n showAdd: hasProductsConfigured,\r\n addLabel: t(\"VisitorBookingDataTable.newBooking\"),\r\n onAddClicked: redirectToNewBooking,\r\n },\r\n }}\r\n orderBy={visitorBookingContextState.sortBy ?? \"\"}\r\n order={visitorBookingContextState.orderDesc ? \"desc\" : \"asc\"}\r\n onRequestSort={onSort}\r\n pages={totalPages}\r\n selectedRowKeys={[]}\r\n setSelectedRowKeys={() => {}}\r\n hideWhenNoData={false}\r\n hideActionsMenu={false}\r\n translationOverrideKey={\"visitorBookings\"}\r\n hideCheckBoxes={true}\r\n hiddenKeys={[\"visitorStatus\"]}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\ninterface VisitorBookingDataTableProps extends StateProps, DispatchProps {\r\n hasProductsConfigured: boolean;\r\n isLoading: boolean;\r\n visitorBookingsList: VisitorBookingsList;\r\n}\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { visitorBooking } = state;\r\n const { parkingLocations, productConfigurations } = visitorBooking;\r\n\r\n return {\r\n parkingLocations,\r\n productConfigurations,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n getVisitorBookings: (body: WithFiltersAndPaging) =>\r\n dispatch(visitorBookingActions.getVisitorBookings(body)),\r\n});\r\n\r\ntype StateProps = ReturnType;\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(VisitorBookingDataTable);\r\n","import { Grid } from \"@material-ui/core\";\r\nimport React, { Dispatch, useEffect, useMemo } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { connect } from \"react-redux\";\r\nimport styled from \"styled-components\";\r\nimport { isEmpty } from \"underscore\";\r\nimport CancelVisitorBookingWarning from \"../../../components/Warnings/CancelVisitorBookingWarning\";\r\nimport useAppContext from \"../../../context/hooks/useAppContext\";\r\nimport useVisitorBookingContext from \"../../../context/hooks/useVisitorBookingContext\";\r\nimport { WithFiltersAndPaging } from \"../../../models/filters/WithFiltersAndPaging\";\r\nimport { VisitorBookingsRequest } from \"../../../models/visitor-booking/VisitorBookingsRequest\";\r\nimport parkingProductsActions from \"../../../store/actions/parkingProducts.actions\";\r\nimport { visitorBookingActions } from \"../../../store/actions/visitor-booking\";\r\nimport { RootReducer } from \"../../../store/reducers\";\r\nimport { variables } from \"../../../theme/variables\";\r\nimport ActionDrawer from \"../../../ui/ActionDrawer/ActionDrawer\";\r\nimport Section from \"../../../ui/Section/Section\";\r\nimport VisitorBookingDataTable from \"./VisitorBookingDataTable/VisitorBookingDataTable\";\r\n\r\nconst { colors, typography } = variables;\r\n\r\nconst Span = styled.span`\r\n display: block;\r\n color: ${colors.darkGraySecondary};\r\n font-size: ${typography.fontSizeLarge};\r\n width: 100%;\r\n text-align: center;\r\n`;\r\n\r\nconst BookingOverview = (props: BookingOverviewProps) => {\r\n const { appState } = useAppContext();\r\n\r\n const {\r\n productConfigurations,\r\n visitorBookingLoading,\r\n visitorBookingsList,\r\n getProductConfigurations,\r\n getParkingProducts,\r\n getParkingLocations,\r\n } = props;\r\n const {\r\n appState: { user },\r\n } = useAppContext();\r\n\r\n const { t } = useTranslation(\"visitors\");\r\n\r\n const { visitorBookingContextState, toggleCancelVisitorBookingWarning } =\r\n useVisitorBookingContext();\r\n\r\n const requestProductConfigurations = useMemo(\r\n () => getProductConfigurations(user.seasonTicketOwnerCrmId as string),\r\n [user.seasonTicketOwnerCrmId]\r\n );\r\n\r\n const fetchParkingProducts = useMemo(\r\n () =>\r\n getParkingProducts(\r\n user.seasonTicketOwnerCrmId as string,\r\n appState.selectedLanguage\r\n ),\r\n [user.seasonTicketOwnerCrmId, appState.selectedLanguage]\r\n );\r\n\r\n const requestParkingLocations = useMemo(() => {\r\n const uniquePhysicalZonesUids = Array.from(\r\n new Set(\r\n productConfigurations.data?.flatMap((p) => p.allowedPhysicalZoneIds)\r\n )\r\n );\r\n if (uniquePhysicalZonesUids.length > 0) {\r\n getParkingLocations(uniquePhysicalZonesUids);\r\n }\r\n }, [productConfigurations.data]);\r\n\r\n useEffect(() => requestProductConfigurations, [requestProductConfigurations]);\r\n useEffect(() => fetchParkingProducts, [fetchParkingProducts]);\r\n useEffect(() => requestParkingLocations, [requestParkingLocations]);\r\n\r\n if (productConfigurations.loading) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n {visitorBookingContextState.selectedRowValues && (\r\n \r\n )}\r\n \r\n\r\n \r\n \r\n {!isEmpty(productConfigurations.data) && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n \r\n {isEmpty(productConfigurations.data) && (\r\n
\r\n {t(\"noProductsAvailable\")}\r\n
\r\n )}\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\ninterface BookingOverviewProps extends StateProps, DispatchProps {}\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { productConfigurations, visitorBookings } = state.visitorBooking;\r\n\r\n return {\r\n productConfigurations,\r\n visitorBookingLoading: visitorBookings.loading,\r\n visitorBookingsList: visitorBookings.data ?? {\r\n visitorBookings: [],\r\n totalPages: 1,\r\n totalRecords: 0,\r\n },\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n getProductConfigurations: (customerId: string) =>\r\n dispatch(visitorBookingActions.getProductConfigurations(customerId)),\r\n getVisitorBookings: (request: WithFiltersAndPaging) =>\r\n dispatch(visitorBookingActions.getVisitorBookings(request)),\r\n getParkingProducts: (seasonTicketOwnerCrmId: string, location: string) =>\r\n dispatch(\r\n parkingProductsActions.getParkingProducts(\r\n seasonTicketOwnerCrmId,\r\n location\r\n )\r\n ),\r\n getParkingLocations: (uids: string[]) =>\r\n dispatch(\r\n visitorBookingActions.getParkingLocations({ physicalZoneUids: uids })\r\n ),\r\n});\r\n\r\ntype StateProps = ReturnType;\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BookingOverview);\r\n","import React from \"react\";\r\nimport DataTableContextProvider from \"../../components/DataTable/DataTableContext/DataTableContextProvider\";\r\nimport BookingOverview from \"../../containers/Visitors/BookingOverview/BookingOverview\";\r\nimport VisitorBookingContextProvider from \"../../context/VisitorBookingContextProvider\";\r\n\r\nconst BookingOverviewPage = () => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n\r\nexport default BookingOverviewPage;\r\n","import React, { PropsWithChildren } from \"react\";\r\nimport { isUndefined } from \"underscore\";\r\nimport \"./_actionFooter.scss\";\r\n\r\nconst ActionFooter = ({\r\n children,\r\n justifyContent,\r\n className,\r\n}: PropsWithChildren) => (\r\n \r\n \r\n {children}\r\n \r\n \r\n);\r\n\r\ninterface ActionFooterProps {\r\n justifyContent?: \"space-between\";\r\n className?: string;\r\n}\r\n\r\nexport default ActionFooter;\r\n","import { useFormik } from \"formik\";\r\nimport { TFunction } from \"i18next\";\r\nimport moment from \"moment\";\r\nimport * as Yup from \"yup\";\r\nimport { CountriesNumberPlates } from \"../../../../../lib/countriesNumberPlates\";\r\nimport { ProductType } from \"../../../../../models/visitor-booking\";\r\nimport { stringUtils } from \"../../../../../utils\";\r\nimport emailValidator from \"../../../../../validators/email.validator\";\r\nimport isValidnumberPlate from \"../../../../../validators/numberplate.validator\";\r\nimport { VisitorBookingNewBooking } from \"../models/VisitorBookingNewBooking\";\r\nimport { VisitorBookingNewBookingBulkDetails } from \"../models/VisitorBookingNewBookingBulk\";\r\nimport { isUndefined } from \"underscore\";\r\nimport { VisitorDetailModel } from \"../../../../../models/visitor-booking/VisitorDetailModel\";\r\n\r\nconst { format } = stringUtils;\r\n\r\ntype UseNewBookingFormikProps = {\r\n t: TFunction;\r\n onSubmit: (\r\n values: VisitorBookingNewBooking | VisitorBookingNewBookingBulkDetails | VisitorDetailModel\r\n ) => void;\r\n numberPlateCountryCode?: string;\r\n countryCode?: string;\r\n receptionistCountryCode?: string;\r\n};\r\n\r\ntype UseNewBookingVisitorDetailFormikProps = {\r\n t: TFunction;\r\n numberPlateCountryCode?: string;\r\n initialValues?: VisitorDetailModel;\r\n};\r\n\r\nconst undefinedHelper = (\r\n value: string | undefined,\r\n validation: (val: string) => boolean\r\n): boolean => (!isUndefined(value) ? validation(value) : false);\r\n\r\nexport const useNewBookingFormik = (props: UseNewBookingFormikProps) => {\r\n const { t, onSubmit, countryCode, numberPlateCountryCode, receptionistCountryCode } = props;\r\n const countriesNumberPlates = new CountriesNumberPlates();\r\n const preselectedNumberPlatePrefix =\r\n countriesNumberPlates.findNumberPlatePrefix(numberPlateCountryCode);\r\n\r\n const formSchema = Yup.object().shape(\r\n {\r\n name: Yup.string().optional().default(\"\"),\r\n emailAddress: Yup.string()\r\n .email(\r\n format(t(\"errors:format.field\"), t(\"globals:email\"), t(\"globals:email\").toLowerCase())\r\n )\r\n .required(format(t(\"errors:required.field\"), t(\"globals:email\").toLowerCase()))\r\n .test(\"email-regex-validation\", t(\"errors:format.email\"), (value: string | undefined) =>\r\n undefinedHelper(value, emailValidator.isValidEmail)\r\n )\r\n .default(\"\"),\r\n numberPlatePrefix: Yup.string().optional().default(preselectedNumberPlatePrefix),\r\n numberPlate: Yup.string()\r\n .optional()\r\n .test(\r\n \"numberplate-regex-validation\",\r\n t(\"errors:format.numberPlate\"),\r\n (value: string | undefined, ctx) =>\r\n ctx.parent.numberPlatePrefix?.toUpperCase() === \"D\"\r\n ? undefinedHelper(value, isValidnumberPlate.isValidGermanNumberPlate)\r\n : undefinedHelper(value, isValidnumberPlate.isValidNumberPlate)\r\n )\r\n .default(\"\"),\r\n country: Yup.string()\r\n .required(format(t(\"errors:required.field\"), t(\"globals:country\").toLowerCase()))\r\n .default(countryCode?.toLowerCase() ?? \"\"),\r\n city: Yup.string()\r\n .required(format(t(\"errors:required.field\"), t(\"globals:city\").toLowerCase()))\r\n .default(\"\"),\r\n physicalZone: Yup.string()\r\n .required(format(t(\"errors:required.field\"), t(\"globals:facility\").toLowerCase()))\r\n .default(\"\"),\r\n startDate: Yup.string()\r\n .required(format(t(\"errors:required.field\"), t(\"globals:startDate\").toLowerCase()))\r\n .default(\"\"),\r\n startTime: Yup.string()\r\n .when(\"productType\", {\r\n is: ProductType.HourlyRate,\r\n then: Yup.string().required(\r\n format(t(\"errors:required.field\"), t(\"globals:startTime\").toLowerCase())\r\n ),\r\n })\r\n .default(\"\"),\r\n endDate: Yup.string()\r\n .when(\"productType\", {\r\n is: ProductType.HourlyRate,\r\n then: Yup.string().required(\r\n format(t(\"errors:required.field\"), t(\"globals:endDate\").toLowerCase())\r\n ),\r\n })\r\n .when(\r\n [\"startDate\", \"endDate\"],\r\n /* @ts-ignore */ // Fixed in yup 1.0.0 https://github.com/jquense/yup/issues/1529\r\n (startDate: string, endDate: string, schema: Yup.BooleanSchema) => {\r\n const momentStartDate = moment(startDate, \"DD/MM/YYYY\");\r\n const momentEndDate = moment(endDate, \"DD/MM/YYYY\");\r\n\r\n return momentEndDate.isBefore(momentStartDate)\r\n ? schema.oneOf([false], t(\"visitors:productTimeframeForm.endDateNotBeforeStartDate\"))\r\n : schema;\r\n }\r\n )\r\n .default(\"\"),\r\n endTime: Yup.string()\r\n .when(\"productType\", {\r\n is: ProductType.HourlyRate,\r\n then: Yup.string().required(\r\n format(t(\"errors:required.field\"), t(\"globals:endTime\").toLowerCase())\r\n ),\r\n })\r\n .default(\"\"),\r\n productId: Yup.string().required().default(\"\"),\r\n productName: Yup.string().required().default(\"\"),\r\n productType: Yup.mixed()\r\n .oneOf([ProductType.HourlyRate, ProductType.FixedRate])\r\n .notRequired()\r\n .default(null),\r\n parkingTime: Yup.number()\r\n .when(\"productType\", (productType: ProductType) => {\r\n if (productType === ProductType.FixedRate) {\r\n return Yup.number().moreThan(0).required().default(null);\r\n } else {\r\n return Yup.mixed().notRequired().default(null);\r\n }\r\n })\r\n .notRequired()\r\n .default(null),\r\n },\r\n [[\"endDate\", \"endDate\"]]\r\n );\r\n\r\n const formik = useFormik({\r\n validateOnBlur: false,\r\n validateOnChange: false,\r\n onSubmit,\r\n validationSchema: formSchema,\r\n enableReinitialize: true,\r\n initialValues: {\r\n name: \"\",\r\n emailAddress: \"\",\r\n numberPlatePrefix: preselectedNumberPlatePrefix ?? \"\",\r\n numberPlate: \"\",\r\n country: countryCode?.toLowerCase() ?? \"\",\r\n receptionistCountryCode: receptionistCountryCode?.toLowerCase() ?? \"\",\r\n city: \"\",\r\n physicalZone: \"\",\r\n parkingTime: null,\r\n startDate: \"\",\r\n startTime: \"\",\r\n endDate: \"\",\r\n endTime: \"\",\r\n productId: \"\",\r\n productName: \"\",\r\n productType: ProductType.Unknown,\r\n },\r\n });\r\n\r\n return { formik };\r\n};\r\n\r\nexport const useNewBookingBulkStepOneFormik = (props: UseNewBookingFormikProps) => {\r\n const { t, onSubmit, countryCode, receptionistCountryCode } = props;\r\n\r\n const formSchema = Yup.object().shape(\r\n {\r\n country: Yup.string()\r\n .required(format(t(\"errors:required.field\"), t(\"globals:country\").toLowerCase()))\r\n .default(countryCode?.toLowerCase() ?? \"\"),\r\n city: Yup.string()\r\n .required(format(t(\"errors:required.field\"), t(\"globals:city\").toLowerCase()))\r\n .default(\"\"),\r\n physicalZone: Yup.string()\r\n .required(format(t(\"errors:required.field\"), t(\"globals:facility\").toLowerCase()))\r\n .default(\"\"),\r\n startDate: Yup.string()\r\n .required(format(t(\"errors:required.field\"), t(\"globals:startDate\").toLowerCase()))\r\n .default(\"\"),\r\n startTime: Yup.string()\r\n .when(\"productType\", {\r\n is: ProductType.HourlyRate,\r\n then: Yup.string().required(\r\n format(t(\"errors:required.field\"), t(\"globals:startTime\").toLowerCase())\r\n ),\r\n })\r\n .default(\"\"),\r\n endDate: Yup.string()\r\n .when(\"productType\", {\r\n is: ProductType.HourlyRate,\r\n then: Yup.string().required(\r\n format(t(\"errors:required.field\"), t(\"globals:endDate\").toLowerCase())\r\n ),\r\n })\r\n .when(\r\n [\"startDate\", \"endDate\"],\r\n /* @ts-ignore */ // Fixed in yup 1.0.0 https://github.com/jquense/yup/issues/1529\r\n (startDate: string, endDate: string, schema: Yup.BooleanSchema) => {\r\n const momentStartDate = moment(startDate, \"DD/MM/YYYY\");\r\n const momentEndDate = moment(endDate, \"DD/MM/YYYY\");\r\n\r\n return momentEndDate.isBefore(momentStartDate)\r\n ? schema.oneOf([false], t(\"visitors:productTimeframeForm.endDateNotBeforeStartDate\"))\r\n : schema;\r\n }\r\n )\r\n .default(\"\"),\r\n endTime: Yup.string()\r\n .when(\"productType\", {\r\n is: ProductType.HourlyRate,\r\n then: Yup.string().required(\r\n format(t(\"errors:required.field\"), t(\"globals:endTime\").toLowerCase())\r\n ),\r\n })\r\n .default(\"\"),\r\n productId: Yup.string().required().default(\"\"),\r\n productName: Yup.string().required().default(\"\"),\r\n productType: Yup.mixed()\r\n .oneOf([ProductType.HourlyRate, ProductType.FixedRate])\r\n .notRequired()\r\n .default(null),\r\n parkingTime: Yup.number()\r\n .when(\"productType\", (productType: ProductType) => {\r\n if (productType === ProductType.FixedRate) {\r\n return Yup.number().moreThan(0).required().default(null);\r\n } else {\r\n return Yup.mixed().notRequired().default(null);\r\n }\r\n })\r\n .notRequired()\r\n .default(null),\r\n },\r\n [[\"endDate\", \"endDate\"]]\r\n );\r\n\r\n const formikStepOne = useFormik({\r\n validateOnBlur: false,\r\n validateOnChange: false,\r\n onSubmit,\r\n validationSchema: formSchema,\r\n enableReinitialize: true,\r\n initialValues: {\r\n country: countryCode?.toLowerCase() ?? \"\",\r\n receptionistCountryCode: receptionistCountryCode?.toLowerCase() ?? \"\",\r\n city: \"\",\r\n physicalZone: \"\",\r\n parkingTime: null,\r\n startDate: \"\",\r\n startTime: \"\",\r\n endDate: \"\",\r\n endTime: \"\",\r\n productId: \"\",\r\n productName: \"\",\r\n productType: ProductType.Unknown,\r\n },\r\n });\r\n\r\n return { formikStepOne };\r\n};\r\n\r\nexport const useNewBookingBulkStepTwoFormik = (props: UseNewBookingVisitorDetailFormikProps) => {\r\n const { t, numberPlateCountryCode, initialValues } = props;\r\n const countriesNumberPlates = new CountriesNumberPlates();\r\n const preselectedNumberPlatePrefix =\r\n countriesNumberPlates.findNumberPlatePrefix(numberPlateCountryCode);\r\n const countryNumberPlates = countriesNumberPlates\r\n .getCountriesNumberPlates()\r\n .map((np) => np.numberPlateCode);\r\n\r\n const formSchema = Yup.object().shape(\r\n {\r\n name: Yup.string().optional().default(\"\"),\r\n emailAddress: Yup.string()\r\n .email(\r\n format(t(\"errors:format.field\"), t(\"globals:email\"), t(\"globals:email\").toLowerCase())\r\n )\r\n .required(format(t(\"errors:required.field\"), t(\"globals:email\").toLowerCase()))\r\n .test(\"email-regex-validation\", t(\"errors:format.email\"), (value: string | undefined) =>\r\n undefinedHelper(value, emailValidator.isValidEmail)\r\n )\r\n .default(\"\"),\r\n numberPlatePrefix: Yup.string()\r\n .optional()\r\n .test(\r\n \"numberplateprefix-regex-validation\",\r\n t(\"errors:format.numberPlate\"),\r\n (value: string | undefined) =>\r\n undefinedHelper(value, isValidnumberPlate.isValidNumberPlatePrefix)\r\n )\r\n .oneOf(countryNumberPlates, t(\"errors:format.numberPlate\"))\r\n .default(\"\"),\r\n numberPlate: Yup.string()\r\n .optional()\r\n .test(\r\n \"numberplate-regex-validation\",\r\n t(\"errors:format.numberPlate\"),\r\n (value: string | undefined, ctx) =>\r\n ctx.parent.numberPlatePrefix?.toUpperCase() === \"D\"\r\n ? undefinedHelper(value, isValidnumberPlate.isValidGermanNumberPlate)\r\n : undefinedHelper(value, isValidnumberPlate.isValidNumberPlateWithoutDash)\r\n )\r\n .default(\"\"),\r\n },\r\n [[\"endDate\", \"endDate\"]]\r\n );\r\n\r\n const formikVisitorDetail = useFormik({\r\n validateOnBlur: false,\r\n validateOnChange: false,\r\n onSubmit: () => undefined,\r\n validationSchema: formSchema,\r\n enableReinitialize: true,\r\n initialValues: initialValues ?? {\r\n referenceNumber: \"\",\r\n name: \"\",\r\n emailAddress: \"\",\r\n numberPlatePrefix: preselectedNumberPlatePrefix ?? \"\",\r\n numberPlate: \"\",\r\n },\r\n });\r\n\r\n return formikVisitorDetail;\r\n};\r\n","import React from \"react\";\r\nimport { SvgIcon } from \"@material-ui/core\";\r\nimport \"./_visitorBookingCreation.scss\"\r\nimport { CloseVisitorIconProps } from \"./CloseVisitorIconProps.types\";\r\n\r\nconst CloseVisitorIcon = (props: CloseVisitorIconProps) => {\r\n const { handleDelete } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default CloseVisitorIcon;\r\n","import React, { memo, PropsWithChildren } from \"react\";\r\nimport { isEmpty, isUndefined } from \"underscore\";\r\nimport { ContentCardProps } from \"./ContentCard.types\";\r\nimport \"./_contentCard.scss\";\r\nimport CloseVisitorIcon from \"../Icons/CloseVisitorIcon\";\r\n\r\nconst ContentCard = memo((props: PropsWithChildren) => {\r\n const { children, removePadding, title, handleDelete } = props;\r\n\r\n if (isUndefined(children)) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n {!isUndefined(handleDelete) &&\r\n \r\n }\r\n \r\n {!isEmpty(title) && {title}}\r\n
{children}
\r\n
\r\n \r\n );\r\n});\r\n\r\nexport default ContentCard;\r\n","import { ParkingLocationCountry } from \"../../../../../../../../models/visitor-booking/ParkingLocationCountry\";\r\nimport { Required } from \"../../../../NewBooking.types\";\r\n\r\nexport type ParkingLocationFormProps = {\r\n country: Required;\r\n city: Required;\r\n physicalZone: Required;\r\n onChange: (field: string, e: React.ChangeEvent) => void;\r\n setFieldValue: (field: string, value: any, shouldValidate?: boolean) => any;\r\n setFieldError: (field: string, value: string | undefined) => void;\r\n onPhysicalZoneChanged?: () => void;\r\n parkingLocations?: ParkingLocationCountry[] | null;\r\n};\r\n\r\nexport enum Fields {\r\n Country = \"country\",\r\n City = \"city\",\r\n PhysicalZone = \"physicalZone\",\r\n}\r\n","import { FormControl, Grid, MenuItem, Select } from \"@material-ui/core\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport { isUndefined, findWhere, isEmpty } from \"underscore\";\r\nimport RequiredInputLabel from \"../../../../../../../../ui/RequiredInputLabel/RequiredInputLabel\";\r\nimport { Fields, ParkingLocationFormProps } from \"./ParkingLocationForm.types\";\r\nimport { MuiHelperText } from \"../../../../../../../../components/MuiHelperText\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport useAppContext from \"../../../../../../../../context/hooks/useAppContext\";\r\n\r\nconst ParkingLocationForm = memo((props: ParkingLocationFormProps) => {\r\n const { t } = useTranslation([\"visitors\", \"countries\", \"globals\"]);\r\n const {\r\n country,\r\n city,\r\n physicalZone,\r\n onChange,\r\n setFieldValue,\r\n setFieldError,\r\n onPhysicalZoneChanged,\r\n parkingLocations,\r\n } = props;\r\n\r\n const { appState } = useAppContext();\r\n\r\n const countries = useMemo(() => {\r\n return parkingLocations\r\n ?.map((d) => ({\r\n countryCode: d.countryCode,\r\n countryName: t(`countries:${d.countryCode}`),\r\n }))\r\n .sort((a, b) => (a.countryName < b.countryName ? -1 : 1));\r\n }, [parkingLocations, appState.selectedLanguage]);\r\n\r\n const cities = useMemo(() => {\r\n if (isUndefined(parkingLocations)) {\r\n return [];\r\n }\r\n\r\n const result =\r\n findWhere(parkingLocations ?? [], {\r\n countryCode: country.value,\r\n })\r\n ?.cities.map((c) => c.name)\r\n .sort((a, b) => (a < b ? -1 : 1)) ?? [];\r\n\r\n if (result.length === 1) {\r\n city.value = result[0];\r\n setFieldValue(Fields.City, city.value);\r\n setFieldError(Fields.City, undefined);\r\n }\r\n\r\n return result;\r\n }, [parkingLocations, country.value]);\r\n\r\n const physicalZones = useMemo(() => {\r\n if (isUndefined(parkingLocations)) {\r\n return [];\r\n }\r\n\r\n if (isEmpty(city.value)) {\r\n return [];\r\n }\r\n\r\n const citiesForCountry = findWhere(parkingLocations ?? [], {\r\n countryCode: country.value,\r\n })?.cities;\r\n\r\n if (isUndefined(cities)) {\r\n return [];\r\n }\r\n\r\n const result =\r\n findWhere(citiesForCountry ?? [], {\r\n name: city.value,\r\n })?.physicalZones.sort((a, b) => (a.name < b.name ? -1 : 1)) ?? [];\r\n\r\n if (result.length === 1) {\r\n physicalZone.value = result[0].physicalZoneId;\r\n setFieldValue(Fields.PhysicalZone, physicalZone.value);\r\n setFieldError(Fields.PhysicalZone, undefined);\r\n }\r\n\r\n return result;\r\n }, [parkingLocations, country.value, city.value]);\r\n\r\n const onCountryChanged = (\r\n e: React.ChangeEvent<{\r\n name?: string;\r\n value: unknown;\r\n }>\r\n ) => {\r\n setFieldValue(Fields.City, \"\");\r\n setFieldValue(Fields.PhysicalZone, \"\");\r\n onChange(Fields.Country, e);\r\n if (onPhysicalZoneChanged) {\r\n onPhysicalZoneChanged();\r\n }\r\n };\r\n\r\n const onCityChanged = (\r\n e: React.ChangeEvent<{\r\n name?: string;\r\n value: unknown;\r\n }>\r\n ) => {\r\n setFieldValue(Fields.PhysicalZone, \"\");\r\n onChange(Fields.City, e);\r\n if (onPhysicalZoneChanged) {\r\n onPhysicalZoneChanged();\r\n }\r\n };\r\n\r\n const onInternalPhysicalZoneChanged = (\r\n e: React.ChangeEvent<{\r\n name?: string;\r\n value: unknown;\r\n }>\r\n ) => {\r\n onChange(Fields.PhysicalZone, e);\r\n if (onPhysicalZoneChanged) {\r\n onPhysicalZoneChanged();\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n {t(\"globals:country\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(\"parkingLocationForm.countryPlaceholder\")}\r\n \r\n {!isUndefined(countries) &&\r\n countries.map((c) => (\r\n \r\n {c.countryName}\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(\"globals:city\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(\"parkingLocationForm.cityPlaceholder\")}\r\n \r\n {!isEmpty(cities) &&\r\n cities.map((c) => (\r\n \r\n {c}\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(\"globals:facility\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(\"parkingLocationForm.facilityPlaceholder\")}\r\n \r\n {!isEmpty(physicalZones) &&\r\n physicalZones.map((z) => (\r\n \r\n {z.name}\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n});\r\n\r\nexport default ParkingLocationForm;\r\n","import React from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { ContentCard } from \"../../../../../../../../../ui/ContentCard\";\r\nimport Spacer from \"../../../../../../../../../ui/Spacer/Spacer\";\r\nimport { ParkingLocationForm } from \"../../forms\";\r\nimport { ParkingLocationProps } from \"./ParkingLocation.types\";\r\n\r\nconst ParkingLocation = (props: ParkingLocationProps) => {\r\n const { t } = useTranslation(\"visitors\");\r\n const { values, errors, handleChange, setFieldValue, setFieldError, onPhysicalZoneChanged, parkingLocations, titlePrefix } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ParkingLocation;\r\n","import { useCallback, useEffect, useRef } from 'react'\r\n\r\nfunction useIsMounted() {\r\n const isMounted = useRef(false)\r\n\r\n useEffect(() => {\r\n isMounted.current = true\r\n\r\n return () => {\r\n isMounted.current = false\r\n }\r\n }, [])\r\n\r\n return useCallback(() => isMounted.current, [])\r\n}\r\n\r\nexport default useIsMounted","import { CustomLocale } from \"flatpickr/dist/types/locale\";\r\nimport { languages } from \"../../translations\";\r\nimport { english } from \"flatpickr/dist/l10n/default\";\r\nimport { Dutch } from \"flatpickr/dist/l10n/nl\";\r\nimport { German } from \"flatpickr/dist/l10n/de\";\r\nimport { French } from \"flatpickr/dist/l10n/fr\";\r\n\r\nexport const qparkDatePickerV2Locale = new Map();\r\nqparkDatePickerV2Locale.set(languages.en, english);\r\nqparkDatePickerV2Locale.set(languages.nl, Dutch);\r\nqparkDatePickerV2Locale.set(languages.de, German);\r\nqparkDatePickerV2Locale.set(languages.fr, French);\r\n","import { QParkDatePickerV2Props } from \"./QParkDatePickerV2.types\";\r\nimport flatpickr from \"flatpickr\";\r\nimport { Instance } from \"flatpickr/dist/types/instance\";\r\nimport { BaseOptions } from \"flatpickr/dist/types/options\";\r\nimport moment, { Moment } from \"moment\";\r\nimport {\r\n ChangeEvent,\r\n FocusEvent,\r\n KeyboardEvent,\r\n useCallback,\r\n useEffect,\r\n useLayoutEffect,\r\n useRef,\r\n useState,\r\n} from \"react\";\r\nimport { isEmpty, isNull, isUndefined } from \"underscore\";\r\nimport useIsMounted from \"../../hooks/useIsMounted\";\r\nimport useAppContext from \"../../context/hooks/useAppContext\";\r\nimport { qparkDatePickerV2Locale } from \"./QParkDatePickerV2.locale\";\r\n\r\nconst momentDateFormat = \"DD/MM/YYYY\";\r\n\r\nconst parseDate = (date: Date | string): Moment =>\r\n moment(date, momentDateFormat);\r\nconst formatDate = (date: Date): string =>\r\n moment(date).format(momentDateFormat);\r\n\r\nconst useQParkDatePickerV2 = (props: Partial) => {\r\n const { value, minDate, maxDate, onChange } = props;\r\n\r\n const isMounted = useIsMounted();\r\n const {\r\n appState: { selectedLanguage },\r\n } = useAppContext();\r\n\r\n const [inputDateValue, setInputDateValue] = useState(\"\");\r\n const inputRef = useRef(null);\r\n const flatpickrInstance = useRef(null);\r\n const isManualInput = useRef(false);\r\n\r\n const setManualInput = (_: KeyboardEvent) =>\r\n (isManualInput.current = true);\r\n const unSetManualInput = () => (isManualInput.current = false);\r\n\r\n const onManualInput = (event: ChangeEvent) =>\r\n setInputDateValue(event.target.value);\r\n\r\n const validateAndSetManualInputDate = (\r\n event: FocusEvent\r\n ) => {\r\n if (!isManualInput.current) {\r\n return;\r\n }\r\n\r\n if (isNull(inputRef.current) || isNull(flatpickrInstance.current)) {\r\n return;\r\n }\r\n\r\n const inputValue = event.target.value;\r\n if (isEmpty(inputValue)) {\r\n flatpickrInstance.current.clear(true);\r\n return;\r\n }\r\n\r\n const formattedDate = parseDate(inputValue);\r\n\r\n const isValidDate = formattedDate.isValid();\r\n if (!isValidDate) {\r\n flatpickrInstance.current.clear(true);\r\n setInputDateValue(\"\");\r\n return;\r\n }\r\n\r\n const isBeforeToday = formattedDate.isBefore(new Date(), \"day\");\r\n if (isBeforeToday) {\r\n flatpickrInstance.current.clear(true);\r\n setInputDateValue(\"\");\r\n return;\r\n }\r\n\r\n if (\r\n !isUndefined(minDate) &&\r\n !isNull(minDate) &&\r\n parseDate(minDate).isValid()\r\n ) {\r\n const isBeforeMinDate = formattedDate.isBefore(minDate, \"day\");\r\n\r\n if (isBeforeMinDate) {\r\n flatpickrInstance.current.clear(true);\r\n setInputDateValue(\"\");\r\n return;\r\n }\r\n }\r\n\r\n if (\r\n !isUndefined(maxDate) &&\r\n !isNull(maxDate) &&\r\n parseDate(maxDate).isValid()\r\n ) {\r\n const isAfterMaxDate = formattedDate.isAfter(maxDate, \"day\");\r\n\r\n if (isAfterMaxDate) {\r\n flatpickrInstance.current.clear(true);\r\n setInputDateValue(\"\");\r\n return;\r\n }\r\n }\r\n\r\n flatpickrInstance.current.setDate(inputValue, true);\r\n };\r\n\r\n const onDateChange = useCallback(\r\n (date: Date[], dateStr: string, instance: any) => {\r\n unSetManualInput();\r\n\r\n if (isUndefined(onChange)) {\r\n return;\r\n }\r\n\r\n let jsDateValue: Date | null = null;\r\n\r\n if (!isEmpty(dateStr)) {\r\n jsDateValue = parseDate(dateStr).toDate();\r\n }\r\n\r\n onChange(jsDateValue);\r\n },\r\n [onChange]\r\n );\r\n\r\n const getFlatpickrOptions = useCallback(() => {\r\n const flatpickrOptions: Partial = {\r\n locale: {\r\n ...qparkDatePickerV2Locale.get(selectedLanguage),\r\n firstDayOfWeek: 1,\r\n },\r\n onChange: onDateChange,\r\n dateFormat: \"d/m/Y\",\r\n defaultDate: !isEmpty(value) ? value : undefined,\r\n disableMobile: true,\r\n allowInput: true,\r\n minDate:\r\n !isUndefined(minDate) && !isNull(minDate)\r\n ? formatDate(minDate)\r\n : \"today\",\r\n maxDate:\r\n !isUndefined(maxDate) && !isNull(maxDate)\r\n ? formatDate(maxDate)\r\n : undefined,\r\n monthSelectorType: \"static\",\r\n mode: \"single\",\r\n shorthandCurrentMonth: false,\r\n };\r\n\r\n return flatpickrOptions;\r\n }, [minDate, maxDate, value, selectedLanguage]);\r\n\r\n const updateDateState = useCallback(\r\n () => setInputDateValue(inputRef.current?.value ?? \"\"),\r\n [inputRef.current?.value]\r\n );\r\n\r\n useLayoutEffect(() => {\r\n flatpickrInstance.current = flatpickr(\r\n inputRef.current as Node,\r\n getFlatpickrOptions()\r\n );\r\n }, [getFlatpickrOptions]);\r\n\r\n useEffect(() => {\r\n if (!isMounted()) {\r\n return;\r\n }\r\n\r\n if (isEmpty(value)) {\r\n flatpickrInstance.current?.clear(true);\r\n }\r\n\r\n if (\r\n parseDate(value!).isValid() &&\r\n parseDate(value!).isBefore(minDate, \"day\")\r\n ) {\r\n flatpickrInstance.current?.clear(true);\r\n }\r\n }, [value, minDate]);\r\n\r\n useEffect(() => {\r\n updateDateState();\r\n }, [updateDateState]);\r\n\r\n return {\r\n inputRef,\r\n inputDateValue,\r\n onManualInput,\r\n validateAndSetManualInputDate,\r\n setManualInput,\r\n };\r\n};\r\n\r\nexport default useQParkDatePickerV2;\r\n","import { TextField } from \"@material-ui/core\";\r\nimport { DateRangeOutlined } from \"@material-ui/icons\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../theme/variables\";\r\n\r\nconst { colors } = variables;\r\n\r\nexport const DateRangeIcon = styled(DateRangeOutlined)`\r\n width: 18px;\r\n height: 18px;\r\n position: absolute;\r\n right: 12px;\r\n color: ${colors.lightGray};\r\n top: 10px;\r\n\r\n &:hover {\r\n cursor: pointer;\r\n }\r\n`;\r\n\r\nexport const DatePickerTextField = styled(TextField)`\r\n &:hover {\r\n cursor: pointer;\r\n }\r\n\r\n & input:hover {\r\n cursor: pointer;\r\n }\r\n`;\r\n","import { InputAdornment } from \"@material-ui/core\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport React, { memo } from \"react\";\r\nimport \"./qpark-date-picker.scss\";\r\nimport useQParkDatePickerV2 from \"./QParkDatePickerV2.controller\";\r\nimport { DateRangeIcon } from \"./QParkDatePickerV2.styledcomponents\";\r\nimport { QParkDatePickerV2Props } from \"./QParkDatePickerV2.types\";\r\n\r\nconst QParkDatePickerV2 = memo((props: Partial) => {\r\n const { name, error, helperText } = props;\r\n\r\n const {\r\n inputRef,\r\n inputDateValue,\r\n onManualInput,\r\n validateAndSetManualInputDate,\r\n setManualInput,\r\n } = useQParkDatePickerV2(props);\r\n\r\n return (\r\n \r\n \r\n \r\n ),\r\n }}\r\n />\r\n );\r\n});\r\n\r\nexport default QParkDatePickerV2;\r\n","import React, { memo, PropsWithChildren, useCallback } from \"react\";\r\nimport { QParkSelectCardItemProps } from \"./QParkSelectCardItem.types\";\r\nimport { DoneRounded } from \"@material-ui/icons\";\r\nimport { isUndefined } from \"underscore\";\r\nimport \"./_qpark-select-card-item.scss\";\r\n\r\nconst QParkSelectCardItem = memo(\r\n (props: PropsWithChildren) => {\r\n const { selected, children, value, onClick } = props;\r\n\r\n const isSelected = selected === value;\r\n const onCardItemClicked = useCallback(\r\n (value?: string | number) => (_: React.MouseEvent) => {\r\n if (isUndefined(onClick)) {\r\n return;\r\n }\r\n\r\n onClick(value);\r\n },\r\n [value]\r\n );\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n {children}\r\n \r\n \r\n );\r\n }\r\n);\r\n\r\nexport default QParkSelectCardItem;\r\n","import React, { memo, useEffect, useState, useCallback } from \"react\";\r\nimport { isEmpty, isEqual, isUndefined } from \"underscore\";\r\nimport QParkSelectCardItem from \"./components/ui/QParkSelectCardItem\";\r\nimport { QParkSelectCardOption, QParkSelectCardsProps } from \"./QParkSelectCards.types\";\r\nimport \"./_qpark-select-cards.scss\";\r\n\r\nconst QParkSelectCards = memo((props: QParkSelectCardsProps) => {\r\n const { onChange, options = [] } = props;\r\n const [selected, setSelected] = useState(\r\n isEmpty(options) ? \"\" : options[0].value\r\n );\r\n\r\n const [existingOptions, setExistingOptions] = useState(\r\n options\r\n );\r\n\r\n useEffect(() => {\r\n if (!isEqual(existingOptions, options)) {\r\n setSelected((c) => {\r\n const newSelected = !isEmpty(options) ? options[0].value : \"\";\r\n if (!isUndefined(onChange)) {\r\n onChange(newSelected);\r\n }\r\n c = newSelected;\r\n return c;\r\n });\r\n\r\n setExistingOptions((c) => (c = options));\r\n }\r\n }, [options]); \r\n\r\n useEffect(() => {\r\n if (!isEmpty(selected) && !isUndefined(onChange)) {\r\n onChange(selected);\r\n }\r\n } ,[]);\r\n\r\n const onClick = (value?: string | number) => {\r\n setSelected((c) => (c = value));\r\n\r\n if (!isUndefined(onChange)) {\r\n onChange(value);\r\n }\r\n };\r\n\r\n return (\r\n
    \r\n {options.map((p) => (\r\n \r\n {p.option}\r\n \r\n ))}\r\n
\r\n );\r\n});\r\n\r\nexport default QParkSelectCards;\r\n","import { ScheduleRounded } from \"@material-ui/icons\";\r\nimport styled from \"styled-components\";\r\nimport { variables } from \"../../theme/variables\";\r\n\r\nconst { colors } = variables;\r\n\r\nexport const ClockIcon = styled(ScheduleRounded)`\r\n width: 20px;\r\n height: 20px;\r\n position: absolute;\r\n right: 12px;\r\n color: ${colors.lightGray};\r\n top: 10px;\r\n\r\n &:hover {\r\n cursor: pointer;\r\n }\r\n`;","import { isEmpty, isUndefined } from \"underscore\";\r\n\r\nexport const hoursGenerator = (() => {\r\n const formatInterval = (hour: number, minute?: number): string => {\r\n let formattedHour = hour < 10 ? `0${hour}` : hour;\r\n let formattedMinute = minute ?? \"00\";\r\n\r\n return `${formattedHour}:${formattedMinute}`;\r\n };\r\n\r\n const getIntervalStart = (\r\n minTime?: string\r\n ): { start: number; passedHalfAnHour?: boolean } => {\r\n if (isUndefined(minTime) || isEmpty(minTime)) {\r\n return {\r\n start: 0\r\n }\r\n }\r\n\r\n const minTimeFormatted = minTime?.split(\":\");\r\n const hourStart = !isUndefined(minTimeFormatted)\r\n ? parseInt(minTimeFormatted[0])\r\n : 0;\r\n const passedHalfAnHour =\r\n !isUndefined(minTimeFormatted) && minTimeFormatted[1] >= \"30\";\r\n\r\n return {\r\n start: hourStart + 1,\r\n passedHalfAnHour,\r\n };\r\n };\r\n\r\n const createHalfHourIntervals = (minTime?: string): string[] => {\r\n const { start, passedHalfAnHour } = getIntervalStart(minTime);\r\n\r\n let hours = [];\r\n if (!isUndefined(passedHalfAnHour) && !passedHalfAnHour) {\r\n hours.push(formatInterval(start - 1, 30));\r\n }\r\n\r\n for (let hour = start; hour < 24; hour++) {\r\n hours.push(formatInterval(hour));\r\n hours.push(formatInterval(hour, 30));\r\n }\r\n\r\n return hours;\r\n };\r\n\r\n return {\r\n createHalfHourIntervals,\r\n };\r\n})();\r\n","import { FormControl, MenuItem, Select } from \"@material-ui/core\";\r\nimport React, { memo, useMemo } from \"react\";\r\nimport { isUndefined } from \"underscore\";\r\nimport { MuiHelperText } from \"../MuiHelperText\";\r\nimport { ClockIcon } from \"./QParkTimePicker.styledcomponents\";\r\nimport { QParkTimePickerProps } from \"./QParkTimePicker.types\";\r\nimport { hoursGenerator } from \"./utils\";\r\n\r\nconst QParkTimePicker = memo((props: QParkTimePickerProps) => {\r\n const { minTime, value, onChange, disabled, error, helperText } = props;\r\n const hours = useMemo(\r\n () => hoursGenerator.createHalfHourIntervals(minTime),\r\n [minTime]\r\n );\r\n\r\n const handleHourChange = (\r\n event: React.ChangeEvent<{\r\n name?: string;\r\n value: unknown;\r\n }>\r\n ) => {\r\n if (isUndefined(onChange)) {\r\n return;\r\n }\r\n\r\n onChange(event.target.value as string);\r\n };\r\n\r\n return (\r\n \r\n }\r\n >\r\n \r\n hh:mm\r\n \r\n {hours.map((hour, index) => (\r\n \r\n {hour}\r\n \r\n ))}\r\n \r\n \r\n \r\n );\r\n});\r\n\r\nexport default QParkTimePicker;\r\n","import { FormikErrors } from \"formik\";\r\nimport { VisitorBookingProductConfiguration } from \"../../../../../../../../models/visitor-booking\";\r\nimport { Required } from \"../../../../NewBooking.types\";\r\nimport { VisitorBookingNewBooking } from \"../../../../models/VisitorBookingNewBooking\";\r\n\r\nexport type ProductTimeframeFormProps = {\r\n products: VisitorBookingProductConfiguration[];\r\n productId: Required;\r\n startDate: Required;\r\n endDate: Required;\r\n startTime: Required;\r\n endTime: Required;\r\n physicalZone: Required;\r\n parkingTime: Required;\r\n setFieldValue: (\r\n field: string,\r\n value: any,\r\n shouldValidate?: boolean | undefined\r\n ) => Promise | Promise>;\r\n setFieldError: (field: string, value: string | undefined) => void;\r\n titlePrefixProduct?: string | null;\r\n titlePrefixTime?: string | null;\r\n};\r\n\r\nexport enum Fields {\r\n ProductId = \"productId\",\r\n ParkingTime = \"parkingTime\",\r\n StartDate = \"startDate\",\r\n StartTime = \"startTime\",\r\n EndDate = \"endDate\",\r\n EndTime = \"endTime\",\r\n ProductType = \"productType\",\r\n ProductName = \"productName\",\r\n}\r\n","import { Grid } from \"@material-ui/core\";\r\nimport moment from \"moment\";\r\nimport React, { memo, useCallback, useEffect, useMemo } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { filter, isEmpty, isNull, isUndefined } from \"underscore\";\r\nimport { QParkDatePickerV2 } from \"../../../../../../../../components/QParkDatePickerV2\";\r\nimport { QParkSelectCards } from \"../../../../../../../../components/QParkSelectCards\";\r\nimport { QParkTimePicker } from \"../../../../../../../../components/QParkTimePicker\";\r\nimport { VisitorBookingProductConfiguration } from \"../../../../../../../../models/visitor-booking\";\r\nimport { variables } from \"../../../../../../../../theme/variables\";\r\nimport RequiredInputLabel from \"../../../../../../../../ui/RequiredInputLabel/RequiredInputLabel\";\r\nimport Spacer from \"../../../../../../../../ui/Spacer/Spacer\";\r\nimport { useProductTimeframeForm } from \"./hooks/useProductTimeframeForm\";\r\nimport {\r\n Fields,\r\n ProductTimeframeFormProps,\r\n} from \"./ProductTimeframeForm.types\";\r\nimport \"./_product-timeframe-form.scss\";\r\n\r\nconst { typography } = variables;\r\n\r\nconst ProductTimeframeForm = memo((props: ProductTimeframeFormProps) => {\r\n const {\r\n products,\r\n productId,\r\n startDate,\r\n startTime,\r\n endDate,\r\n endTime,\r\n physicalZone,\r\n setFieldValue,\r\n setFieldError,\r\n titlePrefixProduct,\r\n titlePrefixTime,\r\n } = props;\r\n const { t } = useTranslation([\"visitors\"]);\r\n\r\n const {\r\n jsStartDate,\r\n jsEndDate,\r\n jsMaxEndDate,\r\n isHourlyRateProduct,\r\n minEndTime,\r\n minStartTime,\r\n onStartDateChange,\r\n onEndDateChange,\r\n onStartTimeChange,\r\n onEndTimeChange,\r\n onProductSelect,\r\n } = useProductTimeframeForm(\r\n products,\r\n startDate.value,\r\n startTime.value,\r\n endDate.value,\r\n endTime.value,\r\n productId.value,\r\n setFieldValue,\r\n physicalZone.value\r\n );\r\n\r\n const today = useMemo(() => new Date(), []);\r\n const todayNextYear = useMemo(\r\n () => moment(today).add(1, \"year\").toDate(),\r\n [today]\r\n );\r\n\r\n const showWhenHourlyProductSelected = useMemo(\r\n () => ({\r\n display: !isHourlyRateProduct ? \"none\" : \"inherit\",\r\n }),\r\n [isHourlyRateProduct]\r\n );\r\n\r\n const isPhysicalZoneSelected = useMemo(\r\n () =>\r\n !physicalZone.hasError &&\r\n !isEmpty(physicalZone.value) &&\r\n !isNull(physicalZone.value),\r\n [physicalZone]\r\n );\r\n\r\n const productsByPhysicalZone =\r\n useMemo((): VisitorBookingProductConfiguration[] => {\r\n if (!isPhysicalZoneSelected) {\r\n return [];\r\n }\r\n\r\n const found = filter(\r\n products,\r\n (product) =>\r\n product.allowedPhysicalZoneIds.find((pz) =>\r\n pz\r\n .toLocaleLowerCase()\r\n .includes(physicalZone.value?.toLocaleLowerCase() as string)\r\n ) !== undefined\r\n );\r\n\r\n if (isUndefined(found)) {\r\n return [];\r\n }\r\n\r\n return found;\r\n }, [physicalZone, isPhysicalZoneSelected]);\r\n\r\n const productOptions = useMemo(\r\n () =>\r\n productsByPhysicalZone.map((p) => ({\r\n option: p.name,\r\n value: p.id,\r\n })),\r\n [productsByPhysicalZone]\r\n );\r\n\r\n const clearDateErrorOnChange =\r\n (field: Fields, action: (date: Date | null) => void) =>\r\n (date: Date | null) => {\r\n setFieldError(field, undefined);\r\n action(date);\r\n };\r\n\r\n const clearTimeErrorOnChange =\r\n (field: Fields, action: (time: string) => void) => (time: string) => {\r\n setFieldError(field, undefined);\r\n action(time);\r\n };\r\n\r\n const clearAllFieldsOnMount = useCallback(() => {\r\n if (!isPhysicalZoneSelected) {\r\n return;\r\n }\r\n\r\n setFieldError(Fields.StartDate, undefined);\r\n setFieldError(Fields.StartTime, undefined);\r\n setFieldError(Fields.EndDate, undefined);\r\n setFieldError(Fields.EndTime, undefined);\r\n }, [isPhysicalZoneSelected]);\r\n\r\n useEffect(() => clearAllFieldsOnMount(), [clearAllFieldsOnMount]);\r\n\r\n const NoFacilitySelected = () => (\r\n
\r\n {t(\"productTimeframeForm.noFacilitySelected\")}\r\n
\r\n );\r\n\r\n return (\r\n
\r\n
\r\n \r\n {`${titlePrefixProduct ?? \"\"}${t(\r\n \"productTimeframeForm.productSelectionTitle\"\r\n )}`}\r\n \r\n \r\n \r\n \r\n {!isPhysicalZoneSelected ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n {`${titlePrefixTime ?? \"\"}${t(\r\n \"productTimeframeForm.timeframeSelectionTitle\"\r\n )}`}\r\n \r\n \r\n {!isPhysicalZoneSelected ? (\r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n {t(\r\n isHourlyRateProduct\r\n ? \"productTimeframeForm.startDateAndTime\"\r\n : \"productTimeframeForm.startDate\"\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(\"productTimeframeForm.endDateAndTime\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n
\r\n
\r\n );\r\n});\r\n\r\nexport default ProductTimeframeForm;\r\n","import moment from \"moment-timezone\";\r\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport { findWhere, isEmpty, isNull, isUndefined } from \"underscore\";\r\nimport {\r\n ProductType,\r\n VisitorBookingProductConfiguration,\r\n} from \"../../../../../../../../../models/visitor-booking\";\r\nimport { Fields } from \"../ProductTimeframeForm.types\";\r\n\r\nexport const useProductTimeframeForm = (\r\n products: VisitorBookingProductConfiguration[],\r\n startDate: string,\r\n startTime: string,\r\n endDate: string,\r\n endTime: string,\r\n productId: string,\r\n setFieldValue: (\r\n field: string,\r\n value: any,\r\n shouldValidate?: boolean | undefined\r\n ) => any,\r\n physicalZone: string | null\r\n) => {\r\n const [selectedProductId, setSelectedProductId] = useState(\"\");\r\n const onProductSelect = (id?: string | number | undefined) => {\r\n setSelectedProductId((id as string) ?? \"\");\r\n setFieldValue(Fields.ProductId, id);\r\n };\r\n\r\n const selectedProduct = useMemo(() => {\r\n const found = findWhere(products, { id: selectedProductId });\r\n if (isUndefined(found)) {\r\n return null;\r\n }\r\n\r\n return found;\r\n }, [selectedProductId]);\r\n\r\n const isHourlyRateProduct = useMemo(\r\n () =>\r\n !isNull(selectedProduct) &&\r\n selectedProduct.productType === ProductType.HourlyRate,\r\n [selectedProduct]\r\n );\r\n\r\n const setProductTypeAndParkingTime = useCallback(() => {\r\n if (isNull(selectedProduct)) {\r\n return;\r\n }\r\n\r\n setFieldValue(Fields.ProductType, selectedProduct?.productType);\r\n setFieldValue(Fields.ParkingTime, selectedProduct.parkingTime);\r\n setFieldValue(Fields.ProductName, selectedProduct.name);\r\n }, [selectedProduct]);\r\n\r\n useEffect(\r\n () => setProductTypeAndParkingTime(),\r\n [setProductTypeAndParkingTime]\r\n );\r\n\r\n const updateTime = (field: Fields, time?: string) => {\r\n if (isUndefined(time)) {\r\n setFieldValue(field, \"\");\r\n } else {\r\n setFieldValue(field, time);\r\n }\r\n };\r\n\r\n const onStartTimeChange = (time: string) => {\r\n updateTime(Fields.StartTime, time);\r\n };\r\n\r\n const onEndTimeChange = (time: string) => {\r\n updateTime(Fields.EndTime, time);\r\n };\r\n\r\n const updateDate = (field: Fields, date: Date | null) => {\r\n if (isNull(date)) {\r\n setFieldValue(field, \"\");\r\n } else {\r\n setFieldValue(field, moment(date).format(\"DD/MM/YYYY\"));\r\n }\r\n };\r\n\r\n const onStartDateChange = (date: Date | null) => {\r\n updateDate(Fields.StartDate, date);\r\n\r\n if (startDateAfterEndDate(date)) {\r\n updateDate(Fields.EndDate, null);\r\n updateTime(Fields.EndTime);\r\n }\r\n };\r\n\r\n const onEndDateChange = (date: Date | null) => {\r\n updateDate(Fields.EndDate, date);\r\n };\r\n\r\n const startDateAfterEndDate = (selectedStartDate: Date | null) => {\r\n if (isNull(startDate)) {\r\n return false;\r\n }\r\n\r\n if (isEmpty(endDate)) {\r\n return false;\r\n }\r\n\r\n const momentStartDate = moment(selectedStartDate);\r\n const momentEndDate = moment(endDate, \"DD/MM/YYYY\");\r\n\r\n return momentStartDate.isAfter(momentEndDate);\r\n };\r\n\r\n const jsStartDate = useMemo(() => {\r\n if (isEmpty(startDate)) {\r\n return null;\r\n }\r\n\r\n return moment(startDate, \"DD/MM/YYYY\").toDate();\r\n }, [startDate]);\r\n\r\n const jsEndDate = useMemo(() => {\r\n if (isEmpty(endDate)) {\r\n return null;\r\n }\r\n\r\n return moment(endDate, \"DD/MM/YYYY\").toDate();\r\n }, [endDate]);\r\n\r\n const jsMaxEndDate = useMemo(() => {\r\n if (isEmpty(startDate)) {\r\n return null;\r\n }\r\n\r\n const maxEndDate = moment(startDate, \"DD/MM/YYYY\").add(1, \"year\");\r\n\r\n return maxEndDate.toDate();\r\n }, [startDate]);\r\n\r\n const minStartTime = useMemo(() => {\r\n\r\n let result = \"\";\r\n if (isEmpty(startDate)) {\r\n return result;\r\n }\r\n\r\n let momentNow = moment(new Date());\r\n const countryCode = physicalZone?.split(\".\")[0];\r\n if (countryCode) {\r\n const zones = moment.tz.zonesForCountry(countryCode);\r\n momentNow = momentNow.tz(zones[0]);\r\n }\r\n const momentStartDate = moment(startDate, \"DD/MM/YYYY\");\r\n\r\n if (momentStartDate.isSameOrBefore(momentNow)) {\r\n updateTime(Fields.StartTime);\r\n result = momentNow.format(\"HH:mm\");\r\n }\r\n\r\n return result;\r\n }, [startDate, physicalZone]);\r\n\r\n const minEndTime = useMemo(() => {\r\n if (isEmpty(startDate) || isEmpty(endDate) || isEmpty(startTime)) {\r\n return \"\";\r\n }\r\n\r\n const momentStartDate = moment(startDate, \"DD/MM/YYYY\");\r\n const momentStartTime = moment(startTime, \"HH:mm\");\r\n\r\n const momentEndDate = moment(endDate, \"DD/MM/YYYY\");\r\n const momentEndTime = moment(endTime, \"HH:mm\");\r\n\r\n if (\r\n (momentStartDate.isSameOrAfter(momentEndDate) && isEmpty(endTime)) ||\r\n (momentStartDate.isSameOrAfter(momentEndDate) &&\r\n momentStartTime.isSameOrAfter(momentEndTime))\r\n ) {\r\n updateTime(Fields.EndTime);\r\n return startTime;\r\n }\r\n\r\n return \"\";\r\n }, [startDate, endDate, startTime]);\r\n\r\n const resetTimeframeOnProductChange = useCallback(() => {\r\n updateDate(Fields.StartDate, null);\r\n updateTime(Fields.StartTime);\r\n updateDate(Fields.EndDate, null);\r\n updateTime(Fields.EndTime);\r\n }, [productId]);\r\n\r\n useEffect(\r\n () => resetTimeframeOnProductChange(),\r\n [resetTimeframeOnProductChange]\r\n );\r\n\r\n return {\r\n jsStartDate,\r\n jsEndDate,\r\n jsMaxEndDate,\r\n isHourlyRateProduct,\r\n minEndTime,\r\n minStartTime,\r\n onStartDateChange,\r\n onEndDateChange,\r\n onStartTimeChange,\r\n onEndTimeChange,\r\n onProductSelect,\r\n };\r\n};\r\n","import React from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst NoFacilitySelected = () => {\r\n const { t } = useTranslation([\"visitors\"]);\r\n\r\n return (\r\n
\r\n {t(\"productTimeframeForm.noFacilitySelected\")}\r\n
\r\n );\r\n};\r\n\r\nexport default NoFacilitySelected;\r\n","import React, { memo, useEffect, useState } from \"react\";\r\nimport { isEmpty, isUndefined } from \"underscore\";\r\nimport QParkSelectCardItem from \"./components/ui/QParkSelectCardItem\";\r\nimport { QParkSelectCardsProps } from \"./QParkSelectCards.types\";\r\nimport \"./_qpark-select-cards.scss\";\r\n\r\nconst QParkSelectCardsBulk = memo((props: QParkSelectCardsProps) => {\r\n const { onChange, options = [], initSelected } = props;\r\n\r\n const defaultVal = isEmpty(options) ? \"\" : options[0].value;\r\n const initVal = initSelected ? initSelected : defaultVal;\r\n\r\n const [selected, setSelected] = useState(\r\n initVal\r\n );\r\n\r\n useEffect(() => {\r\n setSelected((c) => (c = initVal));\r\n\r\n if (!isUndefined(onChange) && !initSelected) {\r\n onChange(initVal);\r\n }\r\n }, [options]);\r\n\r\n const onClick = (value?: string | number) => {\r\n setSelected((c) => (c = value));\r\n\r\n if (!isUndefined(onChange)) {\r\n onChange(value);\r\n }\r\n };\r\n\r\n return (\r\n
    \r\n {options.map((p) => (\r\n \r\n {p.option}\r\n \r\n ))}\r\n
\r\n );\r\n});\r\n\r\nexport default QParkSelectCardsBulk;\r\n","import { Grid } from \"@material-ui/core\";\r\nimport moment from \"moment\";\r\nimport React, { memo, useCallback, useEffect, useMemo } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { filter, isEmpty, isNull, isUndefined } from \"underscore\";\r\nimport { QParkDatePickerV2 } from \"../../../../../../../../components/QParkDatePickerV2\";\r\nimport { QParkTimePicker } from \"../../../../../../../../components/QParkTimePicker\";\r\nimport { VisitorBookingProductConfiguration } from \"../../../../../../../../models/visitor-booking\";\r\nimport { variables } from \"../../../../../../../../theme/variables\";\r\nimport RequiredInputLabel from \"../../../../../../../../ui/RequiredInputLabel/RequiredInputLabel\";\r\nimport Spacer from \"../../../../../../../../ui/Spacer/Spacer\";\r\nimport { Fields, ProductTimeframeFormProps } from \"./ProductTimeframeForm.types\";\r\nimport \"./_product-timeframe-form.scss\";\r\nimport { ContentCard } from \"../../../../../../../../ui/ContentCard\";\r\nimport NoFacilitySelected from \"../ui/NoFacilitySelected\";\r\nimport { useProductTimeframeFormBulk } from \"./hooks/useProductTimeframeFormBulk\";\r\nimport QParkSelectCardsBulk from \"../../../../../../../../components/QParkSelectCards/QParkSelectCardsBulk\";\r\n\r\nconst { typography } = variables;\r\n\r\nconst ProductTimeframeFormBulk = memo((props: ProductTimeframeFormProps) => {\r\n const {\r\n products,\r\n productId,\r\n startDate,\r\n startTime,\r\n endDate,\r\n endTime,\r\n physicalZone,\r\n setFieldValue,\r\n setFieldError,\r\n titlePrefixProduct,\r\n titlePrefixTime,\r\n } = props;\r\n const { t } = useTranslation([\"visitors\"]);\r\n\r\n const {\r\n jsStartDate,\r\n jsMaxEndDate,\r\n isHourlyRateProduct,\r\n minEndTime,\r\n minStartTime,\r\n onStartDateChange,\r\n onEndDateChange,\r\n onStartTimeChange,\r\n onEndTimeChange,\r\n onProductSelect,\r\n resetTimeframeOnProductChange,\r\n } = useProductTimeframeFormBulk(\r\n products,\r\n startDate.value,\r\n startTime.value,\r\n endDate.value,\r\n endTime.value,\r\n productId.value,\r\n setFieldValue,\r\n physicalZone.value\r\n );\r\n\r\n const today = useMemo(() => new Date(), []);\r\n const todayNextYear = useMemo(() => moment(today).add(1, \"year\").toDate(), [today]);\r\n let oldSelectedProduct: string | undefined = productId.value;\r\n\r\n const showWhenHourlyProductSelected = useMemo(\r\n () => ({\r\n display: !isHourlyRateProduct ? \"none\" : \"inherit\",\r\n }),\r\n [isHourlyRateProduct]\r\n );\r\n\r\n const isPhysicalZoneSelected = useMemo(\r\n () => !physicalZone.hasError && !isEmpty(physicalZone.value) && !isNull(physicalZone.value),\r\n [physicalZone]\r\n );\r\n\r\n const productsByPhysicalZone = useMemo((): VisitorBookingProductConfiguration[] => {\r\n if (!isPhysicalZoneSelected) {\r\n return [];\r\n }\r\n\r\n const found = filter(\r\n products,\r\n (product) =>\r\n product.allowedPhysicalZoneIds.find((pz) =>\r\n pz.toLocaleLowerCase().includes(physicalZone.value?.toLocaleLowerCase() as string)\r\n ) !== undefined\r\n );\r\n\r\n if (isUndefined(found)) {\r\n return [];\r\n }\r\n\r\n return found;\r\n }, [physicalZone, isPhysicalZoneSelected]);\r\n\r\n const productOptions = useMemo(\r\n () =>\r\n productsByPhysicalZone.map((p) => ({\r\n option: p.name,\r\n value: p.id,\r\n })),\r\n [productsByPhysicalZone]\r\n );\r\n\r\n const clearDateErrorOnChange =\r\n (field: Fields, action: (date: Date | null) => void) => (date: Date | null) => {\r\n setFieldError(field, undefined);\r\n action(date);\r\n };\r\n\r\n const clearTimeErrorOnChange =\r\n (field: Fields, action: (time: string) => void) => (time: string) => {\r\n setFieldError(field, undefined);\r\n action(time);\r\n };\r\n\r\n const clearAllFieldsOnMount = useCallback(() => {\r\n if (!isPhysicalZoneSelected) {\r\n return;\r\n }\r\n\r\n setFieldError(Fields.StartDate, undefined);\r\n setFieldError(Fields.StartTime, undefined);\r\n setFieldError(Fields.EndDate, undefined);\r\n setFieldError(Fields.EndTime, undefined);\r\n }, [isPhysicalZoneSelected]);\r\n\r\n useEffect(() => clearAllFieldsOnMount(), [clearAllFieldsOnMount]);\r\n\r\n const OnBulkProductSelect = (value?: string | number) => {\r\n if (oldSelectedProduct === value) {\r\n return;\r\n }\r\n\r\n oldSelectedProduct = value?.toString();\r\n onProductSelect(value);\r\n resetTimeframeOnProductChange();\r\n\r\n const element = document.getElementById(\"vb-time-select\");\r\n if (element) {\r\n element.scrollIntoView({ behavior: \"smooth\" });\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {!isPhysicalZoneSelected ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {!isPhysicalZoneSelected ? (\r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n {t(\r\n isHourlyRateProduct\r\n ? \"productTimeframeForm.startDateAndTime\"\r\n : \"productTimeframeForm.startDate\"\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(\"productTimeframeForm.endDateAndTime\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n});\r\n\r\nexport default ProductTimeframeFormBulk;\r\n","import moment from \"moment-timezone\";\r\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport { findWhere, isEmpty, isNull, isUndefined } from \"underscore\";\r\nimport {\r\n ProductType,\r\n VisitorBookingProductConfiguration,\r\n} from \"../../../../../../../../../models/visitor-booking\";\r\nimport { Fields } from \"../ProductTimeframeForm.types\";\r\nimport { VisitorBookingNewBooking } from \"../../../../../models/VisitorBookingNewBooking\";\r\nimport { FormikErrors } from \"formik\";\r\n\r\nexport const useProductTimeframeFormBulk = (\r\n products: VisitorBookingProductConfiguration[],\r\n startDate: string,\r\n startTime: string,\r\n endDate: string,\r\n endTime: string,\r\n productId: string,\r\n setFieldValue: (\r\n field: string,\r\n value: any,\r\n shouldValidate?: boolean | undefined\r\n ) => Promise | Promise>,\r\n physicalZone: string | null\r\n) => {\r\n const [selectedProductId, setSelectedProductId] = useState(productId ?? \"\");\r\n const onProductSelect = (id?: string | number | undefined) => {\r\n setSelectedProductId((id as string) ?? \"\");\r\n setFieldValue(Fields.ProductId, id);\r\n };\r\n\r\n const selectedProduct = useMemo(() => {\r\n const found = findWhere(products, { id: selectedProductId });\r\n if (isUndefined(found)) {\r\n return null;\r\n }\r\n\r\n return found;\r\n }, [selectedProductId]);\r\n\r\n const isHourlyRateProduct = useMemo(\r\n () => !isNull(selectedProduct) && selectedProduct.productType === ProductType.HourlyRate,\r\n [selectedProduct]\r\n );\r\n\r\n const setProductTypeAndParkingTime = useCallback(() => {\r\n if (isNull(selectedProduct)) {\r\n return;\r\n }\r\n\r\n setFieldValue(Fields.ProductType, selectedProduct?.productType);\r\n setFieldValue(Fields.ParkingTime, selectedProduct.parkingTime);\r\n setFieldValue(Fields.ProductName, selectedProduct.name);\r\n }, [selectedProduct]);\r\n\r\n useEffect(() => setProductTypeAndParkingTime(), [setProductTypeAndParkingTime]);\r\n\r\n const updateTime = (field: Fields, time?: string) => {\r\n setFieldValue(field, !isUndefined(time) ? time : \"\");\r\n };\r\n\r\n const onStartTimeChange = (time: string) => {\r\n updateTime(Fields.StartTime, time);\r\n };\r\n\r\n const onEndTimeChange = (time: string) => {\r\n updateTime(Fields.EndTime, time);\r\n };\r\n\r\n const updateDate = (field: Fields, date: Date | null) => {\r\n setFieldValue(field, !isNull(date) ? moment(date).format(\"DD/MM/YYYY\") : \"\");\r\n };\r\n\r\n const onStartDateChange = (date: Date | null) => {\r\n updateDate(Fields.StartDate, date);\r\n\r\n if (startDateAfterEndDate(date)) {\r\n updateDate(Fields.EndDate, null);\r\n updateTime(Fields.EndTime);\r\n }\r\n };\r\n\r\n const onEndDateChange = (date: Date | null) => {\r\n updateDate(Fields.EndDate, date);\r\n };\r\n\r\n const startDateAfterEndDate = (selectedStartDate: Date | null) => {\r\n if (isNull(startDate)) {\r\n return false;\r\n }\r\n\r\n if (isEmpty(endDate)) {\r\n return false;\r\n }\r\n\r\n const momentStartDate = moment(selectedStartDate);\r\n const momentEndDate = moment(endDate, \"DD/MM/YYYY\");\r\n\r\n return momentStartDate.isAfter(momentEndDate);\r\n };\r\n\r\n const jsStartDate = useMemo(() => {\r\n if (isEmpty(startDate)) {\r\n return null;\r\n }\r\n\r\n return moment(startDate, \"DD/MM/YYYY\").toDate();\r\n }, [startDate]);\r\n\r\n const jsEndDate = useMemo(() => {\r\n if (isEmpty(endDate)) {\r\n return null;\r\n }\r\n\r\n return moment(endDate, \"DD/MM/YYYY\").toDate();\r\n }, [endDate]);\r\n\r\n const jsMaxEndDate = useMemo(() => {\r\n if (isEmpty(startDate)) {\r\n return null;\r\n }\r\n\r\n const maxEndDate = moment(startDate, \"DD/MM/YYYY\").add(1, \"year\");\r\n\r\n return maxEndDate.toDate();\r\n }, [startDate]);\r\n\r\n const minStartTime = useMemo(() => {\r\n let result = \"\";\r\n if (isEmpty(startDate)) {\r\n return result;\r\n }\r\n\r\n let momentNow = moment(new Date());\r\n const countryCode = physicalZone?.split(\".\")[0];\r\n if (countryCode) {\r\n const zones = moment.tz.zonesForCountry(countryCode);\r\n momentNow = momentNow.tz(zones[0]);\r\n }\r\n const momentStartDate = moment(startDate, \"DD/MM/YYYY\");\r\n const momentStartTime = moment(startTime, \"HH:mm\");\r\n\r\n if (momentStartDate.isSameOrBefore(momentNow, \"day\")) {\r\n result = momentNow.format(\"HH:mm\");\r\n\r\n if (\r\n momentStartDate.isBefore(momentNow, \"day\") ||\r\n (momentStartDate.isSame(momentNow, \"day\") &&\r\n momentStartTime.isSameOrBefore(momentNow, \"minutes\"))\r\n ) {\r\n updateTime(Fields.StartTime);\r\n }\r\n }\r\n\r\n return result;\r\n }, [startDate, physicalZone]);\r\n\r\n const minEndTime = useMemo(() => {\r\n if (isEmpty(startDate) || isEmpty(endDate) || isEmpty(startTime)) {\r\n return \"\";\r\n }\r\n\r\n const momentStartDate = moment(startDate, \"DD/MM/YYYY\");\r\n const momentStartTime = moment(startTime, \"HH:mm\");\r\n\r\n const momentEndDate = moment(endDate, \"DD/MM/YYYY\");\r\n const momentEndTime = moment(endTime, \"HH:mm\");\r\n\r\n if (\r\n (momentStartDate.isSameOrAfter(momentEndDate) && isEmpty(endTime)) ||\r\n (momentStartDate.isSameOrAfter(momentEndDate) && momentStartTime.isSameOrAfter(momentEndTime))\r\n ) {\r\n updateTime(Fields.EndTime);\r\n return startTime;\r\n }\r\n\r\n return \"\";\r\n }, [startDate, endDate, startTime]);\r\n\r\n const resetTimeframeOnProductChange = () => {\r\n updateDate(Fields.StartDate, null);\r\n updateTime(Fields.StartTime);\r\n updateDate(Fields.EndDate, null);\r\n updateTime(Fields.EndTime);\r\n };\r\n\r\n return {\r\n jsStartDate,\r\n jsEndDate,\r\n jsMaxEndDate,\r\n isHourlyRateProduct,\r\n minEndTime,\r\n minStartTime,\r\n onStartDateChange,\r\n onEndDateChange,\r\n onStartTimeChange,\r\n onEndTimeChange,\r\n onProductSelect,\r\n resetTimeframeOnProductChange,\r\n };\r\n};\r\n","import React from \"react\";\r\nimport { ProductTimeframeFormBulk } from \"../forms\";\r\nimport { ProductTimeframeProps } from \"./ProductTimeframe.types\";\r\n\r\nconst ProductTimeframeBulk = (props: ProductTimeframeProps) => {\r\n const {\r\n products,\r\n setFieldValue,\r\n setFieldError,\r\n values,\r\n errors,\r\n titlePrefixProduct,\r\n titlePrefixTime,\r\n } = props;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default ProductTimeframeBulk;\r\n","export type Required = {\r\n value: T;\r\n hasError: boolean;\r\n error?: string;\r\n};\r\n\r\nexport type Optional = {\r\n value?: T;\r\n hasError?: boolean;\r\n error?: string;\r\n};\r\n\r\nexport enum Fields {\r\n ProductId = \"productId\"\r\n}","import { Optional, Required } from \"../../../../NewBooking.types\";\r\n\r\nexport type VisitorDetailsFormProps = {\r\n name: Optional;\r\n emailAddress: Required;\r\n numberPlatePrefix: Optional;\r\n numberPlate: Optional;\r\n onChange: (field: string, e?: React.ChangeEvent) => void;\r\n setFieldValue: (field: string, value: any, shouldValidate?: boolean | undefined) => any;\r\n setFieldError: (field: string, value: string | undefined) => void;\r\n};\r\n\r\nexport enum Fields {\r\n Name = \"name\",\r\n EmailAddress = \"emailAddress\",\r\n NumberPlate = \"numberPlate\",\r\n NumberPlatePrefix = \"numberPlatePrefix\",\r\n}\r\n","import { Grid, InputLabel } from \"@material-ui/core\";\r\nimport React, { useMemo, memo } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { CountriesNumberPlates } from \"../../../../../../../../lib/countriesNumberPlates\";\r\nimport { variables } from \"../../../../../../../../theme/variables\";\r\nimport CustomInput from \"../../../../../../../../ui/CustomInput/CustomInput\";\r\nimport { NumberPlateDeSupport } from \"../../../../../../../../ui/NumberPlate\";\r\nimport RequiredInputLabel from \"../../../../../../../../ui/RequiredInputLabel/RequiredInputLabel\";\r\nimport { Fields, VisitorDetailsFormProps } from \"./VisitorDetailsForm.types\";\r\n\r\nconst { typography } = variables;\r\n\r\nconst VisitorDetailsForm = memo((props: VisitorDetailsFormProps) => {\r\n const {\r\n name,\r\n emailAddress,\r\n numberPlatePrefix,\r\n numberPlate,\r\n onChange,\r\n setFieldValue,\r\n setFieldError,\r\n } = props;\r\n const { t } = useTranslation([\"visitors\", \"globals\"]);\r\n\r\n const handleNumberPlatePrefixChange = (npPrefix: string) => {\r\n onChange(Fields.NumberPlatePrefix);\r\n return setFieldValue(Fields.NumberPlatePrefix, npPrefix);\r\n };\r\n\r\n const oldNpValue = React.useRef(\"\");\r\n const handleNumberPlateChange = (e: React.ChangeEvent) => {\r\n const np = e.target.value;\r\n const field = Fields.NumberPlate;\r\n if (oldNpValue.current !== np) {\r\n setFieldValue(field, np);\r\n onChange(field, e);\r\n oldNpValue.current = np;\r\n }\r\n };\r\n\r\n const countriesNumberPlates = new CountriesNumberPlates();\r\n\r\n const supportedNumberPlates = useMemo(() => {\r\n return countriesNumberPlates.getCountriesNumberPlates();\r\n }, [countriesNumberPlates]);\r\n\r\n const onInputChange = (field: Fields) => (e: React.ChangeEvent) => onChange(field, e);\r\n\r\n return (\r\n \r\n \r\n {t(\"globals:name\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(\"globals:email\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(\"globals:numberPlate\")}\r\n \r\n \r\n ({\r\n numberPlatePrefix: s.numberPlateCode,\r\n countryCode: s.countryCode,\r\n }))}\r\n setFieldError={setFieldError}\r\n setFieldValue={setFieldValue}\r\n />\r\n \r\n \r\n );\r\n});\r\n\r\nexport default VisitorDetailsForm;\r\n","import React from \"react\";\r\nimport { ContentCard } from \"../../../../../../../../../ui/ContentCard\";\r\nimport { VisitorDetailsForm } from \"../../forms\";\r\nimport { VisitorDetailsProps } from \"./VisitorDetails.types\";\r\n\r\nconst VisitorDetailsBulk = (props: VisitorDetailsProps) => {\r\n const { values, errors, handleChange, setFieldValue, setFieldError, handleDelete } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default VisitorDetailsBulk;\r\n","import { Grid } from \"@material-ui/core\";\r\nimport React, { forwardRef, useImperativeHandle } from \"react\";\r\nimport { isEmpty, isUndefined } from \"underscore\";\r\nimport { useNewBookingBulkStepTwoFormik } from \"../../../../../hooks/useNewBookingFormik\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport VisitorDetailsBulk from \"./VisitorDetailsBulk\";\r\nimport \"../../../../../_newBooking.scss\";\r\nimport { VisitorDetailModel } from \"../../../../../../../../../models/visitor-booking/VisitorDetailModel\";\r\n\r\nexport type VisitorDetailsWrapperProps = {\r\n numberPlateCountryCode: string | undefined;\r\n index: number;\r\n initialValues?: VisitorDetailModel;\r\n handleDelete?: () => void;\r\n setIsDirty?: () => void;\r\n};\r\n\r\nexport type VisitorDetailsWrapperHandle = {\r\n handleSubmit: () => Promise<{\r\n isValid: boolean;\r\n data: VisitorDetailModel | null;\r\n }>;\r\n getValue: () => VisitorDetailModel;\r\n isDirty: () => boolean;\r\n};\r\n\r\nconst VisitorDetailsWrapper = forwardRef(\r\n (\r\n {\r\n numberPlateCountryCode,\r\n index,\r\n initialValues,\r\n handleDelete,\r\n setIsDirty,\r\n }: VisitorDetailsWrapperProps,\r\n ref\r\n ) => {\r\n const { t } = useTranslation([\"visitors\"]);\r\n\r\n const formik = useNewBookingBulkStepTwoFormik({\r\n t,\r\n numberPlateCountryCode: numberPlateCountryCode,\r\n initialValues: initialValues,\r\n });\r\n\r\n const onInputChange = (field: string, e?: React.ChangeEvent) => {\r\n if (!isUndefined(formik.errors[field as keyof typeof formik.errors])) {\r\n formik.setFieldError(field, undefined);\r\n }\r\n\r\n if (e) {\r\n formik.handleChange(e);\r\n }\r\n\r\n if (setIsDirty) {\r\n setIsDirty();\r\n }\r\n };\r\n\r\n useImperativeHandle(ref, () => ({\r\n async handleSubmit() {\r\n const errors = await formik.validateForm();\r\n const isValid = !Object.keys(errors).length;\r\n\r\n return {\r\n isValid: isValid,\r\n data: isValid ? formik.values : null,\r\n };\r\n },\r\n\r\n getValue() {\r\n return formik.values;\r\n },\r\n\r\n isDirty() {\r\n return (\r\n !isEmpty(formik.values.emailAddress) ||\r\n !isEmpty(formik.values.name) ||\r\n !isEmpty(formik.values.numberPlate)\r\n );\r\n },\r\n }));\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n);\r\n\r\nexport default VisitorDetailsWrapper;\r\n","import * as React from \"react\";\r\nimport \"../../../../../../../../../ui/Icons/_visitorBookingCreation.scss\";\r\n\r\nexport default function VisitorBookingErrorMessage(props: Readonly<{ children?: React.ReactNode }>) {\r\n const { children } = props;\r\n\r\n return (\r\n
\r\n
\r\n {/* inline image for performances, same image as /assets/images/exclamation-mark-red-circle.svg*/}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n {children}\r\n
\r\n
\r\n );\r\n}\r\n","import { Grid, TextField } from \"@material-ui/core\";\r\nimport React, {\r\n forwardRef,\r\n useEffect,\r\n useImperativeHandle,\r\n useMemo,\r\n useRef,\r\n useState,\r\n} from \"react\";\r\nimport { filter, isEmpty, isNull, uniqueId } from \"underscore\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport VisitorDetailsWrapper, { VisitorDetailsWrapperHandle } from \"./VisitorDetailsWrapper\";\r\nimport CustomButton from \"../../../../../../../../../ui/CustomButton/CustomButton\";\r\nimport \"../../../../../_newBooking.scss\";\r\nimport { VisitorDetailModel } from \"../../../../../../../../../models/visitor-booking/VisitorDetailModel\";\r\nimport VisitorBookingErrorMessage from \"./VisitorBookingErrorMessage\";\r\n\r\nexport type VisitorDetailsListProps = {\r\n visitorDetails?: any[];\r\n numberPlateCountryCode?: string;\r\n initialValues?: VisitorDetailModel[] | null;\r\n inValidationMode?: boolean;\r\n productSalesAvailability?: number;\r\n setNumberOfVisitorDetails?: (number: number) => void;\r\n setIsDirty?: () => void;\r\n};\r\n\r\nexport type VisitorDetailsListHandle = {\r\n handleSubmit: () => Promise<{\r\n isValid: boolean;\r\n data: VisitorDetailModel[] | null;\r\n }>;\r\n getValues: () => VisitorDetailModel[];\r\n isDirty: () => boolean;\r\n};\r\n\r\ntype VisitorDetailsWithId = {\r\n id: string;\r\n value: VisitorDetailModel | null;\r\n};\r\n\r\nconst maximumAdditionalVisitorsAddedInOneClick = 20;\r\nconst maximumAllowedVisitorsToBeCreatedInBulk = 50;\r\n\r\nconst VisitorDetailsList = forwardRef(\r\n (\r\n {\r\n numberPlateCountryCode,\r\n initialValues,\r\n inValidationMode,\r\n productSalesAvailability,\r\n setNumberOfVisitorDetails,\r\n setIsDirty,\r\n }: VisitorDetailsListProps,\r\n ref\r\n ) => {\r\n const { t } = useTranslation([\"visitors\"]);\r\n\r\n const refs = useRef([]);\r\n\r\n const initialValuesMapped: VisitorDetailsWithId[] = initialValues?.map((el) => ({\r\n id: uniqueId(),\r\n value: el,\r\n })) ?? [{ id: uniqueId(), value: null }];\r\n\r\n const [visitorDetails, setVisitorDetails] = useState(initialValuesMapped);\r\n\r\n const [addSize, setAddSize] = useState(1);\r\n const [areThereSpotsLeft, setAreThereSpotsLeft] = useState((productSalesAvailability ?? 0) > 0);\r\n const [shouldShowNoSpotsAvailableMessage, setShouldShowNoSpotsAvailableMessage] =\r\n useState(false);\r\n const [\r\n showMaxAllowedVisitorsCanBeCreatedMessage,\r\n setShowMaxAllowedVisitorsCanBeCreatedMessage,\r\n ] = useState(false);\r\n const [\r\n isAvailabilityLessThanMaxVisitorsThatCanBeAdded,\r\n setIsAvailabilityLessThanMaxVisitorsThatCanBeAdded,\r\n ] = useState((productSalesAvailability ?? 0) < maximumAdditionalVisitorsAddedInOneClick);\r\n\r\n const maximumAllowedVisitorsToBeCreatedInBulkReached = useMemo(\r\n () => visitorDetails.length >= maximumAllowedVisitorsToBeCreatedInBulk,\r\n [visitorDetails]\r\n );\r\n\r\n const handleAddVisitorDetails = () => {\r\n let cannotAddOneMoreVisitor = (productSalesAvailability ?? 0) < visitorDetails.length + 1;\r\n if (cannotAddOneMoreVisitor) {\r\n setShouldShowNoSpotsAvailableMessage(true);\r\n return;\r\n }\r\n\r\n cannotAddOneMoreVisitor =\r\n addSize + visitorDetails.length > maximumAllowedVisitorsToBeCreatedInBulk;\r\n if (cannotAddOneMoreVisitor) {\r\n setShowMaxAllowedVisitorsCanBeCreatedMessage(true);\r\n return;\r\n }\r\n\r\n const addDetails = [];\r\n for (let i = 0; i < addSize; i++) {\r\n addDetails.push({ id: uniqueId(), value: null });\r\n }\r\n\r\n setVisitorDetails([...visitorDetails, ...addDetails]);\r\n setAddSize(1);\r\n };\r\n\r\n const [maxVisitorsThatCanBeAdded, setMaxVisitorsThatCanBeAdded] = useState(\r\n Math.min(\r\n (productSalesAvailability ?? 0) - visitorDetails.length,\r\n maximumAllowedVisitorsToBeCreatedInBulk - visitorDetails.length,\r\n maximumAdditionalVisitorsAddedInOneClick\r\n )\r\n );\r\n\r\n useEffect(() => {\r\n let remainingSpots: number = maximumAllowedVisitorsToBeCreatedInBulk - visitorDetails.length;\r\n\r\n if (productSalesAvailability) {\r\n remainingSpots =\r\n productSalesAvailability > maximumAllowedVisitorsToBeCreatedInBulk\r\n ? maximumAllowedVisitorsToBeCreatedInBulk - visitorDetails.length\r\n : productSalesAvailability - visitorDetails.length;\r\n }\r\n\r\n if (\r\n remainingSpots !== undefined &&\r\n remainingSpots < maximumAdditionalVisitorsAddedInOneClick\r\n ) {\r\n setMaxVisitorsThatCanBeAdded(remainingSpots);\r\n setAreThereSpotsLeft(remainingSpots > 0);\r\n setIsAvailabilityLessThanMaxVisitorsThatCanBeAdded(true);\r\n } else {\r\n setMaxVisitorsThatCanBeAdded(maximumAdditionalVisitorsAddedInOneClick);\r\n setAreThereSpotsLeft(true);\r\n setIsAvailabilityLessThanMaxVisitorsThatCanBeAdded(false);\r\n }\r\n\r\n if (setNumberOfVisitorDetails) {\r\n setNumberOfVisitorDetails(visitorDetails.length);\r\n }\r\n }, [visitorDetails, productSalesAvailability]);\r\n\r\n const handleRemoveVisitorDetails = (idToRemove: string) => {\r\n if (visitorDetails.length > 1) {\r\n setVisitorDetails(filter(visitorDetails, (el) => el.id !== idToRemove));\r\n setShouldShowNoSpotsAvailableMessage(false);\r\n setShowMaxAllowedVisitorsCanBeCreatedMessage(false);\r\n }\r\n };\r\n\r\n const handleAddVisitorDetailsInput = (event: React.ChangeEvent) => {\r\n event.preventDefault();\r\n\r\n const { value } = event.target;\r\n\r\n let newValue = parseInt(value.replace(/\\D/g, \"\"));\r\n\r\n if (!isEmpty(newValue) && !isNaN(newValue) && newValue < 1) {\r\n newValue = 1;\r\n }\r\n\r\n if (newValue > maxVisitorsThatCanBeAdded) {\r\n newValue = maxVisitorsThatCanBeAdded;\r\n }\r\n\r\n if (addSize !== newValue) {\r\n setAddSize(newValue);\r\n }\r\n };\r\n\r\n const handleAddVisitorDetailsBlur = (event: React.ChangeEvent) => {\r\n event.preventDefault();\r\n\r\n const { value } = event.target;\r\n\r\n let newValue = parseInt(value);\r\n\r\n if (isNaN(newValue)) {\r\n newValue = 1;\r\n }\r\n\r\n if (addSize !== newValue) {\r\n setAddSize(newValue);\r\n }\r\n };\r\n\r\n useImperativeHandle(ref, () => ({\r\n async handleSubmit() {\r\n let isValid = true;\r\n let data: VisitorDetailModel[] = [];\r\n await Promise.all(\r\n refs.current?.map(async (el) => {\r\n if (isNull(el)) {\r\n return;\r\n }\r\n\r\n const res = await el.handleSubmit();\r\n if (res.isValid && !isNull(res.data)) {\r\n data.push(res.data);\r\n } else {\r\n isValid = false;\r\n }\r\n })\r\n );\r\n\r\n // Jump to the first error if any\r\n const elements = document.getElementsByClassName(\"Mui-error\");\r\n if (elements && elements.length > 0) {\r\n const dims = elements[0].getBoundingClientRect();\r\n window.scrollTo({\r\n left: window.scrollX,\r\n top: dims.top - 135 + window.scrollY,\r\n behavior: \"smooth\",\r\n });\r\n }\r\n\r\n return {\r\n isValid: isValid,\r\n data: isValid ? data : null,\r\n };\r\n },\r\n\r\n getValues() {\r\n const res: VisitorDetailModel[] = [];\r\n refs.current?.forEach((el) => {\r\n if (el) {\r\n res.push(el.getValue());\r\n }\r\n });\r\n\r\n return res;\r\n },\r\n\r\n isDirty() {\r\n return refs.current?.some((x) => x.isDirty());\r\n },\r\n }));\r\n\r\n const addMoreInfoLabelMessage = () => {\r\n if (!areThereSpotsLeft) {\r\n if (maximumAllowedVisitorsToBeCreatedInBulkReached) {\r\n return t(\"maxVisitorsInOneOperation\", {\r\n maxNumber: maximumAllowedVisitorsToBeCreatedInBulk,\r\n });\r\n }\r\n\r\n return t(\"noMoreSpotsAvailable\");\r\n }\r\n\r\n if (isAvailabilityLessThanMaxVisitorsThatCanBeAdded) {\r\n return t(\"currentMaxVisitors\", {\r\n maxNumber: maxVisitorsThatCanBeAdded,\r\n });\r\n }\r\n\r\n return t(\"additionalVisitorsInfo\", {\r\n maxNumber: maximumAdditionalVisitorsAddedInOneClick,\r\n });\r\n };\r\n\r\n return (\r\n \r\n {productSalesAvailability &&\r\n productSalesAvailability > 0 &&\r\n visitorDetails.length > productSalesAvailability && (\r\n \r\n \r\n {t(\"visitors:availableSpotsNotEnough\")}\r\n
\r\n {t(\"visitors:removeVisitors\", {\r\n number: visitorDetails.length - productSalesAvailability,\r\n })}\r\n
\r\n
\r\n )}\r\n\r\n {!inValidationMode && (\r\n \r\n

\r\n {t(\"visitorDetailsTitle\")} ({visitorDetails.length})\r\n

\r\n
\r\n )}\r\n\r\n {visitorDetails.map((vd, index) => (\r\n (refs.current!![vd.id as any] = el!!)}\r\n numberPlateCountryCode={numberPlateCountryCode}\r\n initialValues={vd.value ?? undefined}\r\n handleDelete={\r\n visitorDetails.length > 1 && !inValidationMode\r\n ? () => handleRemoveVisitorDetails(vd.id)\r\n : undefined\r\n }\r\n setIsDirty={setIsDirty}\r\n />\r\n ))}\r\n {!inValidationMode && (\r\n \r\n \r\n {t(\"additionalVisitors\")}\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n {addMoreInfoLabelMessage()}\r\n \r\n \r\n )}\r\n
\r\n );\r\n }\r\n);\r\n\r\nexport default VisitorDetailsList;\r\n","import {\r\n CreateVisitorBookingsDetailRequest,\r\n CreateVisitorBookingsRequest,\r\n} from \"../../../../../models/visitor-booking/CreateVisitorBookingsRequest\";\r\nimport { v4 as uuidV4 } from \"uuid\";\r\nimport {\r\n VisitorBookingNewBookingBulkDetails,\r\n VisitorBookingNewBookingBulkRequest,\r\n} from \"../models/VisitorBookingNewBookingBulk\";\r\nimport {\r\n VisitorDetailModel,\r\n VisitorDetailValidationModel,\r\n} from \"../../../../../models/visitor-booking/VisitorDetailModel\";\r\nimport { isUndefined } from \"underscore\";\r\n\r\nexport const mapToCreateVisitorBookingsBulkRequest = (\r\n product: VisitorBookingNewBookingBulkDetails,\r\n visitors: VisitorDetailModel[]\r\n): VisitorBookingNewBookingBulkRequest => ({\r\n ...product,\r\n visitors,\r\n});\r\n\r\nexport const mapToCreateVisitorBookingsRequest = (\r\n data: VisitorBookingNewBookingBulkRequest,\r\n culture: string\r\n): CreateVisitorBookingsRequest => ({\r\n countryCode: data.country,\r\n receptionistCountryCode: data.receptionistCountryCode,\r\n physicalZoneUid: data.physicalZone,\r\n productId: data.productId,\r\n productName: data.productName,\r\n productType: data.productType,\r\n parkingTime: data.parkingTime,\r\n startDate: data.startDate,\r\n startTime: data.startTime,\r\n endDate: data.endDate,\r\n endTime: data.endTime,\r\n culture: culture,\r\n visitorDetails: mapToCreateVisitorBookingsDetailRequest(data),\r\n});\r\n\r\nconst mapToCreateVisitorBookingsDetailRequest = (\r\n data: VisitorBookingNewBookingBulkRequest\r\n): CreateVisitorBookingsDetailRequest[] =>\r\n data.visitors.map((vd) => ({\r\n name: vd.name ?? \"\",\r\n referenceNumber: uuidV4(),\r\n emailAddress: vd.emailAddress,\r\n numberPlate: vd.numberPlate?.toString().toUpperCase() ?? \"\",\r\n numberPlateCountryPrefix: vd.numberPlatePrefix?.toUpperCase() ?? \"\",\r\n }));\r\n\r\nexport const mapToVisitorDetailModel = (\r\n visitor: VisitorDetailValidationModel,\r\n country?: string\r\n): VisitorDetailModel => ({\r\n name: visitor.name.value,\r\n referenceNumber: uuidV4(),\r\n emailAddress: visitor.emailAddress.value,\r\n numberPlate: visitor.numberPlateNumber.value,\r\n numberPlatePrefix:\r\n visitor.numberPlateCountryCode.value ??\r\n (isUndefined(visitor.numberPlateNumber.value) && visitor.numberPlateNumber.isValid\r\n ? country?.toUpperCase()\r\n : \"\"),\r\n});\r\n\r\nexport const mapToVisitorDetailModelArray = (\r\n data: VisitorDetailValidationModel[]\r\n): VisitorDetailModel[] => data.map((visitor) => mapToVisitorDetailModel(visitor));\r\n","import { Container, ButtonGroup, Button } from \"@material-ui/core\";\r\nimport React, { PropsWithChildren } from \"react\";\r\nimport { NoPaddingBottomGrid } from \"../../../../../../../../../components/DataTable/DataTableStyledComponents\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nexport type VisitorDetailHeaderTab = \"manual\" | \"file\";\r\n\r\nexport type VisitorDetailsHeaderProps = {\r\n isDirty: boolean;\r\n currentTab: VisitorDetailHeaderTab;\r\n openModalDialog: (onClose: () => void) => void;\r\n onTabSwitch: (newTab: VisitorDetailHeaderTab) => void;\r\n};\r\n\r\nconst VisitorDetailsHeader = (props: PropsWithChildren) => {\r\n const {\r\n isDirty,\r\n currentTab,\r\n openModalDialog,\r\n onTabSwitch,\r\n children,\r\n } = props;\r\n\r\n const { t } = useTranslation([\"globals\", \"visitors\"]);\r\n\r\n const askConfirmationAndSwitchInput = (tab: VisitorDetailHeaderTab) => {\r\n if (currentTab === tab) {\r\n return;\r\n }\r\n\r\n if (isDirty) {\r\n openModalDialog(() => {\r\n onTabSwitch(tab);\r\n });\r\n } else {\r\n onTabSwitch(tab);\r\n }\r\n };\r\n\r\n const component = (\r\n \r\n \r\n \r\n \r\n \r\n askConfirmationAndSwitchInput(\"manual\")}\r\n disableElevation\r\n >\r\n {t(\"visitors:visitorBookingFileUpload.manualInput\")}\r\n \r\n askConfirmationAndSwitchInput(\"file\")}\r\n disableElevation\r\n >\r\n {t(\"visitors:visitorBookingFileUpload.fileUpload\")}\r\n \r\n \r\n \r\n \r\n \r\n\r\n {children}\r\n \r\n );\r\n\r\n return component;\r\n};\r\n\r\nexport default VisitorDetailsHeader;\r\n","import { Dispatch } from \"react\";\r\nimport { fileTypes } from \"../action-types/file.types\";\r\n\r\nexport type FileActions = {\r\n setFileUploaded: () => (dispatch: Dispatch) => void;\r\n cancelFileUpload: () => (dispatch: Dispatch) => void;\r\n};\r\n\r\nexport type FileActionType = {\r\n type: string;\r\n};\r\n\r\nconst setFileUploaded = () => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: fileTypes.FILE_UPLOADED,\r\n });\r\n };\r\n};\r\n\r\nconst cancelFileUpload = () => {\r\n return (dispatch: Dispatch) => {\r\n dispatch({\r\n type: fileTypes.CANCEL_UPLOAD,\r\n });\r\n };\r\n};\r\n\r\nexport const fileActions: FileActions = {\r\n setFileUploaded,\r\n cancelFileUpload,\r\n};\r\n","import { isEmpty, partition } from \"underscore\";\r\nimport { CountriesNumberPlates } from \"../../../../../../../../../lib/countriesNumberPlates\";\r\nimport { VisitorDetailValidationModel } from \"../../../../../../../../../models/visitor-booking/VisitorDetailModel\";\r\nimport emailValidator from \"../../../../../../../../../validators/email.validator\";\r\nimport numberPlateValidator from \"../../../../../../../../../validators/numberplate.validator\";\r\nimport * as XLSX from \"xlsx\";\r\n\r\nconst sheetName = \"Sheet1\";\r\nconst visitorName = \"Visitor Name\";\r\nconst visitorEmail = \"Visitor e-mail\";\r\nconst countryCode = \"Vehicle registration code\";\r\nconst numberPlate = \"Number plate\";\r\n\r\nconst isLicensePlateValid = (countryCode?: string, licensePlate?: string) => {\r\n if (!licensePlate) {\r\n return true;\r\n }\r\n\r\n return countryCode === \"D\"\r\n ? numberPlateValidator.isValidGermanNumberPlate(licensePlate.toString())\r\n : numberPlateValidator.isValidNumberPlateWithoutDash(licensePlate.toString());\r\n};\r\n\r\nconst isCountryCodeValid = (\r\n countriesNumberPlates: CountriesNumberPlates,\r\n countryCode?: string,\r\n licensePlate?: string\r\n) =>\r\n (!countryCode && !licensePlate) ||\r\n countriesNumberPlates.isValidNumberPlateCode(countryCode?.toString());\r\n\r\nconst isVisitorValid = (visitor: VisitorDetailValidationModel) =>\r\n visitor.name.isValid &&\r\n visitor.emailAddress.isValid &&\r\n visitor.numberPlateCountryCode.isValid &&\r\n visitor.numberPlateNumber.isValid;\r\n\r\nconst isVisitorRowEmpty = (visitor: VisitorDetailValidationModel) =>\r\n isEmpty(visitor.name.value) &&\r\n isEmpty(visitor.emailAddress.value) &&\r\n isEmpty(visitor.numberPlateCountryCode.value) &&\r\n isEmpty(visitor.numberPlateNumber.value);\r\n\r\nexport const parseUploadedData = (e: ProgressEvent, maxRecordsNumber?: number) => {\r\n const visitorsToImport: VisitorDetailValidationModel[] = [];\r\n\r\n const data = e.target?.result;\r\n const wb = XLSX.read(data, { type: \"binary\" });\r\n\r\n if (wb.SheetNames?.includes(sheetName)) {\r\n const rows: any[] = XLSX.utils.sheet_to_json(wb.Sheets[sheetName]);\r\n\r\n const hasRows = rows.length > 0;\r\n if (!hasRows) {\r\n return \"error\";\r\n }\r\n\r\n if (rows.length > Number(maxRecordsNumber)) {\r\n return \"maxRecordsError\";\r\n }\r\n\r\n const countriesNumberPlates = new CountriesNumberPlates();\r\n\r\n rows.forEach((row) => {\r\n let visitorCountryCode = row[countryCode];\r\n let visitorNumberPlate = row[numberPlate]?.toString().replaceAll(\" \", \"\");\r\n if (visitorCountryCode !== \"D\") {\r\n visitorNumberPlate = visitorNumberPlate?.replaceAll(\"-\", \"\");\r\n }\r\n\r\n if (isEmpty(visitorNumberPlate)) {\r\n visitorCountryCode = \"\";\r\n }\r\n\r\n const visitor: VisitorDetailValidationModel = {\r\n name: {\r\n value: row[visitorName],\r\n isValid: true,\r\n },\r\n emailAddress: {\r\n value: row[visitorEmail],\r\n isValid: row[visitorEmail] && emailValidator.isValidEmail(row[visitorEmail].toString()),\r\n },\r\n numberPlateCountryCode: {\r\n value: visitorCountryCode,\r\n isValid: isCountryCodeValid(\r\n countriesNumberPlates,\r\n visitorCountryCode,\r\n visitorNumberPlate\r\n ),\r\n },\r\n numberPlateNumber: {\r\n value: visitorNumberPlate,\r\n isValid: isLicensePlateValid(visitorCountryCode, visitorNumberPlate),\r\n },\r\n };\r\n\r\n if (!isVisitorRowEmpty(visitor)) {\r\n visitorsToImport.push(visitor);\r\n }\r\n });\r\n\r\n return partition(visitorsToImport, isVisitorValid);\r\n }\r\n\r\n return \"error\";\r\n};\r\n","import React, {\r\n forwardRef,\r\n Dispatch,\r\n useEffect,\r\n useRef,\r\n useState,\r\n useImperativeHandle,\r\n} from \"react\";\r\nimport { Container, Grid } from \"@material-ui/core\";\r\nimport { Trans, useTranslation } from \"react-i18next\";\r\nimport { NoPaddingBottomGrid } from \"../../../../../../../../../components/DataTable/DataTableStyledComponents\";\r\nimport DragAndDrop, {\r\n DndError,\r\n DndState,\r\n} from \"../../../../../../../../../components/DragAndDropV2/DragAndDrop\";\r\nimport { connect } from \"react-redux\";\r\nimport { RootReducer } from \"../../../../../../../../../store/reducers\";\r\nimport { fileActions } from \"../../../../../../../../../store/actions/file.actions\";\r\nimport { VisitorDetailModel } from \"../../../../../../../../../models/visitor-booking/VisitorDetailModel\";\r\nimport {\r\n mapToVisitorDetailModel,\r\n mapToVisitorDetailModelArray,\r\n} from \"../../../../../mappers/visitorBookings.mapper\";\r\nimport { isEmpty } from \"underscore\";\r\nimport VisitorDetailsList, { VisitorDetailsListHandle } from \"../VisitorDetails/VisitorDetailsList\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { parseUploadedData } from \"./VisitorBulkUploadParser\";\r\nimport { VisitorBulkUploadHandle, VisitorBulkUploadProps } from \".\";\r\nimport VisitorBookingErrorMessage from \"../VisitorDetails/VisitorBookingErrorMessage\";\r\n\r\ninterface IProps extends VisitorBulkUploadProps, StateProps, DispatchProps { }\r\n\r\nconst VisitorBulkUpload = forwardRef((props: IProps, ref) => {\r\n const [state, setState] = useState(\"default\");\r\n const [error, setError] = useState(undefined);\r\n const { t } = useTranslation([\"globals\"]);\r\n const supportedFileTypes = [\r\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\r\n \"application/vnd.ms-excel\",\r\n ];\r\n\r\n const visitorListRef = useRef(null);\r\n\r\n const [validVisitorDetails, setValidVisitorDetails] = useState([]);\r\n const [invalidVisitorDetails, setInvalidVisitorDetails] = useState([]);\r\n\r\n const [numberOfVisitorsToBeRemoved, setNumberOfVisitorsToBeRemoved] = useState(0);\r\n\r\n const handleFileUpload = (file: File) => {\r\n setValidVisitorDetails([]);\r\n setInvalidVisitorDetails([]);\r\n setState(\"processing\");\r\n props.setHasTooManyVisitorsUploadedFromFile(false);\r\n props.onProcessing(true);\r\n\r\n readVisitorsFromFile(file);\r\n };\r\n\r\n const readVisitorsFromFile = (file: File) => {\r\n const reader = new FileReader();\r\n reader.readAsBinaryString(file);\r\n reader.onload = handleUploadedData;\r\n };\r\n\r\n const handleUploadedData = (e: ProgressEvent) => {\r\n const res = parseUploadedData(e, props.maxRecordsNumber, props.germanLicencePlatesEnabled);\r\n if (res === \"error\") {\r\n setState(\"error\");\r\n setError(\"empty\");\r\n props.onProcessing(false);\r\n return;\r\n }\r\n\r\n if (res === \"maxRecordsError\") {\r\n setState(\"error\");\r\n setError(\"maxRecords\");\r\n props.onProcessing(false);\r\n return;\r\n }\r\n\r\n const [valid, invalid] = [res[0], res[1]];\r\n const mappedValidVisitorDetails = mapToVisitorDetailModelArray(valid);\r\n\r\n setValidVisitorDetails(mappedValidVisitorDetails);\r\n setInvalidVisitorDetails(\r\n invalid.map((visitor) => mapToVisitorDetailModel(visitor, props.numberPlateCountryCode))\r\n );\r\n\r\n props.onFileProcessed(mappedValidVisitorDetails);\r\n props.onProcessing(false);\r\n\r\n setState(valid.length > 0 && invalid.length <= 0 ? \"success\" : \"error\");\r\n };\r\n\r\n const handleFileDropped = (valid: boolean) => {\r\n if (!valid) {\r\n setState(\"error\");\r\n }\r\n props.setFileUploaded();\r\n };\r\n\r\n const cancelFileUpload = () => {\r\n props.cancelFileUpload();\r\n setState(\"default\");\r\n setError(undefined);\r\n setValidVisitorDetails([]);\r\n setInvalidVisitorDetails([]);\r\n }\r\n\r\n useEffect(() => {\r\n if (!props.fileUploaded) {\r\n // Cancel\r\n setState(\"default\");\r\n setError(undefined);\r\n setValidVisitorDetails([]);\r\n setInvalidVisitorDetails([]);\r\n }\r\n }, [props.fileUploaded]);\r\n\r\n useEffect(() => {\r\n props.setHasTooManyVisitorsUploadedFromFile(error === \"maxRecords\");\r\n }, [error]);\r\n\r\n useEffect(() => {\r\n if (invalidVisitorDetails.length > 0) {\r\n // Show validation errors\r\n visitorListRef.current?.handleSubmit();\r\n }\r\n }, [invalidVisitorDetails]);\r\n\r\n useEffect(() => {\r\n const totalNumberOfVisitors = validVisitorDetails.length + invalidVisitorDetails.length;\r\n props.setNumberOfVisitorDetailsUploadedFromFile(totalNumberOfVisitors);\r\n\r\n if (props.salesAvailability) {\r\n setNumberOfVisitorsToBeRemoved(totalNumberOfVisitors - props.salesAvailability);\r\n \r\n if (props.salesAvailability > 0 && totalNumberOfVisitors > props.salesAvailability) {\r\n setState(\"error\");\r\n setError(\"moreThanAvailable\");\r\n }\r\n } \r\n }, [validVisitorDetails, invalidVisitorDetails, props.salesAvailability]);\r\n\r\n const renderTitle = () => {\r\n const successFullLines = validVisitorDetails.length;\r\n const unSuccessFullLines = invalidVisitorDetails.length;\r\n\r\n if (successFullLines <= 0 && unSuccessFullLines <= 0) {\r\n return

{t(\"visitors:visitorBookingFileUpload.uploadFile\")}

;\r\n }\r\n\r\n if (unSuccessFullLines > 0) {\r\n return unSuccessFullLines <= 50 ? (\r\n <>\r\n

\r\n {t(\"visitors:visitorBookingFileUpload.uploadUnSuccessful\", {\r\n invalidCount: successFullLines,\r\n count: successFullLines + unSuccessFullLines,\r\n })}\r\n

\r\n
{t(\"visitors:visitorBookingFileUpload.errorCorrection\")}
\r\n \r\n ) : (\r\n
\r\n props.cancelFileUpload()} to=\"#\" className=\"link-lime\" />,\r\n ]}\r\n />\r\n
\r\n );\r\n }\r\n\r\n return (\r\n

\r\n {successFullLines === 1\r\n ? t(\"visitors:visitorBookingFileUpload.uploadSuccessful\", {\r\n count: successFullLines,\r\n })\r\n : t(\"visitors:visitorBookingFileUpload.uploadsSuccessful\", {\r\n count: successFullLines,\r\n })}\r\n

\r\n );\r\n };\r\n\r\n useImperativeHandle(ref, () => ({\r\n async handleSubmit() {\r\n if (visitorListRef.current) {\r\n const submit = await visitorListRef.current.handleSubmit();\r\n\r\n return {\r\n isValid: submit?.isValid ?? false,\r\n data: submit?.data ?? [],\r\n };\r\n }\r\n\r\n return {\r\n isValid: invalidVisitorDetails.length <= 0,\r\n data: [],\r\n };\r\n },\r\n }));\r\n\r\n return (\r\n \r\n {numberOfVisitorsToBeRemoved > 0 ?\r\n (\r\n \r\n \r\n {t(\"visitors:availableSpotsNotEnough\")}\r\n
\r\n cancelFileUpload()} key=\"cancelFileUploadLink\" to=\"#\" />,\r\n ]}\r\n values={{ number: numberOfVisitorsToBeRemoved }}\r\n />\r\n
\r\n
\r\n ) : (\r\n <>\r\n \r\n \r\n \r\n {renderTitle()}\r\n \r\n \r\n {isEmpty(invalidVisitorDetails) && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {isEmpty(invalidVisitorDetails) ? (\r\n \r\n ) : (\r\n invalidVisitorDetails.length <= 50 && (\r\n \r\n \r\n \r\n )\r\n )}\r\n \r\n \r\n )}\r\n
\r\n );\r\n});\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { file } = state;\r\n\r\n return {\r\n fileUploaded: file.fileUploaded\r\n };\r\n};\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n setFileUploaded: () => dispatch(fileActions.setFileUploaded()),\r\n cancelFileUpload: () => dispatch(fileActions.cancelFileUpload()),\r\n});\r\n\r\ntype StateProps = ReturnType;\r\ntype DispatchProps = ReturnType;\r\nexport default connect(mapStateToProps, mapDispatchToProps, null, { forwardRef: true })(\r\n VisitorBulkUpload\r\n);\r\n","import React from \"react\";\r\n\r\nexport type SidebarInformationProps = {\r\n imageSrc: string;\r\n text: string;\r\n useWarningColor: boolean;\r\n}\r\n\r\nexport function SidebarInformation(props: Readonly) {\r\n const { imageSrc, text, useWarningColor } = props;\r\n\r\n return (\r\n
\r\n \"info\"\r\n
{text}
\r\n
\r\n );\r\n}","import { useTranslation } from \"react-i18next\";\r\nimport React from \"react\";\r\nimport \"./_stickySidebar.scss\";\r\nimport ProductIconSrc from \"../../../../../../../../../assets/images/product-ticket.svg\";\r\nimport ClockIconSrc from \"../../../../../../../../../assets/images/clock-filled.svg\";\r\nimport AvailableSpotsIconSrc from \"../../../../../../../../../assets/images/available-spots.svg\";\r\nimport AvailableSpotsRedIconSrc from \"../../../../../../../../../assets/images/available-spots-red.svg\";\r\nimport { SidebarInformation } from \"./SidebarInformation\";\r\nimport { StickySidebarProps } from \"./StickySidebar.types\";\r\n\r\nexport default function StickySidebar(props: Readonly) {\r\n const { showSidebar, availableSpots, values, parkingLocations, parkingFacilityImages } = props;\r\n const { t } = useTranslation(\"visitors\");\r\n\r\n const imageUrl = parkingFacilityImages?.find(\r\n (facility) => facility.physicalZoneUid === values.physicalZone.split('.')[1]\r\n )?.imageUrl;\r\n\r\n // Pre-load the images to avoid showing the sticky sidebar without them\r\n new Image().src = ProductIconSrc;\r\n new Image().src = ClockIconSrc;\r\n new Image().src = AvailableSpotsIconSrc;\r\n new Image().src = AvailableSpotsRedIconSrc;\r\n\r\n const formatDatesForSidebar = () => {\r\n const hasStartDateAndTime = values.startDate && values.startTime;\r\n const hasEndDateAndTime = values.endDate && values.endTime;\r\n\r\n return hasStartDateAndTime && hasEndDateAndTime\r\n ? `${values.startDate} ${values.startTime} → ${values.endDate} ${values.endTime}`\r\n : values.startDate;\r\n };\r\n\r\n const getFacilityNameForSidebar = () => {\r\n const citiesInTheCountry = parkingLocations?.find(\r\n (location) => location.countryCode === values.country\r\n );\r\n const city = citiesInTheCountry?.cities.find((city) => city.name === values.city);\r\n const facility = city?.physicalZones.find((pz) => pz.physicalZoneId === values.physicalZone);\r\n\r\n return facility?.name ?? \"\";\r\n };\r\n\r\n return showSidebar ? (\r\n
\r\n
\r\n {imageUrl ? (\r\n \"sidebar-image\"\r\n ) : (\r\n
\r\n )}\r\n
\r\n
\r\n

{getFacilityNameForSidebar()}

\r\n \r\n \r\n \r\n
\r\n
\r\n ) : (\r\n <>\r\n );\r\n}\r\n","import { isEmpty, isNull } from \"underscore\";\r\nimport { VisitorBookingNewBookingBulkDetails } from \"../containers/Visitors/BookingOverview/NewBooking/models/VisitorBookingNewBookingBulk\";\r\nimport { ProductType } from \"../models/visitor-booking/ProductType\";\r\n\r\nexport const getParametersForGetProductSalesAvailability = (\r\n data: VisitorBookingNewBookingBulkDetails\r\n) => {\r\n const isHourlyRateProduct = data.productType === ProductType.HourlyRate;\r\n const startDateTime = isHourlyRateProduct\r\n ? `${data.startDate} ${data.startTime}`\r\n : `${data.startDate} 00:00`;\r\n const endDateTime = isHourlyRateProduct ? `${data.endDate} ${data.endTime}` : startDateTime;\r\n\r\n return [startDateTime, endDateTime];\r\n};\r\n\r\nexport const isTimeframeCorrectlySet = (data: VisitorBookingNewBookingBulkDetails) => {\r\n const isHourlyRateProduct = data.productType === ProductType.HourlyRate;\r\n const startDate = data.startDate;\r\n const endDate = data.endDate;\r\n const startTime = data.startTime;\r\n const endTime = data.endTime;\r\n\r\n const isFixedRateTimeProperlySelected =\r\n !isHourlyRateProduct && !isEmpty(startDate) && !isNull(startDate);\r\n const isHourlyRateTimeProperlySelected =\r\n isHourlyRateProduct &&\r\n !isEmpty(startDate) &&\r\n !isNull(startDate) &&\r\n !isEmpty(endDate) &&\r\n !isNull(endDate) &&\r\n !isEmpty(startTime) &&\r\n !isNull(startTime) &&\r\n !isEmpty(endTime) &&\r\n !isNull(endTime);\r\n\r\n return isHourlyRateTimeProperlySelected || isFixedRateTimeProperlySelected;\r\n};\r\n\r\nexport const isParkingLocationSet = (physicalZone?: string) =>\r\n !isNull(physicalZone) &&\r\n !isEmpty(physicalZone);\r\n\r\nexport const performOnChange = (data: VisitorBookingNewBookingBulkDetails) =>\r\n !isNull(data.productId) &&\r\n !isEmpty(data.productId) &&\r\n isParkingLocationSet(data.physicalZone);","import * as React from \"react\";\r\nimport { Dialog, DialogContent, Grid } from \"@material-ui/core\";\r\nimport WarningColumn from \"../../../../../../../../../ui/CenteredWarning/CenteredWarning\";\r\nimport CustomButton from \"../../../../../../../../../ui/CustomButton/CustomButton\";\r\nimport styled from \"styled-components\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport \"../../../../../../../../../ui/Icons/_visitorBookingCreation.scss\";\r\nimport WarningFleetOrange from \"../../../../../../../../../assets/images/warning-fleet-orange.svg\";\r\n\r\nexport interface VisitorBookingModalDialog {\r\n open: boolean;\r\n onAccept: () => void;\r\n onDismiss: () => void;\r\n}\r\n\r\nconst WarningRow = styled(Grid)`\r\n padding: 0;\r\n position: relative;\r\n`;\r\n\r\nexport default function ModalDialog(props: Readonly) {\r\n const { open, onAccept, onDismiss } = props;\r\n const { t } = useTranslation(\"globals\");\r\n\r\n // Pre-load the image to avoid showing the popup without the image\r\n new Image().src = WarningFleetOrange;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n );\r\n}\r\n","import React, { Dispatch, memo, useCallback, useEffect, useRef, useState } from \"react\";\r\nimport { visitorBookingActions } from \"../../../../store/actions/visitor-booking\";\r\nimport { connect } from \"react-redux\";\r\nimport { Container, Grid } from \"@material-ui/core\";\r\nimport ActionFooter from \"../../../../components/ActionFooter/ActionFooter\";\r\nimport CustomButton from \"../../../../ui/CustomButton/CustomButton\";\r\nimport { useHistory } from \"react-router\";\r\nimport routes from \"../../../../router/routes\";\r\nimport { isUndefined, isEmpty, findWhere, isNull, isEqual } from \"underscore\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { ArrowBackIosRounded } from \"@material-ui/icons\";\r\nimport { useNewBookingBulkStepOneFormik } from \"./hooks/useNewBookingFormik\";\r\nimport useAppContext from \"../../../../context/hooks/useAppContext\";\r\nimport { ParkingLocation } from \"./features/parking-location\";\r\nimport Spacer from \"../../../../ui/Spacer/Spacer\";\r\nimport { RootReducer } from \"../../../../store/reducers\";\r\nimport \"./_newBooking.scss\";\r\nimport ProductTimeframeBulk from \"./features/product-timeframe/components/ui/ProductTimeframeBulk\";\r\nimport { Fields } from \"./NewBooking.types\";\r\nimport VisitorDetailsList, {\r\n VisitorDetailsListHandle,\r\n} from \"./features/visitor-details/components/ui/VisitorDetails/VisitorDetailsList\";\r\nimport { VisitorBookingNewBookingBulkRequest } from \"./models/VisitorBookingNewBookingBulk\";\r\nimport {\r\n mapToCreateVisitorBookingsBulkRequest,\r\n mapToCreateVisitorBookingsRequest,\r\n} from \"./mappers/visitorBookings.mapper\";\r\nimport VisitorDetailsHeader, {\r\n VisitorDetailHeaderTab,\r\n} from \"./features/visitor-details/components/ui/VisitorDetailsHeader/VisitorDetailsHeader\";\r\nimport { fileActions } from \"../../../../store/actions/file.actions\";\r\nimport { VisitorDetailModel } from \"../../../../models/visitor-booking/VisitorDetailModel\";\r\nimport VisitorBulkUpload, {\r\n VisitorBulkUploadHandle,\r\n} from \"./features/visitor-details/components/ui/VisitorBulkUpload\";\r\nimport StickySidebar from \"./features/visitor-details/components/ui/StickySidebar/StickySidebar\";\r\nimport { GetFacilityImagesRequest } from \"../../../../models/visitor-booking/GetFacilityImagesRequest\";\r\nimport {\r\n getParametersForGetProductSalesAvailability,\r\n isParkingLocationSet,\r\n isTimeframeCorrectlySet,\r\n performOnChange,\r\n} from \"../../../../helpers/capacityHelper\";\r\nimport ModalDialog from \"../NewBooking/features/visitor-details/components/ui/VisitorDetails/VisitorBookingModalDialog\";\r\nimport VisitorBookingErrorMessage from \"./features/visitor-details/components/ui/VisitorDetails/VisitorBookingErrorMessage\";\r\nimport { prebookingProductsService } from \"../../../../services/prebookingProducts.service\";\r\nimport { AxiosResponse } from \"axios\";\r\nimport { ProductsSalesAvailability } from \"../../../../models/visitor-booking/ProductsSalesAvailability\";\r\nimport { failure, request, success } from \"../../../../store/helpers/action.helper\";\r\nimport { visitorBookingTypes } from \"../../../../store/action-types\";\r\nimport { loaderActions } from \"../../../../store/actions/loader.actions\";\r\n\r\nconst NewBookingBulk = memo((props: NewBookingProps) => {\r\n const { push } = useHistory();\r\n\r\n const {\r\n productConfigurations,\r\n parkingLocations,\r\n loading,\r\n fileUploaded,\r\n productSalesAvailability,\r\n facilityImages,\r\n getParkingLocations,\r\n createVisitorBookings,\r\n visitorBookingValidationLoading,\r\n getProductSalesAvailability,\r\n getParkingFacilityImages,\r\n cancelFileUpload,\r\n startSalesAvailabilityCheck,\r\n updateSalesAvailabilityState,\r\n salesAvailabilityCheckError,\r\n salesAvailabilityCheckRemoveLoader\r\n } = props;\r\n const { t } = useTranslation([\"globals\", \"visitors\"]);\r\n const {\r\n appState: { user, selectedLanguage },\r\n } = useAppContext();\r\n\r\n const [isOnStepTwo, setIsOnStepTwo] = useState(false);\r\n const [hasConfiguredCountry, setHasConfiguredCountry] = useState(false);\r\n const [visitorDetails, setVisitorDetails] = useState(undefined);\r\n const [isDirty, setIsDirty] = useState(false);\r\n const [currentTab, setCurrentTab] = useState(\"manual\");\r\n const [imagesRequests, setImagesRequests] = useState(\r\n undefined\r\n );\r\n const [showSidebar, setShowSidebar] = useState(false);\r\n const [isModalDialogOpen, setIsModalDialogOpen] = useState(false);\r\n const [onModalDialogAccept, setOnModalDialogAccept] = useState<() => void>(() => () => {\r\n setIsModalDialogOpen(false);\r\n });\r\n const [numberOfVisitorDetails, setNumberOfVisitorDetails] = useState(0);\r\n const [numberOfVisitorDetailsUploadedFromFile, setNumberOfVisitorDetailsUploadedFromFile] = useState(0);\r\n const [hasTooManyVisitorsUploadedFromFile, setHasTooManyVisitorsUploadedFromFile] = useState(false);\r\n\r\n useEffect(() => {\r\n if (isUndefined(parkingLocations.data) || isNull(parkingLocations.data)) {\r\n return;\r\n }\r\n\r\n const country = findWhere(parkingLocations.data, {\r\n countryCode: user.country?.toLowerCase(),\r\n });\r\n\r\n setHasConfiguredCountry((s) => (s = !isUndefined(country)));\r\n\r\n const requests = parkingLocations.data.map(\r\n (x) =>\r\n ({\r\n countryCode: x.countryCode,\r\n physicalZoneUids: Array.from(\r\n new Set(x.cities?.flatMap((y) => y.physicalZones).map((y) => y.physicalZoneId.split('.')[1]))\r\n ),\r\n } as GetFacilityImagesRequest)\r\n );\r\n\r\n if (requests.length > 0 && !isEqual(imagesRequests, requests)) {\r\n getParkingFacilityImages(requests);\r\n setImagesRequests(requests);\r\n }\r\n\r\n return () => { };\r\n }, [parkingLocations.data, user.country]);\r\n\r\n const handleOnTabsSwitch = (requestedTab: VisitorDetailHeaderTab) => {\r\n setVisitorDetails(undefined);\r\n setCurrentTab(requestedTab);\r\n setIsDirty(false);\r\n setHasTooManyVisitorsUploadedFromFile(false);\r\n };\r\n\r\n const requestParkingLocations = useCallback(() => {\r\n const uniquePhysicalZonesUids = Array.from(\r\n new Set(productConfigurations.data?.flatMap((p) => p.allowedPhysicalZoneIds))\r\n );\r\n if (uniquePhysicalZonesUids.length > 0) {\r\n getParkingLocations(uniquePhysicalZonesUids);\r\n }\r\n }, [productConfigurations.data]);\r\n\r\n useEffect(() => requestParkingLocations(), [requestParkingLocations]);\r\n\r\n const redirectToBookingOverview = () => {\r\n if (isUndefined(routes.visitors.subRoutes)) {\r\n return;\r\n }\r\n\r\n push(routes.visitors.subRoutes[0].path as string);\r\n };\r\n\r\n const { formikStepOne } = useNewBookingBulkStepOneFormik({\r\n t,\r\n onSubmit: (_) => {\r\n setIsOnStepTwo(true);\r\n },\r\n numberPlateCountryCode: user.country,\r\n countryCode: hasConfiguredCountry ? user.country : \"\",\r\n receptionistCountryCode: user.country,\r\n });\r\n\r\n useEffect(() => {\r\n const values = formikStepOne.values;\r\n\r\n if (performOnChange(values)) {\r\n if (values.physicalZone && isTimeframeCorrectlySet(values)) {\r\n const [startDateTime, endDateTime] = getParametersForGetProductSalesAvailability(\r\n values\r\n );\r\n\r\n getProductSalesAvailability(\r\n values.physicalZone,\r\n startDateTime,\r\n endDateTime,\r\n user.seasonTicketOwnerCrmId?.toString() ?? \"\",\r\n values.productId?.toString()\r\n );\r\n\r\n setShowSidebar(true);\r\n } else {\r\n setShowSidebar(false);\r\n }\r\n }\r\n\r\n if (!isParkingLocationSet(values.physicalZone)) {\r\n setShowSidebar(false);\r\n }\r\n }, [\r\n formikStepOne.values.startDate,\r\n formikStepOne.values.endDate,\r\n formikStepOne.values.startTime,\r\n formikStepOne.values.endTime,\r\n formikStepOne.values.country,\r\n formikStepOne.values.city,\r\n formikStepOne.values.physicalZone,\r\n isOnStepTwo\r\n ]);\r\n\r\n const onParkingLocationChange = (field: string, e: React.ChangeEvent) => {\r\n if (!isUndefined(formikStepOne.errors[field as keyof typeof formikStepOne.errors])) {\r\n formikStepOne.setFieldError(field, undefined);\r\n }\r\n\r\n if (e?.target) {\r\n formikStepOne.handleChange(e);\r\n }\r\n };\r\n\r\n const visitorListRef = useRef(null);\r\n const visitorDragAndDropRef = useRef(null);\r\n\r\n let isSubmitting = loading;\r\n\r\n const handleSubmit = async () => {\r\n isSubmitting = true;\r\n visitorBookingValidationLoading(true);\r\n\r\n if (!isOnStepTwo) {\r\n await handleStepOneSubmit();\r\n isSubmitting = false;\r\n visitorBookingValidationLoading(false);\r\n } else {\r\n\r\n const [startDateTime, endDateTime] = getParametersForGetProductSalesAvailability(\r\n formikStepOne.values\r\n );\r\n\r\n startSalesAvailabilityCheck();\r\n prebookingProductsService.getProductSalesAvailability(\r\n formikStepOne.values.physicalZone,\r\n startDateTime,\r\n endDateTime,\r\n user.seasonTicketOwnerCrmId?.toString() ?? \"\",\r\n formikStepOne.values.productId?.toString()\r\n ).then(async (response: AxiosResponse) => {\r\n updateSalesAvailabilityState(response.data)\r\n if (response.data?.salesAvailability !== undefined && response.data?.salesAvailability !== 0) {\r\n const isThereAnErrorInManualInput = numberOfVisitorDetails > response.data?.salesAvailability;\r\n const isThereAnErrorInFileUpload = currentTab === \"file\" && (numberOfVisitorDetailsUploadedFromFile > response.data?.salesAvailability || !fileUploaded);\r\n \r\n if (isThereAnErrorInManualInput || isThereAnErrorInFileUpload) {\r\n window.scrollTo({\r\n top: 0,\r\n behavior: \"smooth\",\r\n });\r\n }\r\n else if (currentTab === \"manual\") {\r\n await handleStepTwoSubmit();\r\n } else {\r\n await handleStepTwoFileUploadSubmit();\r\n }\r\n }\r\n isSubmitting = false;\r\n visitorBookingValidationLoading(false);\r\n })\r\n .catch(() => salesAvailabilityCheckError())\r\n .finally(() => salesAvailabilityCheckRemoveLoader());\r\n }\r\n };\r\n\r\n const handleStepOneSubmit = async () => {\r\n const errors = await formikStepOne.validateForm();\r\n if (isEmpty(errors)) {\r\n formikStepOne.handleSubmit();\r\n } else {\r\n // Jump to the first error\r\n const elements = document.getElementsByClassName(\"Mui-error text-red\");\r\n if (elements && elements.length > 0) {\r\n const dims = elements[0].getBoundingClientRect();\r\n window.scrollTo({\r\n left: window.scrollX,\r\n top: dims.top - 135 + window.scrollY,\r\n behavior: \"smooth\",\r\n });\r\n }\r\n }\r\n };\r\n\r\n const handleStepTwoSubmit = async () => {\r\n const res = await visitorListRef.current?.handleSubmit();\r\n if (res?.isValid && !isNull(res.data) && res.data.length >= 1) {\r\n createVisitorBookings(\r\n user.seasonTicketOwnerCrmId as string,\r\n selectedLanguage,\r\n mapToCreateVisitorBookingsBulkRequest(formikStepOne.values, res.data),\r\n redirectToBookingOverview\r\n );\r\n }\r\n };\r\n\r\n const handleBackToStepOne = () => {\r\n const values = visitorListRef.current?.getValues();\r\n\r\n if (isDirty) {\r\n openModalDialog(() => {\r\n setIsModalDialogOpen(false);\r\n setVisitorDetails(values);\r\n setIsOnStepTwo(false);\r\n });\r\n } else {\r\n setVisitorDetails(values);\r\n setIsOnStepTwo(false);\r\n }\r\n };\r\n\r\n const onPhysicalZoneChanged = () => {\r\n formikStepOne.setFieldValue(Fields.ProductId, undefined);\r\n };\r\n\r\n const handleStepTwoFileUploadSubmit = async () => {\r\n const dragAndDropSubmitResult = await visitorDragAndDropRef.current?.handleSubmit();\r\n if (\r\n dragAndDropSubmitResult?.isValid &&\r\n visitorDetails &&\r\n !isNull(visitorDetails) &&\r\n (!isEmpty(visitorDetails) || !isEmpty(dragAndDropSubmitResult.data))\r\n ) {\r\n createVisitorBookings(\r\n user.seasonTicketOwnerCrmId as string,\r\n selectedLanguage,\r\n mapToCreateVisitorBookingsBulkRequest(formikStepOne.values, [\r\n ...visitorDetails,\r\n ...dragAndDropSubmitResult.data,\r\n ]),\r\n redirectToBookingOverview\r\n );\r\n }\r\n };\r\n\r\n const handleOnProcessing = (isProcessing: boolean) => {\r\n if (isProcessing) {\r\n setVisitorDetails(undefined);\r\n }\r\n\r\n setIsDirty(!isProcessing);\r\n };\r\n\r\n const onFileProcessedHandler = (visitors: VisitorDetailModel[]) => {\r\n setVisitorDetails(visitors);\r\n };\r\n\r\n const handleManualIsDirty = () => {\r\n if (!isDirty) {\r\n setIsDirty(true);\r\n }\r\n };\r\n\r\n const handleCancelFileUpload = () => {\r\n cancelFileUpload();\r\n setIsDirty(false);\r\n setVisitorDetails(undefined);\r\n };\r\n\r\n const openModalDialog = (onAccept: () => void) => {\r\n setIsModalDialogOpen(true);\r\n\r\n setOnModalDialogAccept(() => () => {\r\n setIsModalDialogOpen(false);\r\n cancelFileUpload();\r\n onAccept();\r\n });\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n (!isOnStepTwo ? redirectToBookingOverview() : handleBackToStepOne())}\r\n >\r\n \r\n \r\n

{t(\"visitors:newBooking\")}

\r\n
\r\n
\r\n
\r\n \r\n \r\n {!isOnStepTwo ? (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n {(productSalesAvailability.data?.salesAvailability === 0) ?\r\n (\r\n \r\n \r\n {t(\"visitors:availableSpotsEnded\")}\r\n \r\n \r\n ) : (\r\n currentTab === \"file\" ?\r\n (\r\n \r\n ) : (\r\n \r\n )\r\n )}\r\n \r\n )}\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n {!isOnStepTwo ? (\r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n {fileUploaded ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n )}\r\n \r\n setIsModalDialogOpen(false)}\r\n open={isModalDialogOpen}\r\n />\r\n
\r\n );\r\n});\r\n\r\ninterface NewBookingProps extends StateProps, DispatchProps { }\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const {\r\n productConfigurations,\r\n parkingLocations,\r\n productSalesAvailability,\r\n facilityImages,\r\n loading,\r\n } = state.visitorBooking;\r\n\r\n const { environment, file } = state;\r\n\r\n const maxNumberOfBookingsConfig = Number(\r\n environment.dynamicConfigurations?.find(\r\n (item) => item.name === \"MaxNumberOfVisitorBookingRecords\"\r\n )?.value\r\n );\r\n\r\n const maxNumberOfBookings = Math.min(maxNumberOfBookingsConfig, productSalesAvailability.data?.salesAvailability ?? maxNumberOfBookingsConfig);\r\n const fileUploaded = file.fileUploaded;\r\n\r\n return {\r\n productConfigurations,\r\n parkingLocations,\r\n loading,\r\n fileUploaded,\r\n maxNumberOfBookings,\r\n productSalesAvailability,\r\n facilityImages,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n getParkingLocations: (uids: string[]) =>\r\n dispatch(visitorBookingActions.getParkingLocations({ physicalZoneUids: uids })),\r\n createVisitorBookings: (\r\n customerId: string,\r\n culture: string,\r\n data: VisitorBookingNewBookingBulkRequest,\r\n onSuccess?: VoidFunction\r\n ) =>\r\n dispatch(\r\n visitorBookingActions.createVisitorBookings(\r\n customerId,\r\n mapToCreateVisitorBookingsRequest(data, culture),\r\n onSuccess\r\n )\r\n ),\r\n visitorBookingValidationLoading: (loading: boolean) =>\r\n dispatch(visitorBookingActions.visitorBookingValidationLoading(loading)),\r\n cancelFileUpload: () => dispatch(fileActions.cancelFileUpload()),\r\n getProductSalesAvailability: (\r\n physicalZoneUid: string,\r\n startDate: string,\r\n endDate: string,\r\n customerId: string,\r\n productId: string\r\n ) =>\r\n dispatch(\r\n visitorBookingActions.getProductSalesAvailability(\r\n physicalZoneUid,\r\n startDate,\r\n endDate,\r\n customerId,\r\n productId\r\n )\r\n ),\r\n getParkingFacilityImages: (body: GetFacilityImagesRequest[]) =>\r\n dispatch(visitorBookingActions.getParkingFacilityImages(body)),\r\n\r\n startSalesAvailabilityCheck: () => {\r\n dispatch(loaderActions.loadTheLoader() as any);\r\n dispatch({\r\n type: request(visitorBookingTypes.GET_PRODUCT_SALES_AVAILABILITY),\r\n })\r\n },\r\n\r\n updateSalesAvailabilityState: (payload: ProductsSalesAvailability) =>\r\n dispatch({\r\n type: success(visitorBookingTypes.GET_PRODUCT_SALES_AVAILABILITY),\r\n productSalesAvailabilityPayload: payload\r\n }),\r\n\r\n salesAvailabilityCheckError: () => {\r\n dispatch({\r\n type: failure(visitorBookingTypes.GET_PRODUCT_SALES_AVAILABILITY),\r\n })\r\n },\r\n\r\n salesAvailabilityCheckRemoveLoader: () => {\r\n dispatch(loaderActions.killTheLoader() as any)\r\n }\r\n\r\n});\r\n\r\ntype StateProps = ReturnType;\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(NewBookingBulk);\r\n","import React, { memo, useEffect } from \"react\";\r\nimport NewBookingBulk from \"../../containers/Visitors/BookingOverview/NewBooking/NewBookingBulk\";\r\nimport XlsFileAdd from \"../../assets/images/xls-file-add.svg\";\r\nimport XlsFileDropping from \"../../assets/images/xls-file-dropping.svg\";\r\nimport XlsFileEmpty from \"../../assets/images/xls-file-empty.svg\";\r\nimport XlsFileChecked from \"../../assets/images/xls-file-checked.svg\";\r\n\r\nconst VisitorDetailsForm = memo(() => {\r\n\r\n // Pre-load the images\r\n const preloadSrcList: string[] = [XlsFileAdd, XlsFileDropping, XlsFileEmpty, XlsFileChecked];\r\n\r\n useEffect(() => {\r\n preloadSrcList.forEach((face) => {\r\n const img = new Image();\r\n img.src = face;\r\n });\r\n }, []);\r\n\r\n return ;\r\n});\r\n\r\nexport default VisitorDetailsForm;\r\n","import React from \"react\";\r\nimport { SvgIcon } from \"@material-ui/core\";\r\n\r\nconst BookingOverviewIcon = () => (\r\n \r\n \r\n \r\n);\r\n\r\nexport default BookingOverviewIcon;\r\n","import MyProductsIcon from \"../ui/Icons/MyProductsIcon\";\r\nimport AppRoute, { IRouteProps } from \"./AppRoute\";\r\nimport MyProductsPage from \"../pages/FleetManager/MyProductsPage\";\r\nimport MyFleetPage from \"../pages/FleetManager/MyFleetPage\";\r\nimport VehicleIcon from \"../ui/Icons/Vehicle\";\r\nimport FaqPage from \"../pages/FAQ/FaqPage\";\r\nimport BookingOverviewPage from \"../pages/Visitors/BookingOverviewPage\";\r\nimport NewBookingPage from \"../pages/Visitors/NewBookingPage\";\r\nimport BookingOverviewIcon from \"../ui/Icons/BookingOverviewIcon\";\r\n\r\ntype RoutesType = {\r\n [key: string]: IRouteProps;\r\n};\r\n\r\nconst fleetManager = new AppRoute(\"/fleet-manager\", undefined, \"fleetManager\")\r\n .addSubroute(\"my-products\", MyProductsPage, \"myProducts\", MyProductsIcon)\r\n .addSubroute(\"my-fleet\", MyFleetPage, \"myFleet\", VehicleIcon)\r\n .getRoute();\r\n\r\nconst visitors = new AppRoute(\"/visitors\", undefined, \"visitors\")\r\n .addSubroute(\r\n \"booking-overview\",\r\n BookingOverviewPage,\r\n \"bookingOverview\",\r\n BookingOverviewIcon\r\n )\r\n .addSubroute(\r\n \"booking-overview/new-booking\",\r\n NewBookingPage,\r\n \"newBooking\",\r\n undefined,\r\n true\r\n )\r\n .getRoute();\r\n\r\nconst oidcCallbackRoute = new AppRoute(\r\n \"/signin-oidc\",\r\n undefined,\r\n \"oidc_signin\"\r\n).getRoute();\r\n\r\nconst faqRoute = new AppRoute(\"/faq\", FaqPage, \"faq\").getRoute();\r\n\r\nconst routes: RoutesType = {\r\n fleetManager,\r\n visitors,\r\n oidcCallbackRoute,\r\n faq: faqRoute,\r\n};\r\n\r\nexport const appRoutesArray: IRouteProps[] = Object.keys(routes).map(\r\n (key) => routes[key]\r\n);\r\n\r\nexport default routes;\r\n","import React, { useState } from \"react\";\r\nimport QParkLogo from \"../../assets/images/logo.png\";\r\nimport LanguageSelector from \"../../components/LanguageSelector/LanguageSelector\";\r\nimport { AppBar, Toolbar, Button, TextField, Divider } from \"@material-ui/core\";\r\nimport NavLinkItem from \"../NavLinkItem/NavLinkItem\";\r\nimport { Translation } from \"react-i18next\";\r\nimport { Menu, Close } from \"@material-ui/icons\";\r\nimport useAppContext from \"../../context/hooks/useAppContext\";\r\nimport { RootReducer } from \"../../store/reducers\";\r\nimport { connect } from \"react-redux\";\r\nimport EnvironmentInfo from \"./EnvironmentInfo/EnvironmentInfo\";\r\nimport UserCard from \"../../components/UserCard/UserCard\";\r\nimport styled from \"styled-components\";\r\nimport routes from \"../../router/routes\";\r\nimport \"./_navigation-bar.scss\";\r\n\r\nconst StyledDivider = styled(Divider)`\r\n margin: 0.5rem 0;\r\n max-height: 30px;\r\n`;\r\n\r\ninterface IProps extends StateProps {\r\n onToggleSidebar: () => void;\r\n sidebarOpened: boolean;\r\n}\r\n\r\nconst NavigationBar = (props: IProps) => {\r\n const { onToggleSidebar, sidebarOpened, environment } = props;\r\n const { appState, setAppUser } = useAppContext();\r\n\r\n const [crmId, setCrmId] = useState(appState.user.seasonTicketOwnerCrmId);\r\n\r\n const onCrmIdInputBlur = () =>\r\n setAppUser({\r\n seasonTicketOwnerCrmId: crmId,\r\n });\r\n\r\n return (\r\n \r\n {(t: Function) => (\r\n \r\n \r\n
\r\n \"QPark\r\n
\r\n
\r\n \r\n {t(\"fleetManager\")}\r\n \r\n \r\n {t(\"visitors\")}\r\n \r\n \r\n {t(\"faq\")}\r\n \r\n {environment.allowImpersonation && (\r\n setCrmId(e.target.value)}\r\n onBlur={onCrmIdInputBlur}\r\n />\r\n )}\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {sidebarOpened ? : }\r\n \r\n
\r\n
\r\n
\r\n )}\r\n
\r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { environment } = state;\r\n\r\n return {\r\n environment,\r\n };\r\n};\r\n\r\ntype StateProps = ReturnType;\r\n\r\nexport default connect(mapStateToProps)(NavigationBar);","import React from \"react\";\r\nimport { useLocation } from \"react-router\";\r\nimport routes from \"../../../router/routes\";\r\nimport { isEmpty, isNull, isUndefined } from \"underscore\";\r\nimport { ListItem, ListItemIcon, ListItemText } from \"@material-ui/core\";\r\nimport { NavLink } from \"react-router-dom\";\r\nimport { Translation } from \"react-i18next\";\r\nimport { IRouteProps } from \"../../../router/AppRoute\";\r\n\r\nconst FleetManagerSidebar = () => {\r\n const { pathname } = useLocation();\r\n let subRoutes: IRouteProps[] | undefined = [];\r\n\r\n const isFleetPage = pathname.includes(routes.fleetManager.path as string);\r\n const fleetHasSubroutes = !isUndefined(routes.fleetManager.subRoutes);\r\n if (isFleetPage && fleetHasSubroutes) {\r\n subRoutes = routes.fleetManager.subRoutes;\r\n }\r\n\r\n const isVisitorsPage = pathname.includes(routes.visitors.path as string);\r\n const visitorsHasSubroutes = !isUndefined(routes.visitors.subRoutes);\r\n if (isVisitorsPage && visitorsHasSubroutes) {\r\n subRoutes = routes.visitors.subRoutes;\r\n }\r\n\r\n if (isEmpty(subRoutes) || isUndefined(subRoutes)) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {(t: Function) => (\r\n \r\n {subRoutes?.map((route: IRouteProps, index: number) => {\r\n if (route.hidden) {\r\n return false;\r\n }\r\n\r\n return (\r\n \r\n {!isNull(route.Icon) && !isUndefined(route.Icon) && (\r\n \r\n \r\n \r\n )}\r\n\r\n \r\n \r\n );\r\n })}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default FleetManagerSidebar;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { Drawer, List } from \"@material-ui/core\";\r\nimport FleetManagerSidebar from \"./FleetManagerSidebar/FleetManagerSidebar\";\r\nimport \"./_sidebar.scss\";\r\n\r\ninterface IProps {\r\n openSidebar: boolean;\r\n onCloseSidebar: () => void;\r\n}\r\n\r\nconst SideBar = ({ openSidebar, onCloseSidebar }: IProps) => {\r\n const [width, setWidth] = useState(window.innerWidth);\r\n const [mobile, setMobile] = useState(false);\r\n\r\n useEffect(() => {\r\n if (width < 600) {\r\n setMobile(true);\r\n } else {\r\n setMobile(false);\r\n }\r\n }, [width]);\r\n\r\n useEffect(() => {\r\n window.onresize = () => {\r\n setWidth(window.innerWidth);\r\n };\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default SideBar;\r\n","import React, { useState } from \"react\";\r\nimport NavigationBar from \"../../NavigationBar/NavigationBar\";\r\nimport SideBar from \"../../SideBar/SideBar\";\r\nimport { Container } from \"@material-ui/core\";\r\nimport \"./_flex-layout.scss\";\r\n\r\ninterface IProps {\r\n children: React.ReactNode;\r\n}\r\n\r\nconst FlexLayout = ({ children }: IProps) => {\r\n const [openSidebar, setShowSidebar] = useState(false);\r\n\r\n const toggleSidebar = () => setShowSidebar((s) => (s = !s));\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n <>{children}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default FlexLayout;\r\n","import React from \"react\";\r\nimport AppLoader from \"../../components/AppLoader/AppLoader\";\r\nimport FlexLayout from \"./Flex-Layout/Flex-Layout\";\r\n\r\ninterface IProps {\r\n children: React.ReactNode;\r\n}\r\n\r\nconst Layout = ({ children }: IProps) => (\r\n \r\n \r\n {children}\r\n \r\n);\r\n\r\nexport default Layout;\r\n","import React, { Dispatch, useEffect } from \"react\";\r\nimport { Snackbar } from \"@material-ui/core\";\r\nimport MuiAlert from \"@material-ui/lab/Alert\";\r\nimport { RootReducer } from \"../../store/reducers\";\r\nimport { AnyAction } from \"redux\";\r\nimport { toastActions } from \"../../store/actions/toast.actions\";\r\nimport { connect } from \"react-redux\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { isEmpty, isNull, isUndefined } from \"underscore\";\r\nimport { stringUtils } from \"../../utils\";\r\nimport \"./_toast-alert.scss\";\r\n\r\nconst { format } = stringUtils;\r\n\r\nexport type ToastType = \"success\" | \"error\" | \"warning\" | \"info\";\r\n\r\nconst toastSeverity = {\r\n success: \"success\",\r\n error: \"error\",\r\n warning: \"warning\",\r\n info: \"info\",\r\n};\r\n\r\ninterface ICustomToastProps extends StateProps, DispatchProps {}\r\n\r\nconst CustomToast = ({ toast, dispose }: ICustomToastProps) => {\r\n const { t } = useTranslation([\"globals\", \"toast\"]);\r\n\r\n useEffect(() => {\r\n let taskId: number;\r\n\r\n if (toast.show) {\r\n taskId = setTimeout(() => dispose(), 5000);\r\n }\r\n\r\n return () => clearTimeout(taskId);\r\n });\r\n\r\n const getTitle = (fallbackKey: string) => {\r\n const hasCustomTitle = !isNull(toast.title.key) && !isEmpty(toast.title.key);\r\n if (!hasCustomTitle) {\r\n return t(fallbackKey);\r\n }\r\n\r\n if (isEmpty(toast.title.formatArgs)) {\r\n return t(`toast:${toast.title.key}`, toast.title.options);\r\n }\r\n\r\n return format(\r\n t(`toast:${toast.title.key}`, toast.title.options),\r\n toast.title.formatArgs\r\n );\r\n };\r\n\r\n const getToastTitle = () => {\r\n switch (toast.severity) {\r\n case toastSeverity.success:\r\n return getTitle(\"success\");\r\n case toastSeverity.error:\r\n return getTitle(\"error\");\r\n case toastSeverity.warning:\r\n return getTitle(\"warning\");\r\n case toastSeverity.info:\r\n return getTitle(\"info\");\r\n default:\r\n return \"\";\r\n }\r\n };\r\n\r\n const getToastMessage = () => {\r\n if (toast.content.key == null || isEmpty(toast.content.key)) {\r\n return \"\";\r\n }\r\n\r\n if (isEmpty(toast.content.formatArgs)) {\r\n return t(`toast:${toast.content.key}`, toast.content.options);\r\n }\r\n\r\n return format(\r\n t(`toast:${toast.content.key}`, toast.content.options),\r\n toast.content.formatArgs\r\n );\r\n };\r\n\r\n return (\r\n \r\n \r\n
\r\n {getToastTitle()}\r\n {getToastMessage()}\r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { toast } = state;\r\n\r\n return {\r\n toast,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n dispose: () => dispatch(toastActions.dispose() as any),\r\n});\r\n\r\ntype StateProps = ReturnType;\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(CustomToast);\r\n","import React from \"react\";\r\nimport { Route } from \"react-router\";\r\nimport { appRoutesArray } from \"./routes\";\r\nimport { IRouteProps } from \"./AppRoute\";\r\nimport { RootReducer } from \"../store/reducers\";\r\nimport { connect } from \"react-redux\";\r\n\r\ninterface IAppRoutesProps extends StateProps {}\r\n\r\nconst FmpAppRoutes = ({ environment }: IAppRoutesProps) => (\r\n <>\r\n {appRoutesArray.map((route: IRouteProps, index: number) => {\r\n return (\r\n \r\n \r\n {route.subRoutes?.length! > 0 &&\r\n route.subRoutes?.map((subroute: IRouteProps, sIndex: number) => (\r\n \r\n ))}\r\n \r\n );\r\n })}\r\n \r\n);\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { environment } = state;\r\n\r\n return {\r\n environment,\r\n };\r\n};\r\n\r\ntype StateProps = ReturnType;\r\n\r\nexport default connect(mapStateToProps)(FmpAppRoutes);\r\n","import React from \"react\";\r\nimport { Grid } from \"@material-ui/core\";\r\nimport styled from \"styled-components\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport CustomButton from \"../../ui/CustomButton/CustomButton\";\r\nimport { useHistory } from \"react-router\";\r\nimport Spacer from \"../../ui/Spacer/Spacer\";\r\nimport WarningColumn from \"../../ui/CenteredWarning/CenteredWarning\";\r\n\r\nconst FullHeightRow = styled(Grid)`\r\n height: 100vh;\r\n padding: 0;\r\n`;\r\n\r\nconst GeneralException = () => {\r\n const { t } = useTranslation(\"generalException\");\r\n const history = useHistory();\r\n\r\n const goToIndex = () => history.push(\"/\");\r\n\r\n const returnHomeButton = () => (\r\n \r\n \r\n \r\n \r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default GeneralException;\r\n","import React from \"react\";\r\nimport GeneralException from \"./components/Error/GeneralException\";\r\n\r\ninterface IState {\r\n hasError: Boolean;\r\n}\r\n\r\nexport default class ErrorBoundary extends React.Component {\r\n constructor(props: any) {\r\n super(props);\r\n this.state = { hasError: false };\r\n }\r\n\r\n static getDerivedStateFromError(error: any) {\r\n return { hasError: true };\r\n }\r\n\r\n componentDidCatch(error: any, errorInfo: any) {}\r\n\r\n render() {\r\n if (this.state.hasError) {\r\n return ;\r\n }\r\n\r\n return this.props.children;\r\n }\r\n}\r\n","const baseUrl = \"/api/environment\";\r\n\r\ntype EnvironmentApiType = {\r\n getEnvironmentUrl: () => string;\r\n getVersionUrl: () => string;\r\n getPortalStatusUrl: () => string;\r\n getFeatureFlagsAndDynamicConfigurationUrl: (loggedInCrmId: string) => string;\r\n getAllowImpersonationUrl: (loggedInCrmId: string) => string;\r\n};\r\n\r\nconst getEnvironmentUrl = () => `${baseUrl}/getenvironment`;\r\n\r\nconst getVersionUrl = () => `${baseUrl}/getversion`;\r\n\r\nconst getPortalStatusUrl = () => `${baseUrl}/getportalstatus`;\r\n\r\n// General feature flag and configuration call, do not clean this up when removing the FF\r\nconst getFeatureFlagsAndDynamicConfigurationUrl = (loggedInCrmId: string) => `${baseUrl}/GetFeatureFlagsAndDynamicConfiguration/${loggedInCrmId}`;\r\n\r\nconst getAllowImpersonationUrl = (loggedInCrmId: string) =>\r\n `${baseUrl}/getallowimpersonation/${loggedInCrmId}`;\r\n\r\nexport default {\r\n getEnvironmentUrl,\r\n getVersionUrl,\r\n getPortalStatusUrl,\r\n getFeatureFlagsAndDynamicConfigurationUrl,\r\n getAllowImpersonationUrl,\r\n} as EnvironmentApiType;\r\n","import axios from \"../axios\";\r\nimport environmentApi from \"../api/environment.api\";\r\nimport { AxiosResponse } from \"axios\";\r\nimport { FeatureFlagsAndDynamicConfiguration } from \"../types/FeatureFlagsAndDynamicConfiguration\";\r\n\r\ntype EnvironmentService = {\r\n getEnvironment: () => Promise>;\r\n getVersion: () => Promise>;\r\n getPortalStatus: () => Promise>;\r\n getFeatureFlagsAndDynamicConfiguration: (\r\n loggedInCrmId: string\r\n ) => Promise>;\r\n getAllowImpersonation: (\r\n loggedInCrmId: string\r\n ) => Promise>;\r\n};\r\n\r\nconst getEnvironment = (): Promise> =>\r\n axios.get(environmentApi.getEnvironmentUrl());\r\n\r\nconst getVersion = (): Promise> =>\r\n axios.get(environmentApi.getVersionUrl());\r\n\r\nconst getPortalStatus = (): Promise> =>\r\n axios.get(environmentApi.getPortalStatusUrl());\r\n\r\nconst getFeatureFlagsAndDynamicConfiguration = (loggedInCrmId: string): Promise> =>\r\n axios.get(environmentApi.getFeatureFlagsAndDynamicConfigurationUrl(loggedInCrmId));\r\n\r\nconst getAllowImpersonation = (\r\n loggedInCrmId: string\r\n): Promise> =>\r\n axios.get(environmentApi.getAllowImpersonationUrl(loggedInCrmId));\r\n\r\nexport default {\r\n getEnvironment,\r\n getVersion,\r\n getPortalStatus,\r\n getFeatureFlagsAndDynamicConfiguration,\r\n getAllowImpersonation,\r\n} as EnvironmentService;\r\n","import { success } from \"../helpers/action.helper\";\r\nimport { environmentTypes } from \"../action-types/environment.types\";\r\nimport environmentService from \"../../services/environment.service\";\r\nimport { Dispatch } from \"react\";\r\nimport { AxiosResponse } from \"axios\";\r\nimport { isUndefined } from \"underscore\";\r\nimport { FeatureFlagsAndDynamicConfiguration } from \"../../types/FeatureFlagsAndDynamicConfiguration\";\r\n\r\nexport type EnvironmentDispatchType = {\r\n getEnvironment: () => void;\r\n getVersion: () => void;\r\n getPortalStatus: (callback?: () => void) => void;\r\n getFeatureFlagsAndDynamicConfigurations: (loggedInCrmId: string) => void;\r\n getAllowImpersonation: (loggedInCrmId: string) => void;\r\n};\r\n\r\nexport type EnvironmentActionType = {\r\n type: string;\r\n payload?: string | boolean | FeatureFlagsAndDynamicConfiguration;\r\n};\r\n\r\nconst getEnvironment = () => {\r\n return (dispatch: Dispatch) => {\r\n environmentService\r\n .getEnvironment()\r\n .then((response: AxiosResponse) => {\r\n dispatch({\r\n type: success(environmentTypes.GET_ENVIRONMENT),\r\n payload: response.data!,\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst getVersion = () => {\r\n return (dispatch: Dispatch) => {\r\n environmentService.getVersion().then((response: AxiosResponse) => {\r\n dispatch({\r\n type: success(environmentTypes.GET_VERSION),\r\n payload: response.data!,\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst getPortalStatus = (callback?: () => void) => {\r\n return (dispatch: Dispatch) => {\r\n environmentService\r\n .getPortalStatus()\r\n .then((response: AxiosResponse) => {\r\n dispatch({\r\n type: success(environmentTypes.GET_PORTAL_STATUS),\r\n payload: response.data as boolean,\r\n });\r\n\r\n if (!isUndefined(callback)) {\r\n callback();\r\n }\r\n });\r\n };\r\n};\r\n\r\nconst getFeatureFlagsAndDynamicConfigurations = (loggedInCrmId: string) => {\r\n return (dispatch: Dispatch) => {\r\n environmentService\r\n .getFeatureFlagsAndDynamicConfiguration(loggedInCrmId)\r\n .then((response: AxiosResponse) => {\r\n dispatch({\r\n type: success(environmentTypes.GET_FEATURE_FLAGS_AND_DYNAMIC_CONFIGURATIONS),\r\n payload: response.data as FeatureFlagsAndDynamicConfiguration,\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst getAllowImpersonation = (loggedInCrmId: string) => {\r\n return (dispatch: Dispatch) => {\r\n environmentService\r\n .getAllowImpersonation(loggedInCrmId)\r\n .then((response: AxiosResponse) => {\r\n dispatch({\r\n type: success(environmentTypes.GET_ALLOW_IMPERSONATION),\r\n payload: response.data!,\r\n });\r\n });\r\n };\r\n};\r\n\r\nexport default {\r\n getEnvironment,\r\n getVersion,\r\n getPortalStatus,\r\n getFeatureFlagsAndDynamicConfigurations,\r\n getAllowImpersonation,\r\n} as EnvironmentDispatchType;\r\n","const baseUrl = \"/api/oidc\";\r\n\r\ntype OidcApiType = {\r\n getConfigurationUrl: () => string;\r\n};\r\n\r\nconst getConfigurationUrl = () => `${baseUrl}/getconfiguration`;\r\n\r\nexport default {\r\n getConfigurationUrl,\r\n} as OidcApiType;\r\n","import axios from \"../axios\";\r\nimport { AxiosResponse } from \"axios\";\r\nimport { OidcConfigurationResponseModel } from \"../models/OidcConfigurationResponseModel\";\r\nimport oidcApi from \"../api/oidc.api\";\r\n\r\ntype OidcService = {\r\n getConfiguration: () => Promise>;\r\n};\r\n\r\nconst getConfiguration = (): Promise> =>\r\n axios.get(oidcApi.getConfigurationUrl());\r\n\r\nexport default {\r\n getConfiguration,\r\n} as OidcService;\r\n","import { AxiosResponse } from \"axios\";\r\nimport { Dispatch } from \"react\";\r\nimport { isUndefined } from \"underscore\";\r\nimport { OidcConfigurationResponseModel } from \"../../models/OidcConfigurationResponseModel\";\r\nimport oidcService from \"../../services/oidc.service\";\r\nimport { oidcTypes } from \"../action-types/oidc.types\";\r\nimport { success } from \"../helpers/action.helper\";\r\n\r\nexport type OidcDispatchType = {\r\n getConfiguration: (callback?: Function) => void;\r\n};\r\n\r\nexport type OidcActionType = {\r\n type: string;\r\n payload: OidcConfigurationResponseModel;\r\n};\r\n\r\nconst getConfiguration = (callback?: Function) => {\r\n return (dispatch: Dispatch) => {\r\n oidcService\r\n .getConfiguration()\r\n .then((response: AxiosResponse) => {\r\n dispatch({\r\n type: success(oidcTypes.GET_CONFIGURATION),\r\n payload: response.data,\r\n });\r\n\r\n if (!isUndefined(callback)) {\r\n callback();\r\n }\r\n });\r\n };\r\n};\r\n\r\nexport default {\r\n getConfiguration,\r\n} as OidcDispatchType;\r\n","const baseUrl = \"/api/ai\";\r\n\r\ntype AiApiType = {\r\n getConnectionStringUrl: () => string;\r\n};\r\n\r\nconst getConnectionStringUrl = () => `${baseUrl}/getConnectionString`;\r\n\r\nexport default {\r\n getConnectionStringUrl,\r\n} as AiApiType;\r\n","import axios from \"../axios\";\r\nimport { AxiosResponse } from \"axios\";\r\nimport aiApi from \"../api/ai.api\";\r\n\r\ntype AiService = {\r\n getConnectionString: () => Promise>;\r\n};\r\n\r\nconst getConnectionString = (): Promise> =>\r\n axios.get(aiApi.getConnectionStringUrl());\r\n\r\nexport default {\r\n getConnectionString,\r\n} as AiService;\r\n","import { AxiosResponse } from \"axios\";\r\nimport { Dispatch } from \"react\";\r\nimport { isUndefined } from \"underscore\";\r\nimport { success } from \"../helpers/action.helper\";\r\nimport { aiTypes } from \"../action-types/ai.types\";\r\nimport aiService from \"../../services/ai.service\";\r\n\r\nexport type AiDispatchType = {\r\n getConnectionString: (callback?: Function) => void;\r\n};\r\n\r\nexport type AiActionType = {\r\n type: string;\r\n payload: string;\r\n};\r\n\r\nconst getConnectionString = (callback?: Function) => {\r\n return (dispatch: Dispatch) => {\r\n aiService\r\n .getConnectionString()\r\n .then((response: AxiosResponse) => {\r\n dispatch({\r\n type: success(aiTypes.GET_CONNECTIONSTRING),\r\n payload: response.data,\r\n });\r\n\r\n if (!isUndefined(callback)) {\r\n callback();\r\n }\r\n });\r\n };\r\n};\r\n\r\nexport default {\r\n getConnectionString,\r\n} as AiDispatchType;\r\n","import React, { useEffect, Dispatch } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport store from \"./store\";\r\nimport { RootReducer } from \"./store/reducers\";\r\nimport getUserManager from \"./utils/userManager\";\r\nimport { OidcProvider } from \"redux-oidc\";\r\nimport { isEmpty, isUndefined } from \"underscore\";\r\nimport IChildren from \"./interfaces/IChildren\";\r\nimport useAppContext from \"./context/hooks/useAppContext\";\r\nimport storageService from \"./services/storage.service\";\r\nimport { useHistory, useLocation } from \"react-router\";\r\nimport { User } from \"oidc-client\";\r\nimport environmentActions from \"./store/actions/environment.actions\";\r\nimport moment from \"moment-timezone\";\r\n\r\ninterface IProps extends IChildren, StateProps, DispatchProps {}\r\n\r\nconst CustomOidcProvider = ({\r\n children,\r\n oidcConfig,\r\n getAllowImpersonation,\r\n getFeatureFlagsAndDynamicConfigurations,\r\n}: IProps) => {\r\n const { setAppUser, appState } = useAppContext();\r\n const history = useHistory();\r\n const location = useLocation();\r\n\r\n const isCallbackPage = history.location.pathname === \"/signin-oidc\";\r\n\r\n const setUser = (user: User) => {\r\n setAppUser({\r\n seasonTicketOwnerCrmId: user.profile.crmid,\r\n email: user.profile.email as string,\r\n country: user.profile.country as string,\r\n });\r\n storageService.setTokenToStorage(user.access_token);\r\n getAllowImpersonation(user.profile.crmid);\r\n getFeatureFlagsAndDynamicConfigurations(user.profile.crmid);\r\n };\r\n\r\n const setTimezone = (user: User) => {\r\n const zones = moment.tz.zonesForCountry(user.profile.country);\r\n if (zones && zones.length > 0) {\r\n moment.tz.setDefault(zones[0]);\r\n }\r\n };\r\n \r\n useEffect(() => {\r\n if (appState.user.seasonTicketOwnerCrmId) {\r\n getFeatureFlagsAndDynamicConfigurations(appState.user.seasonTicketOwnerCrmId);\r\n }\r\n }, [appState.user.seasonTicketOwnerCrmId]);\r\n\r\n useEffect(() => {\r\n const userManager = getUserManager(oidcConfig.oidcConfig);\r\n\r\n if (isCallbackPage) {\r\n userManager\r\n .signinRedirectCallback()\r\n .then((user) => {\r\n setUser(user);\r\n setTimezone(user);\r\n\r\n history.push(\"/\");\r\n })\r\n .catch(() => userManager.signinRedirect()); //When state invalid (bookmarked login page), redirect to login to set new state\r\n } else {\r\n userManager.getUser().then((user) => {\r\n if (!user || user.expired) {\r\n userManager.signinRedirect();\r\n } else {\r\n setUser(user);\r\n setTimezone(user);\r\n }\r\n });\r\n }\r\n\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n useEffect(() => {\r\n return () => {\r\n const hasOwnerCrmId =\r\n !isUndefined(appState.user.seasonTicketOwnerCrmId) &&\r\n !isEmpty(appState.user.seasonTicketOwnerCrmId);\r\n\r\n if (!hasOwnerCrmId) {\r\n const userManager = getUserManager(oidcConfig.oidcConfig);\r\n userManager.getUser();\r\n }\r\n\r\n // Skip the \"/visitors\" pathname since it immediately goes to \"/visitors/booking-overview\"\r\n if (hasOwnerCrmId && location.pathname !== \"/visitors\") {\r\n getFeatureFlagsAndDynamicConfigurations(appState.user.seasonTicketOwnerCrmId!);\r\n }\r\n };\r\n }, [location]);\r\n\r\n const oidcConfigIsFulfilled =\r\n !isEmpty(oidcConfig.oidcConfig.serverUrl) &&\r\n !isEmpty(oidcConfig.oidcConfig.clientId) &&\r\n !isEmpty(oidcConfig.oidcConfig.clientSecret);\r\n\r\n const loadChildren = appState.user.seasonTicketOwnerCrmId !== \"\";\r\n\r\n return (\r\n \r\n {oidcConfigIsFulfilled && (\r\n \r\n {loadChildren && children}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { oidcConfig } = state;\r\n\r\n return {\r\n oidcConfig,\r\n };\r\n};\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n getAllowImpersonation: (loggedInCrmId: string) =>\r\n dispatch(environmentActions.getAllowImpersonation(loggedInCrmId)),\r\n getFeatureFlagsAndDynamicConfigurations: (loggedInCrmId: string) =>\r\n dispatch(environmentActions.getFeatureFlagsAndDynamicConfigurations(loggedInCrmId)),\r\n});\r\n\r\ntype StateProps = ReturnType;\r\ntype DispatchProps = ReturnType;\r\nexport default connect(mapStateToProps, mapDispatchToProps)(CustomOidcProvider);\r\n","import React from \"react\";\r\nimport IChildren from \"./interfaces/IChildren\";\r\nimport { connect } from \"react-redux\";\r\nimport { ApplicationInsights } from '@microsoft/applicationinsights-web';\r\nimport { ReactPlugin, withAITracking } from '@microsoft/applicationinsights-react-js';\r\nimport { createBrowserHistory } from \"history\";\r\n\r\ninterface IProps extends IChildren {\r\n aiConnectionString: string;\r\n}\r\n\r\nconst reactPlugin = new ReactPlugin();\r\n\r\nconst TelemetryProvider = ({ children, aiConnectionString }: IProps) => {\r\n const browserHistory = createBrowserHistory({ basename: '' });\r\n if (aiConnectionString) {\r\n const appInsights = new ApplicationInsights({\r\n config: {\r\n connectionString: `${aiConnectionString}`,\r\n extensions: [reactPlugin],\r\n extensionConfig: {\r\n [reactPlugin.identifier]: { history: browserHistory }\r\n }\r\n }\r\n });\r\n appInsights.loadAppInsights();\r\n }\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nexport default connect()(withAITracking(reactPlugin, TelemetryProvider));","import React from \"react\";\r\nimport { Container, Grid, Typography } from \"@material-ui/core\";\r\nimport WarningFleet from \"../../assets/images/warning-fleet.svg\";\r\nimport CircleImage from \"../../ui/CircleImage/CircleImage\";\r\nimport styled from \"styled-components\";\r\nimport Spacer from \"../../ui/Spacer/Spacer\";\r\n\r\nconst FullHeightContainer = styled(Container)`\r\n height: 100%;\r\n`;\r\n\r\nconst FullHeightRow = styled(Grid)`\r\n height: 100%;\r\n`;\r\n\r\ninterface IPortalDeactivated {}\r\n\r\nconst PortalDeactivated: React.FC = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Sorry! The service you requested is not available at this time.\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default PortalDeactivated;\r\n","var _g, _g2;\nconst _excluded = [\"svgRef\", \"title\"];\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }\nfunction _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }\nimport React from \"react\";\nconst SvgLogoWhite = _ref => {\n let {\n svgRef,\n title\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n x: \"0px\",\n y: \"0px\",\n width: \"126.597px\",\n height: \"49.279px\",\n viewBox: \"0 0 126.597 49.279\",\n enableBackground: \"new 0 0 126.597 49.279\",\n xmlSpace: \"preserve\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#939598\",\n d: \"M122.341,29.934\"\n }))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFFFFF\",\n d: \"M44.34,32.202h-3.714V11.931h5.571c2.486,0,3.829,0.425,5.029,1.549c1.229,1.155,1.942,2.948,1.942,4.804 c0,4.102-2.314,6.413-6.428,6.413h-2.4V32.202 M45.854,21.262c2.344,0,3.486-0.974,3.486-2.979c0-2.008-1.171-2.919-3.715-2.919 H44.34v5.897H45.854z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFFFFF\",\n d: \"M56.508,27.919l-1.715,4.283h-3.94l8.257-20.697h2.8l7.999,20.697h-3.971l-1.627-4.283H56.508z M60.48,17.431l-2.771,7.296 h5.429L60.48,17.431z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFFFFF\",\n d: \"M84.651,32.202h-4.572l-5.142-8.145H74.45v8.145h-3.713V11.931h5.514c4.287,0,6.744,2.188,6.744,5.987 c0,3.099-1.543,5.138-4.344,5.743L84.651,32.202 M75.538,21.262c2.371,0,3.629-1.096,3.629-3.131c0-1.978-1.258-3.011-3.572-3.011 H74.45v6.142H75.538z\"\n }), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"#FFFFFF\",\n points: \"96.452,11.93 101.137,11.93 93.079,21.291 101.565,32.202 96.679,32.202 89.907,23.084 89.45,23.57 89.45,32.202 85.736,32.202 85.736,11.93 89.45,11.93 89.45,20.5 \"\n }), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"#ED1C2E\",\n points: \"91.049,35.471 77.361,49.279 88.242,49.279 102.024,35.471 \"\n }), /*#__PURE__*/React.createElement(\"polygon\", {\n fill: \"#ED1C2E\",\n points: \"112.905,35.471 102.024,35.471 115.715,21.637 126.597,21.637 \"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFFFFF\",\n d: \"M26.834,21.607H15.953l8.646,8.737c-2.074,1.155-4.462,1.814-7.006,1.814c-7.94,0-14.376-6.415-14.376-14.33 c0-7.912,6.436-14.328,14.376-14.328c7.941,0,14.378,6.416,14.378,14.328c0,2.574-0.681,4.99-1.874,7.077L26.834,21.607 M26.972,32.743l2.671,2.7h10.882l-8.016-8.102c1.812-2.775,2.866-6.091,2.866-9.654C35.375,7.92,27.457,0,17.688,0 S0,7.92,0,17.688c0,9.77,7.919,17.688,17.688,17.688C21.093,35.376,24.273,34.41,26.972,32.743\"\n }))));\n};\nconst ForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgLogoWhite, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/logo_white.88864dc0.svg\";\nexport { ForwardRef as ReactComponent };","import { Grid, makeStyles } from \"@material-ui/core\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport styled from \"styled-components\";\r\nimport background from \"../../assets/images/fm_mobile_bg.jpg\";\r\nimport { ReactComponent as LogoWhite } from \"../../assets/images/logo_white.svg\";\r\nimport { variables } from \"../../theme/variables\";\r\nimport CustomButton from \"../../ui/CustomButton/CustomButton\";\r\nimport Spacer from \"../../ui/Spacer/Spacer\";\r\n\r\nconst { colors, typography } = variables;\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n height: \"100%\",\r\n padding: \"1.5em 2em\",\r\n },\r\n});\r\n\r\nconst StyledH1 = styled.h1`\r\n color: ${colors.white};\r\n font-size: ${typography.fontSizeLarger};\r\n`;\r\n\r\nconst MessageWrapper = styled.div`\r\n color: ${colors.white};\r\n font-size: ${typography.fontSizeBase};\r\n text-align: center;\r\n`;\r\n\r\nconst Wrapper = styled.div`\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100vh;\r\n background-image: url(${background});\r\n background-color: ${colors.veryLightGraySecondary};\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n background-size: cover;\r\n z-index: 6050;\r\n\r\n #root {\r\n overflow: hidden !important;\r\n }\r\n`;\r\n\r\ninterface IMobileWarningScreen {}\r\n\r\nconst MobileWarningScreen: React.FC = ({ children }) => {\r\n const classes = useStyles();\r\n\r\n const [width, setWidth] = useState(window.innerWidth);\r\n const [mobile, setMobile] = useState(false);\r\n const [accepted, setAccepted] = useState(false);\r\n\r\n const { t } = useTranslation(\"mobileOptimization\");\r\n\r\n const setWindowWidth = () => setWidth(window.innerWidth);\r\n\r\n useEffect(() => {\r\n if (width <= 960) {\r\n setMobile(true);\r\n } else {\r\n setMobile(false);\r\n }\r\n }, [width]);\r\n\r\n useEffect(() => {\r\n window.addEventListener(\"resize\", setWindowWidth);\r\n\r\n return () => window.removeEventListener(\"resize\", setWindowWidth);\r\n }, []);\r\n\r\n if (mobile && !accepted) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {t(\"welcome\")}\r\n \r\n {t(\"warningMessage\")}\r\n \r\n setAccepted(true)} />\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return <>{children};\r\n};\r\n\r\nexport default MobileWarningScreen;\r\n","import React, { useEffect, Dispatch, useState, useLayoutEffect } from \"react\";\r\nimport Layout from \"./ui/Layout/Layout\";\r\nimport { Switch, Route, Redirect } from \"react-router\";\r\nimport routes from \"./router/routes\";\r\nimport { BrowserRouter } from \"react-router-dom\";\r\nimport CustomToast from \"./ui/CustomToast/CustomToast\";\r\nimport { Helmet } from \"react-helmet\";\r\nimport FmpAppRoutes from \"./router/FmpAppRoutes\";\r\nimport ErrorBoundary from \"./ErrorBoundary\";\r\nimport { connect } from \"react-redux\";\r\nimport environmentActions from \"./store/actions/environment.actions\";\r\nimport oidcActions from \"./store/actions/oidc.actions\";\r\nimport aiActions from \"./store/actions/ai.actions\";\r\nimport CustomOidcProvider from \"./CustomOidcProvider\";\r\nimport TelemetryProvider from \"./TelemetryProvider\";\r\nimport { RootReducer } from \"./store/reducers\";\r\nimport PortalDeactivated from \"./components/PortalDeactivated/PortalDeactivated\";\r\nimport MobileWarningScreen from \"./components/MobileWarningScreen/MobileWarningScreen\";\r\n\r\ninterface IProps extends StateProps, DispatchProps {}\r\n\r\nconst App = ({\r\n getEnvironment,\r\n getVersion,\r\n getOidcConfig,\r\n getAiConnectionString,\r\n getPortalStatus,\r\n portalDeactivated,\r\n aiConnectionString,\r\n}: IProps) => {\r\n const [oidcInfoRetrieved, setOidcInfoRetrieved] = useState(false);\r\n const [aiConnectionStringRetrieved, setAiConnectionStringRetrieved] =\r\n useState(false);\r\n\r\n const updateOidcInfoRetrieved = () => setOidcInfoRetrieved(true);\r\n const updateAiConnectionStringRetrieved = () =>\r\n setAiConnectionStringRetrieved(true);\r\n\r\n useEffect(() => {\r\n getOidcConfig(updateOidcInfoRetrieved);\r\n getAiConnectionString(updateAiConnectionStringRetrieved);\r\n getPortalStatus();\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n useLayoutEffect(() => {\r\n getEnvironment();\r\n getVersion();\r\n }, [getEnvironment, getVersion]);\r\n\r\n if (!oidcInfoRetrieved || !aiConnectionStringRetrieved) {\r\n return null;\r\n }\r\n\r\n if (portalDeactivated) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n \r\n {`Q-Park | Business Portal`}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: RootReducer) => {\r\n const { environment, ai } = state;\r\n\r\n return {\r\n portalDeactivated: environment.portalDeactivated,\r\n aiConnectionString: ai.connectionString,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\r\n getEnvironment: () => dispatch(environmentActions.getEnvironment()),\r\n getVersion: () => dispatch(environmentActions.getVersion()),\r\n getOidcConfig: (callback: Function) =>\r\n dispatch(oidcActions.getConfiguration(callback)),\r\n getAiConnectionString: (callback: Function) =>\r\n dispatch(aiActions.getConnectionString(callback)),\r\n getPortalStatus: (callback?: () => void) =>\r\n dispatch(environmentActions.getPortalStatus(callback))\r\n});\r\n\r\ntype StateProps = ReturnType;\r\ntype DispatchProps = ReturnType;\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(App);\r\n","import { createTheme } from \"@material-ui/core/styles\";\r\nimport { Fonts } from \"../typography\";\r\nimport { variables } from \"./variables\";\r\n\r\nconst { FuturaD, FuturaT } = Fonts;\r\nconst { colors, typography } = variables;\r\n\r\nexport default createTheme({\r\n typography: {\r\n h1: {\r\n fontFamily: FuturaD.fontFamily,\r\n },\r\n h2: {\r\n fontFamily: FuturaD.fontFamily,\r\n },\r\n h3: {\r\n fontFamily: FuturaD.fontFamily,\r\n },\r\n h4: {\r\n fontFamily: FuturaD.fontFamily,\r\n },\r\n h5: {\r\n fontFamily: FuturaD.fontFamily,\r\n },\r\n h6: {\r\n fontFamily: FuturaD.fontFamily,\r\n },\r\n fontFamily: FuturaT.fontFamily,\r\n fontWeightBold: FuturaD.fontWeight,\r\n fontWeightRegular: FuturaT.fontWeight,\r\n },\r\n props: {\r\n MuiButtonBase: {\r\n disableRipple: true,\r\n },\r\n },\r\n palette: {\r\n primary: {\r\n main: colors.lime.hex,\r\n },\r\n },\r\n overrides: {\r\n // Font family\r\n MuiCssBaseline: {\r\n \"@global\": {\r\n \"@font-face\": [FuturaT, FuturaD],\r\n },\r\n },\r\n\r\n // Paper\r\n MuiPaper: {\r\n root: {\r\n boxShadow: \"0px 3px 6px #44580A26\",\r\n border: `1px solid ${colors.veryLightGray}`,\r\n },\r\n elevation1: {\r\n boxShadow: \"0px 3px 6px #00000008;\",\r\n },\r\n },\r\n\r\n // Grid\r\n MuiGrid: {\r\n root: {\r\n paddingBottom: \"12px\",\r\n },\r\n },\r\n\r\n // Inputs\r\n MuiInputBase: {\r\n root: {\r\n backgroundColor: colors.white,\r\n },\r\n marginDense: {\r\n fontSize: \"15px\",\r\n },\r\n input: {\r\n padding: \"10px 14px\",\r\n },\r\n },\r\n MuiOutlinedInput: {\r\n input: {\r\n padding: \"10px 14px\",\r\n fontSize: typography.fontSizeSmaller,\r\n },\r\n inputMarginDense: {\r\n padding: \"7px 4px\",\r\n fontSize: \"15px\",\r\n },\r\n adornedStart: {\r\n paddingLeft: \"4px\",\r\n },\r\n adornedEnd: {\r\n paddingRight: \"4px\",\r\n },\r\n root: {\r\n \"& $notchedOutline\": {\r\n borderColor: colors.lightGrayishBlue.hex,\r\n },\r\n \"&$focused $notchedOutline\": {\r\n borderColor: colors.lime.hex,\r\n },\r\n \"&:hover $notchedOutline\": {\r\n borderColor: colors.gray.hex,\r\n },\r\n \"&$error $notchedOutline\": {\r\n backgroundColor: `rgba(${colors.red.rgb}, .05)`,\r\n borderColor: colors.red.hex,\r\n },\r\n },\r\n },\r\n\r\n // Select\r\n MuiSelect: {\r\n select: {\r\n padding: \"10px 14px\",\r\n \"&:focus\": {\r\n backgroundColor: colors.white,\r\n },\r\n },\r\n outlined: {\r\n paddingLeft: \"10px\",\r\n },\r\n },\r\n\r\n // Helper text\r\n MuiFormHelperText: {\r\n root: {\r\n \"&$contained\": {\r\n color: colors.red.hex,\r\n fontSize: typography.fontSizeSmaller,\r\n margin: \"3px 0\",\r\n },\r\n \"&.Mui-error\": {\r\n color: colors.red.hex,\r\n fontSize: typography.fontSizeSmaller,\r\n },\r\n },\r\n },\r\n\r\n // Form Control Label\r\n MuiFormControlLabel: {\r\n label: {\r\n fontSize: typography.fontSizeSmaller,\r\n },\r\n },\r\n\r\n // Label\r\n MuiFormLabel: {\r\n root: {\r\n color: colors.black,\r\n fontSize: typography.fontSizeSmaller,\r\n },\r\n },\r\n\r\n // Buttons\r\n MuiButton: {\r\n contained: {\r\n minWidth: \"84px\",\r\n backgroundColor: colors.white,\r\n color: colors.black,\r\n textTransform: \"none\",\r\n fontFamily: FuturaT.fontFamily,\r\n fontSize: typography.fontSizeSmaller,\r\n boxShadow: \"0px 3px 6px #44580A26\",\r\n borderRadius: \"4px\",\r\n border: `1px solid ${colors.veryLightGray}`,\r\n \"&:hover\": {\r\n backgroundColor: colors.mostlyWhite,\r\n boxShadow: \"0px 3px 6px #44580A26\",\r\n },\r\n \"&.Mui-disabled\": {\r\n color: colors.white,\r\n backgroundColor: colors.grayishBlue.hex,\r\n borderColor: colors.grayishBlue.hex,\r\n boxShadow: \"0px 3px 6px #44580A26\",\r\n },\r\n },\r\n containedPrimary: {\r\n backgroundColor: colors.lime.hex,\r\n color: colors.white,\r\n fontFamily: FuturaD.fontFamily,\r\n border: \"1px solid #0000000F\",\r\n \"&:hover\": {\r\n backgroundColor: `${colors.darkerLime} !important`,\r\n },\r\n \"&:active\": {\r\n backgroundColor: `${colors.darkerLime} !important`,\r\n },\r\n \"&:focus\": {\r\n backgroundColor: `${colors.darkerLime} !important`,\r\n },\r\n },\r\n containedSecondary: {\r\n backgroundColor: colors.red.hex,\r\n color: colors.white,\r\n fontFamily: FuturaD.fontFamily,\r\n border: \"1px solid #0000000F\",\r\n \"&:hover\": {\r\n backgroundColor: colors.darkRed,\r\n },\r\n \"&:active\": {\r\n backgroundColor: colors.darkRed,\r\n },\r\n \"&:focus\": {\r\n backgroundColor: colors.darkRed,\r\n },\r\n },\r\n textPrimary: {\r\n color: colors.lime.hex,\r\n fontFamily: FuturaT.fontFamily,\r\n textTransform: \"none\",\r\n },\r\n },\r\n MuiIconButton: {\r\n root: {\r\n \"&:hover\": {\r\n backgroundColor: \"none\",\r\n },\r\n },\r\n colorSecondary: {\r\n color: colors.red.hex,\r\n \"&:hover\": {\r\n backgroundColor: `rgba(${colors.red.rgb}, 0.1)`,\r\n },\r\n },\r\n },\r\n MuiButtonGroup: {\r\n contained: {\r\n boxShadow: \"0px 3px 6px #44580A26\",\r\n \"&:hover\": {\r\n boxShadow: \"0px 3px 6px #44580A26\",\r\n },\r\n },\r\n },\r\n\r\n // Stepper\r\n MuiStepper: {\r\n root: {\r\n border: \"none\",\r\n padding: 0,\r\n },\r\n },\r\n MuiStepIcon: {\r\n root: {\r\n color: colors.veryLightGray,\r\n \"&.MuiStepIcon-active\": {\r\n color: colors.lime.hex,\r\n },\r\n \"&.MuiStepIcon-completed\": {\r\n color: colors.lime.hex,\r\n },\r\n },\r\n active: {\r\n color: colors.lime.hex,\r\n },\r\n completed: {\r\n color: colors.lime.hex,\r\n },\r\n },\r\n MuiStepConnector: {\r\n root: {\r\n \"& $line\": {\r\n borderColor: colors.veryLightGray,\r\n },\r\n },\r\n active: {\r\n \"& $line\": {\r\n borderColor: colors.lime.hex,\r\n },\r\n },\r\n completed: {\r\n \"& $line\": {\r\n borderColor: colors.lime.hex,\r\n },\r\n },\r\n line: {\r\n borderColor: colors.veryLightGray,\r\n },\r\n },\r\n\r\n // Tooltip\r\n MuiTooltip: {\r\n tooltip: {\r\n fontSize: typography.fontSizeSmaller,\r\n textAlign: \"center\",\r\n },\r\n },\r\n\r\n // MuiCard\r\n MuiCardMedia: {\r\n root: {\r\n backgroundColor: colors.mostlyBlack,\r\n },\r\n },\r\n\r\n // Table\r\n MuiTableContainer: {\r\n root: {\r\n borderRadius: \"4px\",\r\n border: `1px solid ${colors.lightGrayishBlue.hex}`,\r\n backgroundColor: colors.white,\r\n zIndex: 0,\r\n },\r\n },\r\n MuiTableHead: {\r\n root: {\r\n backgroundColor: colors.veryLightGraySecondary,\r\n borderBottom: `1px solid ${colors.lightGrayishBlue.hex}`,\r\n },\r\n },\r\n MuiTableSortLabel: {\r\n root: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n color: colors.black,\r\n },\r\n },\r\n MuiTableRow: {\r\n root: {\r\n fontSize: typography.fontSizeSmaller,\r\n \"&.MuiTableRow-hover\": {\r\n \"&:hover\": {\r\n backgroundColor: \"rgba(0, 0, 0, .04)\",\r\n },\r\n },\r\n \"&.Mui-selected\": {\r\n backgroundColor: \"inherit\",\r\n \"&:hover\": {\r\n backgroundColor: \"rgba(0, 0, 0, .04)\",\r\n },\r\n },\r\n \"&:last-child\": {\r\n \"& > .MuiTableCell-root\": {\r\n borderBottom: \"none\",\r\n },\r\n },\r\n \"&:nth-child(even)\": {\r\n backgroundColor: colors.mostlyWhite,\r\n },\r\n },\r\n },\r\n MuiTableCell: {\r\n root: {\r\n borderBottom: `1px solid ${colors.lightGrayishBlue.hex}`,\r\n },\r\n body: {\r\n color: colors.black,\r\n },\r\n sizeSmall: {\r\n padding: \"10px 12px\",\r\n \"&.MuiTableCell-paddingCheckbox\": {\r\n padding: \"0 10px\",\r\n },\r\n \"&.MuiTableCell-head\": {\r\n padding: \"4px 12px\",\r\n textTransform: \"uppercase\",\r\n fontSize: typography.fontSizeSmall,\r\n borderBottom: `1px solid ${colors.lightGrayishBlue.hex} !important`,\r\n \"&.MuiTableCell-paddingCheckbox\": {\r\n padding: \"0 10px\",\r\n },\r\n \"&:not(:first-child)\": {\r\n borderRight: `1px solid ${colors.lightGrayishBlue.hex}`,\r\n },\r\n \"&:last-child\": {\r\n borderRight: \"none\",\r\n },\r\n \"&:nth-last-child(2)\": {\r\n borderRight: \"none\",\r\n },\r\n },\r\n },\r\n },\r\n\r\n // List\r\n MuiList: {\r\n root: {\r\n maxHeight: 480\r\n }\r\n },\r\n\r\n MuiListItem: {\r\n root: {\r\n \"&.Mui-disabled\": {\r\n backgroundColor: colors.white,\r\n }\r\n }\r\n },\r\n\r\n // Menu\r\n MuiMenuItem: {\r\n root: {\r\n \"&.action-menu svg\": {\r\n color: colors.lightGrayishBlue.hex,\r\n marginRight: \".5rem\"\r\n }\r\n }\r\n },\r\n\r\n // Date Picker\r\n MuiPickersToolbar: {\r\n toolbar: {\r\n backgroundColor: colors.lime.hex,\r\n },\r\n },\r\n MuiPickersCalendarHeader: {\r\n switchHeader: {\r\n backgroundColor: colors.white,\r\n color: colors.black,\r\n \"& p\": {\r\n fontFamily: FuturaD.fontFamily,\r\n },\r\n },\r\n dayLabel: {\r\n textTransform: \"uppercase\",\r\n },\r\n },\r\n MuiPickersDay: {\r\n day: {\r\n margin: 2,\r\n color: colors.black,\r\n backgroundColor: colors.mostlyWhite,\r\n borderRadius: 2,\r\n transition: \"all .2s ease\",\r\n\r\n \"&:hover\": {\r\n backgroundColor: colors.lime.hex,\r\n color: colors.white,\r\n },\r\n },\r\n daySelected: {\r\n backgroundColor: colors.lime.hex,\r\n color: colors.white,\r\n },\r\n dayDisabled: {\r\n color: colors.gray.hex,\r\n },\r\n current: {\r\n color: colors.black,\r\n \"& p\": {\r\n fontFamily: FuturaD.fontFamily,\r\n },\r\n },\r\n },\r\n },\r\n});\r\n","import React from \"react\";\r\nimport { ThemeProvider } from \"@material-ui/styles\";\r\nimport theme from \"./theme\";\r\nimport { CssBaseline } from \"@material-ui/core\";\r\n\r\ninterface IProps {\r\n children: React.ReactNode;\r\n}\r\n\r\nconst AppThemeProvider = ({ children }: IProps) => (\r\n \r\n \r\n {children}\r\n \r\n);\r\n\r\nexport default AppThemeProvider;\r\n","import React from \"react\";\r\nimport IChildren from \"../interfaces/IChildren\";\r\nimport AppContextProvider from \"./AppContextProvider\";\r\nimport FleetManagerContextProvider from \"./FleetManagerContextProvider\";\r\n\r\nconst ContextProvider = ({ children }: IChildren) => {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport default ContextProvider;\r\n","import i18n from \"i18next\";\r\nimport { initReactI18next } from \"react-i18next\";\r\nimport languageDetector from \"i18next-browser-languagedetector\";\r\nimport resources, { languages } from \"./translations\";\r\n\r\nexport type i18nType = Readonly;\r\n\r\nexport default i18n\r\n .use(languageDetector)\r\n .use(initReactI18next)\r\n .init({\r\n resources: {\r\n ...resources,\r\n },\r\n fallbackLng: languages.en,\r\n whitelist: [languages.en, languages.fr, languages.nl, languages.de],\r\n supportedLngs: [languages.en, languages.fr, languages.nl, languages.de],\r\n nonExplicitSupportedLngs: true,\r\n load: \"languageOnly\",\r\n interpolation: {\r\n escapeValue: false,\r\n },\r\n });\r\n","import React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport App from \"./App\";\r\nimport AppThemeProvider from \"./theme/AppThemeProvider\";\r\nimport { Provider } from \"react-redux\";\r\nimport store from \"./store\";\r\nimport ContextProvider from \"./context/ContextProvider\";\r\nimport \"./i18n\";\r\n\r\nimport \"./index.scss\";\r\n\r\n// Yup always relies on the Promise global object to handle asynchronous\r\n// values as well as Set and Map. For browsers that do not support these,\r\n// you'll need to include a polyfill, such as core-js:\r\nimport \"core-js/es/promise\";\r\nimport \"core-js/es/set\";\r\nimport \"core-js/es/map\";\r\n\r\nconst rootElement = document.getElementById(\"root\");\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n rootElement\r\n);\r\n"],"sourceRoot":""}