{"version":3,"sources":["components/shared/NavLinkTrackActive.tsx","api/main/claims/useCurrentClaimId.ts","configure/mainApiConfig.ts","api/main/claims/useValidateClaimId.ts","api/main/models/Contract.ts","api/main/models/DataFormData.ts","api/main/models/EquipmentType.ts","api/main/models/State.ts","api/main/models/EventHistory.ts","api/main/claims/useMyClaimDetails.ts","components/layout/Navigation.tsx","components/shared/AppNavbarBrand.tsx","components/shared/LoadingIndicator.tsx","components/shared/ClaimCurrentStateSummary.tsx","components/shared/ClaimNextStageSummary.tsx","shared/conditionalFragment/ConditionalFragment.tsx","components/shared/MyReference.tsx","api/main/models/QuoteDetail.ts","api/main/models/Quote.ts","api/main/models/Message.ts","api/main/models/Claim.ts","api/main/claims/useClaimSummary.ts","components/shared/ClaimProgressStatus.tsx","api/main/claims/useClaimReadyByDate.ts","components/layout/ClaimSummary.tsx","components/layout/Header.tsx","components/layout/Footer.tsx","components/layout/Layout.tsx","shared/authorizeRoute/AuthorizeRoute.tsx","components/shared/AppRoutes.tsx","components/shared/Background.tsx","components/account/AccountBackground.tsx","components/api-authorization/LoginWaiting.tsx","components/api-authorization/ApiAuthorizationConstants.ts","components/api-authorization/Login.tsx","components/api-authorization/Logout.tsx","components/api-authorization/routes.tsx","shared/alertOnErrors/AlertOnErrors.tsx","components/account/ExternalLoginButton.tsx","components/shared/FormButtons.tsx","components/shared/Banner.tsx","components/shared/LoginContainer.tsx","components/account/routes.ts","components/account/Login.tsx","components/shared/MainContainer.tsx","components/home/routes.ts","components/home/Home.tsx","api/main/models/PortalNotification.ts","components/shared/Notification.tsx","api/main/claims/useClaimNotification.ts","components/shared/StyledModal.tsx","components/passcodeEntry/PinEntry.tsx","components/patternLock/helpers.tsx","components/patternLock/PatternLock.tsx","components/passcodeEntry/PatternEntry.tsx","components/shared/GDPRConsentFormPart.tsx","components/passcodeEntry/PasscodeEntryModal.tsx","api/main/dataFormDatas/useSubmitPasscode.ts","components/shared/ICloudModal.tsx","api/main/dataFormDatas/useSubmitIcloudStatus.ts","components/shared/ClaimStateNotification.tsx","components/shared/TrackedClaimContainer.tsx","components/shared/dateView.tsx","components/shared/ResponsiveProgress.tsx","components/myClaim/DateProgress.tsx","shared/pageSection/PageSection.tsx","components/shared/LoadingComponent.tsx","components/myClaim/ClaimStatus.tsx","api/main/claims/useClaimProgressData.ts","shared/nameValueView/NameValueBox.tsx","components/myClaim/MyDevice.tsx","api/main/dataFormDatas/useMatchingDataFormDatas.ts","api/main/claims/useMyClaim.ts","api/account/EndUserService.ts","components/track/TrackMyClaim.tsx","api/account/useAuthorizeEndUserCallback.ts","components/myClaim/routes.tsx","components/myClaim/MyClaim.tsx","components/myDelivery/MyDelivery.tsx","api/main/claims/useClaimDeliveryDetails.ts","components/myDelivery/routes.tsx","shared/useFormattedAddressCallback/useFormattedAddressCallback.ts","components/myDetails/MyDetails.tsx","api/main/claims/useClaimEndUserDetails.ts","api/main/claims/useUpdateDeliveryAddress.ts","components/myDetails/routes.tsx","components/messages/MessageComponent.tsx","api/main/claims/useMarkMessageAsRead.ts","components/messages/Messages.tsx","api/main/claims/useClaimMessages.ts","api/main/messages/useSendMessageCallback.ts","components/messages/routes.tsx","components/history/HistoryItem.tsx","components/history/History.tsx","api/main/claims/useClaimEventHistories.ts","components/history/routes.tsx","api/main/claims/useGetInspectionPhotosCallback.ts","components/shared/GalleryImage.tsx","components/photos/Photos.tsx","api/main/claims/useClaimInspectionDate.ts","shared/useZipData/useZipBlobCallback.ts","components/photos/routes.tsx","components/quote/Quote.tsx","api/main/claims/useClaimQuote.ts","components/quote/routes.tsx","components/shared/PdfComponents.tsx","components/report/PdfReport.tsx","components/report/Report.tsx","components/report/routes.tsx","components/track/routes.ts","configure/stripeConfig.ts","components/excessPayment/ExcessPayment.tsx","components/excessPayment/ExcessPaymentComplete.tsx","components/excessPayment/routes.tsx","configure/routeConfig.ts","components/shared/NotFound.tsx","configure/iconsConfig.ts","configure/configureApollo.ts","configure/languageConfig.ts","reduxStore/persistConfig.ts","reduxStore/store.ts","App.tsx","configure/i18n.ts","configure/errorMessageConfig.ts","registerServiceWorker.ts","index.tsx","shared/useChanges/index.ts","../index.ts","reduxStore/cache.ts","../useAuthenticatedState.ts","shared/userFriendlyErrorMessage/registerErrorMessageConverters.ts","shared/userFriendlyErrorMessage/index.ts","shared/cacheInRedux/CacheService.ts","shared/userFriendlyErrorMessage/userFriendlyErrorMessage.ts","shared/useChanges/useChanges.ts","../configureServices.ts","../AuthorizeService.ts","../useAccountService.ts","api/account/AccountService.ts","api/account/ClaimTypes.ts","../useChangeAccountEmailCallback.ts","../useChangeEmailCallback.ts","../useChangePasswordCallback.ts","../useCompletedExternalLoginDetails.ts","../useConfirmEmailCallback.ts","../useConfirmEmailChangeCallback.ts","../useConfirmInviteCallback.ts","../useCreateAccountForExternalLoginCallback.ts","../useCurrentUserRoles.ts","../useAuthorizeService.ts","../apiAuthorizationConfig.ts","../useCache.ts","../useInviteCallback.ts","../useExternalAuthenticationSchemes.ts","../useLockoutCallback.ts","../useLoginWithPasswordCallback.ts","../useRegisterAccountCallback.ts","../useResendConfirmationEmailCallback.ts","../useResendInviteEmailCallback.ts","../useResetPasswordCallback.ts","../useSendPasswordResetEmailCallback.ts","../useStartExternalLoginCallback.ts","shared/cacheInRedux/index.ts"],"names":["NavLinkTrackActive","props","to","exact","activeClassName","rest","useCurrentClaimId","useParams","id","mainApiConfig","useValidateClaimId","claimId","options","useLazyQuery","gql","variables","fetchPolicy","pollInterval","onCompleted","data","load","loading","error","refetch","called","React","useEffect","lazy","refresh","useCallback","a","useMemo","isLoading","item","errors","contractFieldsFragment","dataFormDataFieldsFragment","equipmentTypeFieldsFragment","stateFieldsFragment","eventHistoryFieldsFragement","useMyClaimDetails","Navigation","validatedId","claim","NavItem","NavLink","tag","policyExcessAmount","AppNavbarBrand","className","LoadingIndicator","fullWidth","size","inline","style","ret","width","textAlign","display","Spinner","type","ClaimCurrentStateSummary","claimState","ClaimNextStageSummary","nextStage","readyByDate","Container","Row","Col","xs","icon","ConditionalFragment","showIf","children","MyReference","reference","quoteDetailFieldsFragment","quoteFieldsFragment","messageFieldsFragment","claimFieldsFragment","useClaimSummary","useState","result","setResult","finalEvent","events","find","e","relatedState","trackerNumber","trackerStep","undefined","ClaimProgressStatus","statusClass","status","useClaimReadyByDate","params","dateReceived","collectionDate","contractSlaDays","eventDate","moment","add","momentBusinessDays","businessAdd","now","ClaimSummary","setReadyByDate","readyDate","nextCollectionAttemptDate","equipmentReceived","contract","tatSlaDays","format","fluid","sm","state","lg","name","nextState","number","Header","md","path","Nav","Footer","Layout","fallback","script","innerHTML","AuthorizeRoute","isAuthenticated","useAuthenticatedState","usersRoles","useCurrentUserRoles","roles","hasRequiredRole","setHasRequiredRole","requireRole","isNullOrUndefined","requireRoles","flat","hasRole","roleToCheck","it","Component","component","render","redirectUrl","encodeURIComponent","window","location","href","AppRoutes","routes","map","index","authorize","key","Background","AccountBackground","LoginWaiting","waiting","message","QueryParameterNames","LogoutActions","LoginActions","prefix","ApplicationPaths","DefaultLoginRedirectPath","ApiAuthorizationPrefix","Login","LoginFailed","LoginCallback","Register","Profile","LogOut","LoggedOut","LogOutCallback","IdentityRegisterPath","IdentityManagePath","action","this","login","getReturnUrl","processLoginCallback","URLSearchParams","search","get","setState","redirectToProfile","redirectToRegister","Error","returnUrl","authService","signIn","AuthenticationResultStatus","Redirect","Success","Fail","navigateToReturnUrl","url","completeSignIn","fromQuery","startsWith","origin","redirectToApiAuthorizationPath","apiAuthorizationPath","replace","Logout","isReady","authenticated","history","local","logout","processLogoutCallback","populateAuthenticationState","signOut","completeSignOut","apiAuthorizationRoutes","loginAction","logoutAction","AlertOnErrors","color","simple","openErrors","setOpenErrors","isOpen","toggleOpen","prevState","filter","friendlyErrors","userFriendlyErrorMessage","errorGroups","groups","group","push","length","Alert","onClick","cursor","Badge","pill","details","lang","JSON","stringify","ExternalLoginButton","t","useTranslation","provider","providerDisplayName","propsClassName","text","Button","context","FormButtons","Banner","LoginContainer","isSmallScreen","useMediaQuery","maxWidth","ListGroup","horizontal","ListGroupItem","fontWeight","target","accountRoutes","useExternalAuthenticationSchemes","externalAuthenticationSchemes","loadErrors","useLoginWithPasswordCallback","isLoggingIn","isExecuting","loginErrors","useStartExternalLoginCallback","startExternalLogin","isPendingEmailConfirmation","setIsPendingEmailConfirmation","useHistory","useResendConfirmationEmailCallback","resendConfirmationEmail","isResendingConfirmationEmail","resendConfirmationEmailErrors","hasSentConfirmationEmail","setHasSentConfirmationEmail","useChanges","email","password","rememberMe","model","change","useValidatorCallback","validation","fieldsToCheck","rules","checkRules","validate","validationErrors","isDoingFullPageRedirect","setIsDoingFullPageRedirect","performLogin","requiresEmailConfirmation","requiresTwoFactor","succeeded","Form","onSubmit","preventDefault","executingChildren","FormGroup","Label","htmlFor","autoComplete","value","placeholder","onChange","currentTarget","onBlur","CustomInput","label","checked","displayName","MainContainer","homeRoutes","pathname","portalNotificationFieldsFragment","Notification","refreshRequired","setRefreshRequired","useLocation","useClaimNotification","linkPath","notification","linkName","StyledModal","other","Modal","PinEntry","onChangeCallback","passcode","initialPasscode","setPasscode","showPassword","setShowPassword","toggleShowPassword","pinKeyEvent","newPassCode","substring","currentName","currentFieldNumber","Number","parseInt","split","pinElement","document","getElementsByName","focus","focusPrevious","onPinInputChanged","isNaN","blur","focusNext","firstPinInput","Input","inputMode","pattern","maxLength","onKeyDown","onMouseDown","clientPointToCanvas","canvasRef","x","y","current","rect","getBoundingClientRect","left","right","top","bottom","getConnectorPoint","nodeSize","connectorThickness","Math","floor","getAngle","b","atan2","PatternLockNode","selected","divProps","Connectors","points","initialMousePos","mouse","setMouse","setMousePosition","point","canvasPoint","copiedRef","onMouseMove","clientX","clientY","onTouchMove","touches","addEventListener","removeEventListener","connectors","i","currentPoint","nextPoint","from","hypot","height","position","backgroundColor","transform","transformOrigin","borderRadius","round","PatternLockWidget","onFinished","pixelSize","initialPattern","patternSize","setPattern","useRef","dragging","setDragging","startPoint","setStartPoint","setPoints","checkCollision","checkCollisionFromIndex","getCollidedPointIndex","nodeOverIndex","indexOf","intersectedPoints","indexFrom","indexTo","fromPoint","toPoint","diff","abs","min","xDiff","yDiff","dirX","dirY","getIntersectedNodes","newPattern","p","onTouchStart","wrapperWidth","nodeHalfSize","nodeAreaSize","halfNodeArea","Array","_","getNodePoints","onRealease","ref","flex","alignItems","justifyContent","zIndex","includes","onMouseEnter","mouseEnterNode","mouseDownNode","PatternEntry","active","valid","setValid","join","GDPRConsentFormPart","check","rel","PasscodeEntry","modal","setModal","activeTab","setActiveTab","patternLockActive","setPatternLockActive","useMutation","mutationAction","useAsyncCallback","actionErrors","useSubmitPasscode","submitPasscodeMutation","submitErrors","isSubmitting","passcodeType","gdprConsent","console","log","toggleModal","toggleTab","tab","onPasscodeChange","submitPasscode","toggle","onClosed","onSubmitCallback","ModalHeader","ModalBody","tabs","TabContent","TabPane","tabId","ModalFooter","ICloudModal","useSubmitIcloudStatus","submitIcloudStatus","submit","iCloudOff","ClaimStateNotification","systemName","stateName","TrackedClaimContainer","handleUpdate","currentClaimId","redirect","DateView","date","showTime","showNoDataIcon","year","month","day","time","faCircle","ResponsiveProgress","Progress","DateProgress","dateEnd","dateStart","progressAmount","step","description","progressValue","total","currentProgress","bar","aria-valuemin","aria-valuemax","PageSection","LoadingComponent","ClaimStatus","initialStep","setInitialStep","progressStep","setProgressStep","finalStep","setFinalStep","dataLoading","sortfn","parseData","initialStates","progressStates","finalStates","receiveEvent","forEach","stateDescription","startDate","event","sort","nextCollection","nextDelivery","receiveDate","useClaimProgressData","loadingErrors","lastInitial","lastProgress","lastFinal","endDate","NameValueBox","displayEmpty","trim","MyDevice","datas","filterCallback","useMyClaim","requiredDatas","specs","dataFormData","res","textValue","customer","equipmentType","Object","entries","EndUserService","api","authorizeEndUser","request","post","getClaimPhotos","sendMessage","ApiFetch","TrackMyClaim","endUserService","useAuthorizeEndUserCallback","authorizationErrors","postcode","myClaimRoutes","MyDelivery","useClaimDeliveryDetails","isDeliveryArranged","setIsDeliveryArranged","collectionCourierImage","setCollectionCourierImage","deliveryCourierImage","setDeliveryCourierImage","deliveryRef","setDeliveryRef","collectionRef","setCollectionRef","deliveryCourier","dpddeliveryNumber","deliveryTrackingDetails","dpdcollectionNumber","collectionTrackingDetails","toLowerCase","collectionCourier","open","Media","src","process","alt","dispatchEvent","myDeliveryRoutes","useFormattedAddressCallback","address","matches","match","postCode","newAddress","line","word","charAt","toUpperCase","substr","concat","MyDetails","addressChangeAllowed","setAddressChangeAllowed","useClaimEndUserDetails","useUpdateDeliveryAddress","updateAddressCallback","updateErrors","line1","line2","line3","city","formatAddress","updateRegisteredAddress","deliveryAddress","dateRepairFinished","repairFinishedEvent","lastChanceDate","policyNumber","externalReference","endUserName","endUserMobile","endUserEmail","registeredAddress","row","myDetailsRoutes","MessageComponent","subject","body","dateSent","read","messageId","messagePreview","setMessagePreview","subjectPreview","setSubjectPreview","useMarkMessageAsRead","markAsReadCallback","trimMessage","html","maxChars","trimmed","DOMParser","parseFromString","textContent","slice","trimSubject","markAsRead","parsedHtml","ReactHtmlParser","Messages","useClaimMessages","messagesLoading","messageLoadErrors","unreadCount","setUnreadCount","unreadMessages","setSortedMessages","messages","m","momentA","momentB","isBefore","isAfter","isSent","setIsSent","claimService","useSendMessageCallback","sendMessageCallback","isSending","myMessagesRoutes","HistoryItem","History","displayData","setDisplayData","filterName","useClaimEventHistories","historyRoutes","useGetInspectionPhotos","setIsLoading","setError","photos","setPhotos","loadData","GalleryImage","base64","captionHeader","captionValue","loaded","setLoaded","downloadImage","createElement","download","appendChild","click","removeChild","onLoad","stopPropagation","object","Photos","showPlaceholders","setShowPlaceholders","useClaimInspectionDate","claimErrors","claimIsLoading","files","folderName","zip","JSZip","folder","f","file","generateAsync","useZipBlobCallback","keys","inspectionStart","photosRoutes","Quote","useClaimQuote","Table","quote","quoteDetails","detail","exVat","parseFloat","vat","scope","part","toFixed","quoteRoutes","pdfStyles","StyleSheet","create","table","margin","pageHeader","fontStyle","flexDirection","fontSize","padding","tableRow","flexGrow","tableHeader","borderStyle","tableCell","PageHeader","styleSheet","PdfTable","PdfTableRow","Font","register","family","fonts","styles","page","fontFamily","sectionHeader","marginTop","marginBottom","tableParent","paddingHorizontal","paddingVertical","darkSection","lightSection","minHeight","flexWrap","darkCell","border","lightCell","leftTable","rightTable","ReportRow","header","flexBasis","PdfReport","claimNumber","jobReference","inspectionEngineer","endUserAddress","endUserPhone","accessories","deviceInformation","inspectionInformation","title","reportRoutes","pdfError","setModel","deviceDetails","inspectionDetails","pdf","toBlob","blob","URL","createObjectURL","generatePdf","inspectionData","deviceData","dataItem","inspectionItem","sharedKey","sharedDataKey","stringValue","decimalValue","engineerName","engineer","firstName","borderless","trackRoutes","stripeConfig","stripePromise","loadStripe","ExcessPayment","initialPaymentStatus","paymentStatus","stripe","useStripe","elements","useElements","setPaymentStatus","paymentError","setPaymentError","handleSubmit","confirmPayment","confirmParams","return_url","toString","excessPaymentTaken","excessTakenDate","paddingTop","paddingBottom","paddingLeft","paddingRight","disabled","ExcessPaymentComplete","redirect_status","urlSearchParams","payment_intent","payment_intent_client_secret","excessPaymentRoutes","clientSecret","setClientSecret","fetch","method","headers","then","json","info","appRoutes","outline","goBack","configureIcons","library","faBusinessTime","faCalendarWeek","faCaretUp","faCaretDown","faEye","faEyeSlash","faEllipsisV","faExclamation","faCaretLeft","faCaretRight","faDownload","faCogs","faEdit","faExclamationCircle","faLock","faMinus","faPlus","faProjectDiagram","faPencilAlt","faSave","faSearch","faSpinner","faStop","faStopwatch","faTimes","faTimesCircle","faTrash","faUndo","faUser","faUserClock","faUsers","faComment","faCheckCircle","farFrown","farFrownOpen","faHourglass","cache","InMemoryCache","apolloCachePersistor","CachePersistor","storage","localStorage","persist","link","HttpLink","uri","credentials","apolloClient","ApolloClient","availableLanguages","code","flagCountryCode","momentLocale","numeralLocale","persistConfig","whitelist","rootReducer","combineReducers","cacheReducer","persistedRootReducer","persistReducer","preloadedState","initialReduxState","store","configureStore","reducer","middleware","persistor","persistStore","createAppReduxStore","reduxStore","reduxStorePersistor","serviceProvider","createServiceProvider","subscribe","purge","i18n","use","Backend","LanguageDetector","initReactI18next","init","fallbackLng","interpolation","escapeValue","Date","isMoment","isNumber","numeral","on","lng","thisLanguage","locale","registerErrorMessageConverters","shouldHandle","graphQLErrors","i18next","externalProviderError","subStr","App","I18nextProvider","Provider","client","defaultTitle","titleTemplate","isLocalhost","Boolean","hostname","registerValidSW","swUrl","navigator","serviceWorker","registration","onupdatefound","installingWorker","installing","onstatechange","controller","catch","baseUrl","getElementsByTagName","getAttribute","rootElement","getElementById","ReactDOM","basename","response","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker","__export","cacheSlice","createSlice","initialState","items","reducers","storeInCache","payload","expireAt","expireOnEvents","removeFromCache","clearCache","raiseExpireEvents","hasEvent","actions","converters","configuredErrorMessageConverters","CacheService","getCacheState","dispatch","cachedItem","friendly","converter","isArray","unchanged","initialChanges","changes","setChanges","reset","AccountService","loginWithPassword","defaultRegisterReturnUrl","getExternalAuthenticationSchemes","form","append","completeExternalLogin","remoteError","createAccountForExternalLogin","sendPasswordResetEmail","resetPassword","confirmEmail","confirmEmailChange","currentUserRoles","changePassword","changeEmail","resendConfirmEmail","invite","resendInviteEmail","confirmInvite","changeAccountEmail","lockout","ClaimTypes","actor","postalCode","rsa","sid","spn","stateOrProvince","streetAddress","surname","system","thumbprint","upn","webpage","otherPhone","nameIdentifier","mobilePhone","anonymous","authentication","authorizationDecision","country","dateOfBirth","denyOnlySid","gender","givenName","hash","homePhone","locality","dns","x500DistinguishedName","MicrosoftClaimTypes","primaryGroupSid","primarySid","role","serialNumber","userData","version","windowsAccountName","windowsDeviceClaim","windowsDeviceGroup","windowsFqbnVersion","windowsSubAuthority","authenticationInstant","authenticationMethod","cookiePath","denyOnlyPrimaryGroupSid","denyOnlyPrimarySid","windowsUserClaim","denyOnlyWindowsDeviceGroup","dsa","expiration","expired","groupSid","isPersistent"],"mappings":"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","file":"static/js/main.9f123d5e.chunk.js","sourcesContent":["import * as React from 'react';\r\nimport {NavLink, NavLinkProps} from 'react-router-dom';\r\n\r\nexport interface NavLinkTrackActiveProps extends NavLinkProps {\r\n}\r\n\r\n/**\r\n * NavLink from react-router configured to track the active component with the active class. \r\n * \r\n * This simply returns a that is preconfigured with activeClassName=\"active\".\r\n */\r\nexport const NavLinkTrackActive = (props: NavLinkTrackActiveProps) => {\r\n const { to, exact, activeClassName, ...rest } = props;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\n","import {useParams} from \"react-router\";\r\n\r\n\r\n/**\r\n * Shortcut function to get the current claim id\r\n * from the url.\r\n */\r\nexport function useCurrentClaimId(): string | undefined {\r\n // if we are calling from inside a route, we can get it from use params\r\n let {id} = useParams();\r\n return id;\r\n}","import { WatchQueryFetchPolicy } from \"apollo-client\";\r\n\r\nexport const mainApiConfig = {\r\n endpoint: '/graphql',\r\n defaultFetchPolicy: 'cache-and-network' as WatchQueryFetchPolicy,\r\n //defaultFetchPolicy: 'cache-first' as WatchQueryFetchPolicy,\r\n};","import React from \"react\";\r\nimport {useLazyQuery} from \"@apollo/react-hooks\";\r\nimport gql from \"graphql-tag\";\r\nimport {mainApiConfig} from \"../../../configure/mainApiConfig\";\r\nimport {AsyncLoadOptions} from \"../../../shared/abstractStore\";\r\nimport {claimIdQuery} from \"../generated/claimIdQuery\";\r\n\r\n\r\nexport interface ClaimValidationResult {\r\n isLoading: boolean,\r\n called: boolean,\r\n claimId?: string\r\n errors: any,\r\n load: () => Promise\r\n}\r\n\r\n/**\r\n * Checks if the claim id is valid\r\n */\r\nexport function useValidateClaimId(claimId?: string | null, options?: AsyncLoadOptions): ClaimValidationResult {\r\n\r\n const [load, {loading, error, data, refetch, called}] = useLazyQuery(\r\n gql`\r\n query claimIdQuery($claimId: String!) {\r\n item : claim (id: $claimId) {\r\n id,\r\n number\r\n }\r\n }\r\n `,\r\n {\r\n variables: {claimId: claimId},\r\n fetchPolicy: mainApiConfig.defaultFetchPolicy,\r\n pollInterval: options?.pollInterval,\r\n onCompleted: (data) => {\r\n if(options?.onCompleted){\r\n options?.onCompleted(data);\r\n }\r\n }\r\n }\r\n )\r\n\r\n // Run the query (unless we are being lazy).\r\n React.useEffect(() => {\r\n if (!options?.lazy) {\r\n load();\r\n }\r\n }, [options, load, claimId])\r\n\r\n const refresh = React.useCallback(async () => {\r\n !refetch ? await load() : await refetch();\r\n }, [refetch, load]);\r\n\r\n return React.useMemo(() => ({\r\n isLoading: loading,\r\n claimId: data?.item?.id,\r\n errors: error,\r\n load: refresh,\r\n called,\r\n }), [called, data, refresh, loading, error]);\r\n}","import gql from \"graphql-tag\";\r\n\r\n\r\nexport const contractFieldsFragment = gql`\r\n fragment contractFields on Contract {\r\n id,\r\n name,\r\n customer,\r\n tatSlaDays\r\n }\r\n`\r\n","import gql from \"graphql-tag\";\r\n\r\n\r\nexport const dataFormDataFieldsFragment = gql`\r\n fragment dataFormDataFields on DataFormData {\r\n id,\r\n sharedDataKey,\r\n name,\r\n decimalValue,\r\n intValue,\r\n stringValue,\r\n textValue,\r\n }\r\n \r\n`","import gql from \"graphql-tag\";\r\n\r\n\r\nexport const equipmentTypeFieldsFragment = gql`\r\n fragment equipmentTypeFields on EquipmentType {\r\n id,\r\n name\r\n }\r\n\r\n`\r\n","import gql from \"graphql-tag\";\r\n\r\n\r\nexport const stateFieldsFragment = gql`\r\n \r\n fragment stateFields on State {\r\n id\r\n active\r\n name\r\n systemName\r\n description\r\n nextState\r\n status,\r\n trackerStep,\r\n trackerNumber\r\n }\r\n`;","import gql from \"graphql-tag\";\r\nimport {stateFieldsFragment} from \"./State\";\r\n\r\n\r\nexport const eventHistoryFieldsFragement = gql`\r\n fragment eventHistoryFields on EventHistory {\r\n id,\r\n eventDate,\r\n name,\r\n sharedKey,\r\n engineer,\r\n relatedState {\r\n ...stateFields\r\n }\r\n }\r\n ${stateFieldsFragment}\r\n`\r\n","import {AsyncLoadOptions, AsyncLoadResult} from \"../../../shared/abstractStore\";\r\nimport {useLazyQuery} from \"@apollo/react-hooks\";\r\nimport gql from \"graphql-tag\";\r\nimport {mainApiConfig} from \"../../../configure/mainApiConfig\";\r\nimport React from \"react\";\r\nimport {contractFieldsFragment} from \"../models/Contract\";\r\nimport {dataFormDataFieldsFragment} from \"../models/DataFormData\";\r\nimport {equipmentTypeFieldsFragment} from \"../models/EquipmentType\";\r\nimport {myClaimSupportingDetailsQuery} from \"../generated/myClaimSupportingDetailsQuery\";\r\nimport {eventHistoryFieldsFragement} from \"../models/EventHistory\";\r\nimport {ClaimQueryOptions} from \"./useMyClaim\";\r\n\r\n\r\n/**\r\n * Get claim and related state and spec details\r\n */\r\nexport function useMyClaimDetails(options: ClaimQueryOptions): AsyncLoadResult {\r\n\r\n const [load, {loading, error, data, refetch}] = useLazyQuery(\r\n gql`\r\n query myClaimSupportingDetailsQuery($id: String!){\r\n item: claim(id: $id){\r\n id,\r\n number,\r\n externalReference,\r\n policyNumber,\r\n endUserName,\r\n endUserEmail,\r\n endUserMobile,\r\n endUserPhone,\r\n registeredAddress,\r\n accessoriesListed,\r\n accessories,\r\n excessPaymentTaken,\r\n excessTakenDate,\r\n policyExcessAmount,\r\n contract {\r\n ...contractFields\r\n }\r\n equipmentType {\r\n ...equipmentTypeFields\r\n }\r\n dataFormData {\r\n ...dataFormDataFields\r\n }\r\n collectionArranged: claimEvent(name: \"Collection Arranged\") {\r\n ...eventHistoryFields\r\n }\r\n equipmentReceived: claimEvent(name: \"Claim state changed to Equipment Received.\") {\r\n ...eventHistoryFields\r\n }\r\n inspectionStart: claimEvent(name: \"Claim state changed to Inspection.\") {\r\n ...eventHistoryFields\r\n }\r\n repairStart: claimEvent(name: \"Claim state changed to Repair.\") {\r\n ...eventHistoryFields\r\n }\r\n awaitingReturn: claimEvent(name: \"Claim state changed to Awaiting Repaired Equipment Return to End User.\") {\r\n ...eventHistoryFields\r\n }\r\n equipmentReturned: claimEvent(name: \"Claim state changed to Repaired Equipment Returned to End User.\") {\r\n ...eventHistoryFields\r\n }\r\n awaitingVoucher: claimEvent(name: \"Claim state changed to Awaiting Voucher Issue.\") {\r\n ...eventHistoryFields\r\n }\r\n voucherIssued: claimEvent(name: \"Claim state changed to Voucher Issued to End User.\") {\r\n ...eventHistoryFields\r\n }\r\n awaitingAuthorisation: claimEvent(name: \"Claim state changed to Awaiting Authorisation.\") {\r\n ...eventHistoryFields\r\n }\r\n awaitingActivationLockRemoval: claimEvent(name: \"Claim state changed to Awaiting Activation Lock Removal.\") {\r\n ...eventHistoryFields\r\n }\r\n }\r\n }\r\n ${contractFieldsFragment} \r\n ${dataFormDataFieldsFragment} \r\n ${equipmentTypeFieldsFragment}\r\n ${eventHistoryFieldsFragement}\r\n `, {\r\n variables: {id: options.id},\r\n fetchPolicy: options.fetchPolicy ?? mainApiConfig.defaultFetchPolicy,\r\n pollInterval: options.pollInterval,\r\n onCompleted: (data) => {\r\n if (options.onCompleted){\r\n options.onCompleted(data);\r\n }\r\n }\r\n }\r\n )\r\n\r\n // Run the query (unless we are being lazy).\r\n React.useEffect(() => {\r\n if (!options.lazy) {\r\n load();\r\n }\r\n }, [options.lazy, load])\r\n\r\n const refresh = React.useCallback(\r\n async () => {!refetch ? await load() : await refetch();},\r\n [refetch, load]);\r\n\r\n return React.useMemo(() => ({\r\n data: data ?? ({} as any),\r\n refresh: refresh,\r\n isLoading: loading,\r\n errors: error\r\n }), [data, refresh, loading, error]);\r\n\r\n}\r\n","import * as React from 'react';\r\nimport {NavItem, NavLink} from 'reactstrap';\r\nimport {NavLinkTrackActive} from '../shared/NavLinkTrackActive';\r\nimport {useCurrentClaimId} from \"../../api/main/claims/useCurrentClaimId\";\r\nimport {useValidateClaimId} from \"../../api/main/claims/useValidateClaimId\";\r\nimport { useMyClaimDetails } from '../../api/main/claims/useMyClaimDetails';\r\n\r\n/**\r\n * Primary navigation menu for the app.\r\n */\r\nexport const Navigation = () => {\r\n\r\n const claimId = useCurrentClaimId();\r\n const { called, claimId: validatedId } = useValidateClaimId(claimId);\r\n var { data: { item: claim } } = useMyClaimDetails({ id: claimId })\r\n\r\n if (called && (!validatedId || validatedId !== claimId)) {\r\n return <>\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n <> {\"My Claim\"}\r\n \r\n \r\n {\r\n (claim?.policyExcessAmount ?? 0) > 0 ? (\r\n \r\n \r\n <> {\"Excess Payment\"}\r\n \r\n \r\n ) : null\r\n }\r\n \r\n \r\n <> {\"Report\"}\r\n \r\n \r\n {/*\r\n \r\n <> {\"Photos\"}\r\n \r\n */}\r\n \r\n \r\n <> {\"My Details\"}\r\n \r\n \r\n \r\n \r\n <> {\"Messages\"}\r\n \r\n \r\n {/* \r\n \r\n <> {\"History\"}\r\n \r\n */}\r\n {/*\r\n \r\n <> {\"Quote\"}\r\n \r\n */}\r\n \r\n \r\n <> {\"Track My Parcel\"}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","import './appNavbarBrand.scss';\r\n\r\nimport * as React from 'react';\r\n\r\n/**\r\n * Navbar brand image for the app. \r\n */\r\nexport const AppNavbarBrand = () => {\r\n return (\r\n
\r\n {/*
\r\n
\r\n
\r\n
*/}\r\n
\r\n );\r\n};","import * as React from 'react';\r\nimport { Spinner } from 'reactstrap';\r\n\r\nexport interface LoadingIndicatorProps {\r\n className?: string,\r\n fullWidth?: boolean,\r\n size?: 'sm' | 'md' | 'lg',\r\n inline?: boolean,\r\n}\r\n\r\n/**\r\n * Simple spinner that can be shown during loading.\r\n */\r\nexport const LoadingIndicator = (props: LoadingIndicatorProps) => {\r\n const { className, fullWidth, size, inline } = props;\r\n\r\n const style = React.useMemo(() => {\r\n let ret: React.CSSProperties = {};\r\n if (fullWidth) {\r\n ret.width = '100%';\r\n ret.textAlign = 'center';\r\n }\r\n\r\n if (inline) {\r\n ret.display = 'inline';\r\n }\r\n\r\n return ret;\r\n }, [inline, fullWidth])\r\n\r\n return (\r\n
\r\n \r\n Loading\r\n
\r\n );\r\n};\r\n\r\n","import './claimCurrentStateSummary.scss';\r\n\r\nimport React from \"react\";\r\nimport {LoadingIndicator} from \"./LoadingIndicator\";\r\n\r\n\r\nexport const ClaimCurrentStateSummary = (props: {claimState?: string, isLoading?: boolean}) => {\r\n const {claimState = \"\", isLoading = false} = props;\r\n\r\n\r\n return (\r\n
\r\n {isLoading ? (\r\n
\r\n \r\n
\r\n ) : (\r\n
{claimState}
\r\n )}\r\n
\r\n )\r\n}","import './claimNextStageSummary.scss';\r\n\r\nimport * as React from \"react\";\r\nimport {Col, Container, Row} from \"reactstrap\";\r\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\r\nimport {LoadingIndicator} from \"./LoadingIndicator\";\r\n\r\nexport function ClaimNextStageSummary(props: {nextStage?: string, readyByDate?: string, isLoading?: boolean}) {\r\n const {nextStage, readyByDate, isLoading = false} = props;\r\n\r\n return (\r\n \r\n \r\n \r\n
\r\n \r\n Next Stage\r\n
\r\n {isLoading ? (\r\n \r\n ) : (\r\n
{nextStage}
\r\n )}\r\n \r\n \r\n
Est. Completion
\r\n {isLoading ? (\r\n \r\n ) : (\r\n
{readyByDate}
\r\n )}\r\n \r\n
\r\n
\r\n\r\n )\r\n}\r\n","import * as React from 'react';\r\n\r\nexport interface ConditionalFragmentProps {\r\n showIf: boolean,\r\n children?: React.ReactNode,\r\n}\r\n\r\n/**\r\n * React component that only renders its contents if props.showIf is true.\r\n * \r\n * This is designed to make a more readable version of {condition? (...): null} were its helpful,\r\n * but is not designed to replace that pattern altogether, in particular, that pattern is always better when an else or condition chaining is to be used.\r\n * \r\n * @param props\r\n */\r\nexport const ConditionalFragment = (props: ConditionalFragmentProps) => {\r\n const { showIf, children } = props;\r\n\r\n if (!showIf) {\r\n return (<>);\r\n }\r\n\r\n return (<>{children});\r\n};\r\n","import React from \"react\";\r\nimport './myReference.scss';\r\nimport {ConditionalFragment} from \"../../shared/conditionalFragment\";\r\nimport {LoadingIndicator} from \"./LoadingIndicator\";\r\n\r\nexport const MyReference = (props: {reference?: string, isLoading?: boolean}) => {\r\n\r\n const {reference, isLoading = false} = props;\r\n\r\n return (\r\n
\r\n
\r\n
My Reference
\r\n \r\n \r\n \r\n {!isLoading && (\r\n
{reference ?? \"\"}
\r\n )}\r\n
\r\n
\r\n )\r\n}\r\n","import gql from \"graphql-tag\";\r\nimport {partFieldsFragment} from \"./Part\";\r\n\r\n\r\nexport const quoteDetailFieldsFragment = gql`\r\n fragment quoteDetailFields on QuoteDetail {\r\n id,\r\n partId,\r\n quoteId,\r\n description,\r\n total,\r\n vat,\r\n\r\n }\r\n `","import gql from \"graphql-tag\";\r\nimport {quoteDetailFieldsFragment} from \"./QuoteDetail\";\r\n\r\n\r\nexport const quoteFieldsFragment = gql`\r\n fragment quoteFields on Quote {\r\n id,\r\n claimId,\r\n total,\r\n vat,\r\n quoteDetails {\r\n ...quoteDetailFields\r\n }\r\n }\r\n \r\n ${quoteDetailFieldsFragment}\r\n`","import gql from \"graphql-tag\";\r\n\r\n\r\nexport const messageFieldsFragment = gql`\r\n \r\n fragment messageFields on PortalMessage {\r\n id,\r\n claimId,\r\n dateSent,\r\n subject,\r\n body,\r\n read,\r\n active\r\n \r\n }\r\n`","import gql from \"graphql-tag\";\r\nimport {dataFormDataFieldsFragment} from \"./DataFormData\";\r\nimport {eventHistoryFieldsFragement} from \"./EventHistory\";\r\nimport {quoteFieldsFragment} from \"./Quote\";\r\nimport {stateFieldsFragment} from \"./State\";\r\nimport {messageFieldsFragment} from \"./Message\";\r\n\r\n\r\nexport const claimFieldsFragment = gql`\r\n \r\n fragment claimFields on Claim {\r\n id,\r\n number,\r\n externalReference,\r\n policyNumber,\r\n lastStateChangeDate,\r\n stateDeadline,\r\n endUserName,\r\n endUserEmail,\r\n endUserMobile,\r\n endUserPhone,\r\n collectionAddress,\r\n deliveryAddress,\r\n nextCollectionAttemptDate,\r\n lastCollectionAttemptDate,\r\n nextDeliveryAttemptDate,\r\n lastDeliveryAttemptDate,\r\n accessories,\r\n accessoriesListed,\r\n dpdcollectionNumber,\r\n dpddeliveryNumber,\r\n collectionTrackingDetails,\r\n deliveryTrackingDetails,\r\n deliveryCourier,\r\n courier,\r\n excessPaymentTaken,\r\n excessTakenDate,\r\n policyExcessAmount,\r\n dataFormData {\r\n ...dataFormDataFields\r\n }\r\n events {\r\n ...eventHistoryFields\r\n }\r\n quote {\r\n ...quoteFields\r\n }\r\n state {\r\n ...stateFields\r\n }\r\n messages {\r\n ...messageFields\r\n }\r\n }\r\n \r\n ${dataFormDataFieldsFragment}\r\n ${eventHistoryFieldsFragement}\r\n ${quoteFieldsFragment}\r\n ${stateFieldsFragment}\r\n ${messageFieldsFragment}\r\n`","import {AsyncLoadResult} from \"../../../shared/abstractStore\";\r\nimport {useLazyQuery} from \"@apollo/react-hooks\";\r\nimport gql from \"graphql-tag\";\r\nimport {claimFieldsFragment} from \"../models/Claim\";\r\nimport {claimSummaryQuery, claimSummaryQuery_item} from \"../generated/claimSummaryQuery\";\r\nimport {mainApiConfig} from \"../../../configure/mainApiConfig\";\r\nimport React from \"react\";\r\nimport {stateFieldsFragment} from \"../models/State\";\r\nimport {contractFieldsFragment} from \"../models/Contract\";\r\nimport {ClaimQueryOptions} from \"./useMyClaim\";\r\nimport {eventHistoryFields} from \"../generated/eventHistoryFields\";\r\n\r\n\r\ninterface ClaimSummaryOptions extends ClaimQueryOptions {\r\n number?: string | null\r\n}\r\n\r\nexport interface ClaimSummaryResult {\r\n item?: claimSummaryQuery_item,\r\n finalEvent?: Partial\r\n}\r\n\r\n\r\nexport function useClaimSummary(options: ClaimSummaryOptions)\r\n : AsyncLoadResult {\r\n // create a query\r\n\r\n const [result, setResult] = React.useState(null);\r\n const [load, {loading, error, data, refetch}] = useLazyQuery(\r\n gql`\r\n query claimSummaryQuery($claimId: String, $number: String) {\r\n item : claim (id: $claimId, number: $number) {\r\n ...claimFields\r\n state {\r\n ...stateFields\r\n }\r\n contract {\r\n ...contractFields\r\n }\r\n equipmentReceived: claimEvent(name: \"Claim state changed to Equipment Received.\") {\r\n id,\r\n eventDate,\r\n name\r\n }\r\n }\r\n }\r\n ${claimFieldsFragment} ${stateFieldsFragment} ${contractFieldsFragment}\r\n `,\r\n {\r\n variables: {claimId: options.id},\r\n fetchPolicy: options.fetchPolicy ?? mainApiConfig.defaultFetchPolicy,\r\n pollInterval: options.pollInterval,\r\n onCompleted: (data) => {\r\n if(options.onCompleted){\r\n options?.onCompleted(data);\r\n }\r\n }\r\n }\r\n );\r\n\r\n // TODO: maybe encapsulate below into a reusable hook?\r\n\r\n // Run the query (unless we are being lazy).\r\n React.useEffect(() => {\r\n if (!options.lazy) {\r\n load();\r\n }\r\n }, [options.lazy, load]);\r\n\r\n // Parse data\r\n React.useEffect(() => {\r\n if (!result && data?.item) {\r\n\r\n const finalEvent = data.item.events\r\n .find(e => (e?.relatedState?.trackerNumber === 3 && e.relatedState.trackerStep === 100))\r\n\r\n setResult({\r\n item: data.item,\r\n finalEvent: finalEvent ?? undefined\r\n });\r\n\r\n }\r\n }, [data, result])\r\n\r\n\r\n // Return the results.\r\n const refresh = React.useCallback(async () => { !refetch ? await load() : await refetch(); }, [refetch, load]);\r\n return React.useMemo(() => ({\r\n data: result ?? ({} as any),\r\n refresh: refresh,\r\n isLoading: loading,\r\n errors: error\r\n }), [result, refresh, loading, error]);\r\n}","import './claimProgressStatus.scss'\r\n\r\nimport React from \"react\";\r\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\r\nimport {ConditionalFragment} from \"../../shared/conditionalFragment\";\r\nimport {LoadingIndicator} from \"./LoadingIndicator\";\r\n\r\nexport interface ClaimProgressStatusProps {\r\n status?: string,\r\n isLoading?: boolean,\r\n size?: 'sm' | 'md' | 'lg'\r\n}\r\n\r\nexport const ClaimProgressStatus = (props: ClaimProgressStatusProps) => {\r\n const {status, size = \"md\", isLoading = false} = props;\r\n\r\n let statusClass;\r\n switch (status){\r\n case \"Finished\":\r\n statusClass = 'finished'\r\n break;\r\n case \"In Progress\":\r\n statusClass = \"in-progress\"\r\n break;\r\n case \"On Hold\":\r\n statusClass = \"on-hold\"\r\n break;\r\n default:\r\n statusClass = \"in-progress\"\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n {status}\r\n
\r\n
\r\n )\r\n}","import React from \"react\";\r\nimport moment from \"moment\";\r\nimport momentBusinessDays from \"moment-business-days\";\r\nimport {eventHistoryFields} from \"../generated/eventHistoryFields\";\r\n\r\n\r\nexport interface ClaimReadyByDateParams {\r\n claimId?: string;\r\n dateReceived?: moment.Moment;\r\n collectionDate?: moment.Moment;\r\n finalEvent?: Partial;\r\n contractSlaDays: number;\r\n}\r\n\r\n/**\r\n * Returns the ready by date for a claim, which is\r\n * either the SLA date worked out from received date\r\n * or SLA date approximated from estimated arrival date\r\n */\r\nexport function useClaimReadyByDate(params: ClaimReadyByDateParams): moment.Moment | null {\r\n\r\n const {\r\n claimId,\r\n dateReceived,\r\n collectionDate,\r\n contractSlaDays,\r\n finalEvent,\r\n } = params;\r\n\r\n return React.useMemo(() => {\r\n\r\n if (!claimId) return null;\r\n // grab the date of final event if its at 100%\r\n if (finalEvent?.eventDate && finalEvent?.relatedState?.trackerStep === 100) {\r\n return moment(finalEvent.eventDate);\r\n }\r\n // at this point we have to work out sla date. First, from received date\r\n if (dateReceived) {\r\n return moment(moment(dateReceived).add(contractSlaDays, \"days\"));\r\n }\r\n // if device hasn't been delivered, work out approximate arrival date and sla\r\n if (collectionDate && collectionDate > moment(\"2000-01-01\")) {\r\n return moment(momentBusinessDays(collectionDate).businessAdd(2, \"days\"));\r\n }\r\n // asked to return contract SLA + 3 days instead of null\r\n return moment(moment.now()).add(contractSlaDays, \"days\").add(3, \"days\");\r\n\r\n }, [claimId, collectionDate, dateReceived, contractSlaDays, finalEvent])\r\n\r\n\r\n}\r\n","import './claimSummary.scss';\r\n\r\nimport * as React from 'react';\r\nimport {Col, Container, Row} from \"reactstrap\";\r\nimport {ClaimCurrentStateSummary} from \"../shared/ClaimCurrentStateSummary\";\r\nimport {ClaimNextStageSummary} from \"../shared/ClaimNextStageSummary\";\r\nimport {MyReference} from \"../shared/MyReference\";\r\nimport {useCurrentClaimId} from \"../../api/main/claims/useCurrentClaimId\";\r\nimport {useClaimSummary} from \"../../api/main/claims/useClaimSummary\";\r\nimport {ClaimProgressStatus} from \"../shared/ClaimProgressStatus\";\r\nimport {useValidateClaimId} from \"../../api/main/claims/useValidateClaimId\";\r\nimport {useClaimReadyByDate} from \"../../api/main/claims/useClaimReadyByDate\";\r\n\r\n\r\nexport const ClaimSummary = () => {\r\n\r\n const [readyByDate, setReadyByDate] = React.useState(\"\");\r\n\r\n const claimId = useCurrentClaimId();\r\n const {called, claimId: validatedId} = useValidateClaimId(claimId);\r\n\r\n const {data: {item, finalEvent}, isLoading} = useClaimSummary({\r\n id: claimId\r\n });\r\n\r\n const readyDate = useClaimReadyByDate({\r\n claimId: claimId,\r\n collectionDate: item?.nextCollectionAttemptDate,\r\n dateReceived: item?.equipmentReceived?.eventDate,\r\n contractSlaDays: item?.contract?.tatSlaDays ?? 0,\r\n finalEvent,\r\n })\r\n\r\n React.useEffect(() => {\r\n if (readyDate){\r\n setReadyByDate(readyDate?.format(\"DD/MM/YYYY\") ?? \"\")\r\n }\r\n }, [readyDate])\r\n\r\n if (called && (!validatedId || validatedId !== claimId)) {\r\n return <>\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\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n","import './header.scss';\r\n\r\nimport * as React from 'react';\r\nimport {Col, Container, Nav, Row} from 'reactstrap';\r\nimport {Link, Route} from 'react-router-dom';\r\nimport {Navigation} from './Navigation';\r\nimport {AppNavbarBrand} from '../shared/AppNavbarBrand';\r\nimport {ChatButton} from \"../shared/ChatButton\";\r\nimport {ClaimSummary} from \"./ClaimSummary\";\r\n\r\n\r\nexport function Header(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\n \r\n {/*Display claim specific fields if we have a claim*/}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\n","import * as React from 'react';\r\n//import { AppFooter } from '@coreui/react';\r\n\r\nexport const Footer = () => {\r\n //return (\r\n // \r\n //
\r\n //
\r\n //
\r\n //);\r\n\r\n return (<>);\r\n};\r\n\r\n","import './layout.scss';\r\n\r\nimport * as React from 'react';\r\nimport {Header} from './Header';\r\nimport {Footer} from './Footer';\r\n\r\nimport {RouteEntry} from '../../shared/routes';\r\nimport {LoadingIndicator} from \"../shared/LoadingIndicator\";\r\nimport {Helmet} from \"react-helmet-async\";\r\n\r\nexport interface LayoutProps {\r\n appRoutes: Array,\r\n children: React.ReactNode\r\n}\r\n\r\nexport const Layout = (props: LayoutProps) => {\r\n\r\n\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n }>\r\n {props.children}\r\n {/*LiveChat iframe:*/}\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { Route, Redirect, RouteProps } from 'react-router-dom';\r\nimport { isNullOrUndefined } from 'util';\r\nimport { useAuthenticatedState } from '../../api/api-authorization/useAuthenticatedState';\r\nimport { useCurrentUserRoles } from '../../api/account';\r\n\r\nexport interface AuthorizeRouteProps extends RouteProps {\r\n requireRole?: string | Array,\r\n}\r\n\r\n/**\r\n * Route component that will check for authorization before showing its component.\r\n * \r\n * NOTE this was originally based on AuthorizeRoute from Microsoft's template but converted to typescript and React hooks and to support more than just the component prop.\r\n * @param props\r\n */\r\nexport const AuthorizeRoute = (props: AuthorizeRouteProps) => {\r\n const { isAuthenticated } = useAuthenticatedState();\r\n const { data: { roles: usersRoles } } = useCurrentUserRoles();\r\n const [ hasRequiredRole, setHasRequiredRole ] = React.useState(); \r\n\r\n // Load the roles only if we need to.\r\n React.useEffect(() => {\r\n if (props.requireRole && !isNullOrUndefined(usersRoles)) {\r\n const requireRoles = [props.requireRole].flat(2);\r\n let hasRole = false;\r\n for (let roleToCheck of requireRoles) {\r\n if (usersRoles.find(it => it === roleToCheck)) {\r\n hasRole = true;\r\n break;\r\n }\r\n }\r\n setHasRequiredRole(hasRole);\r\n }\r\n }, [props.requireRole, usersRoles, setHasRequiredRole, isAuthenticated]);\r\n\r\n // Render the UI\r\n //\r\n const { component: Component, render, children, ...rest } = props;\r\n\r\n // Show nothing until we have a defined authenticated state.\r\n if (isNullOrUndefined(isAuthenticated)) {\r\n return (<>);\r\n }\r\n \r\n // If we need to check a role, but can't yet return nothing.\r\n if (props.requireRole && isNullOrUndefined(usersRoles)) {\r\n return (<>);\r\n }\r\n\r\n // If we don't have the role we require, show text saying so.\r\n if (hasRequiredRole === false) {\r\n return (<>Sorry you do not have permission to access this area.);\r\n }\r\n\r\n return (\r\n {\r\n if (isAuthenticated) {\r\n if (Component) {\r\n return ;\r\n } else if (render) {\r\n return render(props);\r\n } else {\r\n return children;\r\n }\r\n } else {\r\n const redirectUrl = `/authentication/login?returnUrl=${encodeURIComponent(window.location.href)}`\r\n return \r\n }\r\n }} />\r\n );\r\n};\r\n","import * as React from 'react';\r\nimport {Route, Switch} from 'react-router';\r\nimport {RouteEntry} from '../../shared/routes';\r\nimport {AuthorizeRoute} from '../../shared/authorizeRoute';\r\n\r\nexport interface AppRoutesProps {\r\n routes: Array,\r\n}\r\n\r\nexport const AppRoutes = (props: AppRoutesProps) => {\r\n const { routes } = props;\r\n\r\n return (\r\n \r\n {\r\n routes.map((item, index) => {\r\n if (item.authorize || item.requireRole) {\r\n return ();\r\n }\r\n\r\n // Otherwise a simple Route will do.\r\n return ();\r\n })\r\n }\r\n \r\n );\r\n};\r\n","import './background.scss';\r\n\r\nimport * as React from 'react';\r\n\r\nexport interface BackgroundProps {\r\n children?: React.ReactNode,\r\n className?: string,\r\n}\r\n\r\n/**\r\n * Background for making the back of screens look nicer.\r\n * @param props\r\n */\r\nexport const Background = (props: BackgroundProps) => {\r\n const { children, className } = props;\r\n\r\n return (\r\n
\r\n {children}\r\n
\r\n );\r\n};","import './accountBackground.scss';\r\n\r\nimport * as React from 'react';\r\nimport { BackgroundProps, Background } from '../shared/Background';\r\n\r\nexport interface AccountBackgroundProps extends BackgroundProps {\r\n}\r\n\r\nexport const AccountBackground = (props: AccountBackgroundProps) => {\r\n const { className, ...rest } = props;\r\n\r\n return ();\r\n};","import * as React from 'react';\r\nimport { LoadingIndicator } from '../shared/LoadingIndicator';\r\nimport { AccountBackground } from '../account/AccountBackground';\r\n\r\nexport interface LoginWaitingProps {\r\n waiting: boolean,\r\n message: string\r\n}\r\n\r\n/**\r\n * Component that is shown during waiting of any login or logout options.\r\n * \r\n * If you want to change the \"waiting\" screen between redirects for all login actions, this is where to do it.\r\n */\r\nexport const LoginWaiting = (props: LoginWaitingProps) => {\r\n const { waiting, message } = props;\r\n\r\n return (\r\n \r\n {/**/}\r\n\r\n {\r\n waiting ? (\r\n <>\r\n \r\n
\r\n {message}\r\n
\r\n \r\n ) : (\r\n <>\r\n {\r\n !!message ? (
{message}
) : null\r\n }\r\n \r\n )\r\n }\r\n
\r\n );\r\n};","export const QueryParameterNames = {\r\n ReturnUrl: 'returnUrl',\r\n Message: 'message'\r\n};\r\n\r\nexport const LogoutActions = {\r\n LogoutCallback: 'logout-callback',\r\n Logout: 'logout',\r\n LoggedOut: 'logged-out'\r\n};\r\n\r\nexport const LoginActions = {\r\n Login: 'login',\r\n LoginCallback: 'login-callback',\r\n LoginFailed: 'login-failed',\r\n Profile: 'profile',\r\n Register: 'register'\r\n};\r\n\r\nconst prefix = '/authentication';\r\n\r\nexport const ApplicationPaths = {\r\n DefaultLoginRedirectPath: '/',\r\n ApiAuthorizationPrefix: prefix,\r\n Login: `${prefix}/${LoginActions.Login}`,\r\n LoginFailed: `${prefix}/${LoginActions.LoginFailed}`,\r\n LoginCallback: `${prefix}/${LoginActions.LoginCallback}`,\r\n Register: `${prefix}/${LoginActions.Register}`,\r\n Profile: `${prefix}/${LoginActions.Profile}`,\r\n LogOut: `${prefix}/${LogoutActions.Logout}`,\r\n LoggedOut: `${prefix}/${LogoutActions.LoggedOut}`,\r\n LogOutCallback: `${prefix}/${LogoutActions.LogoutCallback}`,\r\n IdentityRegisterPath: '/account/register',\r\n IdentityManagePath: '/profile'\r\n};\r\n","import * as React from 'react'\r\nimport { LoginWaiting } from './LoginWaiting';\r\nimport { LoginActions, QueryParameterNames, ApplicationPaths } from './ApiAuthorizationConstants';\r\nimport authService, { AuthenticationResultStatus } from '../../api/api-authorization/AuthorizeService';\r\n\r\nexport interface LoginProps {\r\n action: string,\r\n}\r\n\r\nexport interface LoginState {\r\n message: string | undefined | null,\r\n}\r\n\r\n// The main responsibility of this component is to handle the user's login process.\r\n// This is the starting point for the login process. Any component that needs to authenticate\r\n// a user can simply perform a redirect to this component with a returnUrl query parameter and\r\n// let the component perform the login and return back to the return url.\r\nexport class Login extends React.Component {\r\n constructor(props: LoginProps) {\r\n super(props);\r\n\r\n this.state = {\r\n message: undefined\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const action = this.props.action;\r\n switch (action) {\r\n case LoginActions.Login:\r\n this.login(this.getReturnUrl());\r\n break;\r\n case LoginActions.LoginCallback:\r\n this.processLoginCallback();\r\n break;\r\n case LoginActions.LoginFailed:\r\n const params = new URLSearchParams(window.location.search);\r\n const error = params.get(QueryParameterNames.Message);\r\n this.setState({ message: error });\r\n break;\r\n case LoginActions.Profile:\r\n this.redirectToProfile();\r\n break;\r\n case LoginActions.Register:\r\n this.redirectToRegister();\r\n break;\r\n default:\r\n throw new Error(`Invalid action '${action}'`);\r\n }\r\n }\r\n\r\n render() {\r\n const action = this.props.action;\r\n const { message } = this.state;\r\n\r\n switch (action) {\r\n case LoginActions.Login:\r\n return ();\r\n case LoginActions.LoginCallback:\r\n return ();\r\n case LoginActions.Profile:\r\n case LoginActions.Register:\r\n return ();\r\n default:\r\n throw new Error(`Invalid action '${action}'`);\r\n }\r\n }\r\n\r\n async login(returnUrl: string) {\r\n const state = { returnUrl };\r\n const result = await authService.signIn(state);\r\n switch (result.status) {\r\n case AuthenticationResultStatus.Redirect:\r\n break;\r\n case AuthenticationResultStatus.Success:\r\n await this.navigateToReturnUrl(returnUrl);\r\n break;\r\n case AuthenticationResultStatus.Fail:\r\n this.setState({ message: result.message });\r\n break;\r\n default:\r\n throw new Error(`Invalid status result ${result.status}.`);\r\n }\r\n }\r\n\r\n async processLoginCallback() {\r\n const url = window.location.href;\r\n const result = await authService.completeSignIn(url);\r\n switch (result.status) {\r\n case AuthenticationResultStatus.Redirect:\r\n // There should not be any redirects as the only time completeSignIn finishes\r\n // is when we are doing a redirect sign in flow.\r\n throw new Error('Should not redirect.');\r\n case AuthenticationResultStatus.Success:\r\n await this.navigateToReturnUrl(this.getReturnUrl(result.state));\r\n break;\r\n case AuthenticationResultStatus.Fail:\r\n this.setState({ message: result.message });\r\n break;\r\n default:\r\n throw new Error(`Invalid authentication result status '${result.status}'.`);\r\n }\r\n }\r\n\r\n getReturnUrl(state?: any) {\r\n const params = new URLSearchParams(window.location.search);\r\n const fromQuery = params.get(QueryParameterNames.ReturnUrl);\r\n if (fromQuery && !fromQuery.startsWith(`${window.location.origin}/`)) {\r\n // This is an extra check to prevent open redirects.\r\n throw new Error(\"Invalid return url. The return url needs to have the same origin as the current page.\")\r\n }\r\n return (state && state.returnUrl) || fromQuery || `${window.location.origin}/`;\r\n }\r\n\r\n redirectToRegister() {\r\n this.redirectToApiAuthorizationPath(`${ApplicationPaths.IdentityRegisterPath}?${QueryParameterNames.ReturnUrl}=${encodeURIComponent(ApplicationPaths.Login)}`);\r\n }\r\n\r\n redirectToProfile() {\r\n this.redirectToApiAuthorizationPath(ApplicationPaths.IdentityManagePath);\r\n }\r\n\r\n redirectToApiAuthorizationPath(apiAuthorizationPath: string) {\r\n const redirectUrl = `${window.location.origin}${apiAuthorizationPath}`;\r\n // It's important that we do a replace here so that when the user hits the back arrow on the\r\n // browser he gets sent back to where it was on the app instead of to an endpoint on this\r\n // component.\r\n window.location.replace(redirectUrl);\r\n }\r\n\r\n navigateToReturnUrl(returnUrl: string) {\r\n // It's important that we do a replace here so that we remove the callback uri with the\r\n // fragment containing the tokens from the browser history.\r\n window.location.replace(returnUrl);\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { LogoutActions, QueryParameterNames, ApplicationPaths } from './ApiAuthorizationConstants';\r\nimport { LoginWaiting } from './LoginWaiting';\r\nimport authService, { AuthenticationResultStatus } from '../../api/api-authorization/AuthorizeService';\r\nimport { Redirect } from 'react-router';\r\n\r\nexport interface LogoutProps {\r\n action: string,\r\n}\r\n\r\nexport interface LogoutState {\r\n message: string | undefined,\r\n isReady: boolean,\r\n authenticated: boolean,\r\n}\r\n\r\n// The main responsibility of this component is to handle the user's logout process.\r\n// This is the starting point for the logout process, which is usually initiated when a\r\n// user clicks on the logout button on the LoginMenu component.\r\nexport class Logout extends React.Component {\r\n constructor(props: LogoutProps) {\r\n super(props);\r\n\r\n this.state = {\r\n message: undefined,\r\n isReady: false,\r\n authenticated: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const action = this.props.action;\r\n switch (action) {\r\n case LogoutActions.Logout:\r\n if (!!window.history.state.state.local) {\r\n this.logout(this.getReturnUrl());\r\n } else {\r\n // This prevents regular links to /authentication/logout from triggering a logout\r\n this.setState({ isReady: true, message: \"The logout was not initiated from within the page.\" });\r\n }\r\n break;\r\n case LogoutActions.LogoutCallback:\r\n this.processLogoutCallback();\r\n break;\r\n case LogoutActions.LoggedOut:\r\n this.setState({ isReady: true, message: \"You successfully logged out!\" });\r\n break;\r\n default:\r\n throw new Error(`Invalid action '${action}'`);\r\n }\r\n\r\n this.populateAuthenticationState();\r\n }\r\n\r\n render() {\r\n const { isReady, message } = this.state;\r\n if (!isReady) {\r\n return ();\r\n }\r\n\r\n const action = this.props.action;\r\n switch (action) {\r\n case LogoutActions.Logout:\r\n return ();\r\n case LogoutActions.LogoutCallback:\r\n return ();\r\n case LogoutActions.LoggedOut:\r\n return ();\r\n default:\r\n throw new Error(`Invalid action '${action}'`);\r\n } }\r\n\r\n async logout(returnUrl: string) {\r\n const state = { returnUrl };\r\n const isauthenticated = await authService.isAuthenticated();\r\n if (isauthenticated) {\r\n const result = await authService.signOut(state);\r\n switch (result.status) {\r\n case AuthenticationResultStatus.Redirect:\r\n break;\r\n case AuthenticationResultStatus.Success:\r\n await this.navigateToReturnUrl(returnUrl);\r\n break;\r\n case AuthenticationResultStatus.Fail:\r\n this.setState({ message: result.message });\r\n break;\r\n default:\r\n throw new Error(\"Invalid authentication result status.\");\r\n }\r\n } else {\r\n this.setState({ message: \"You successfully logged out!\" });\r\n }\r\n }\r\n\r\n async processLogoutCallback() {\r\n const url = window.location.href;\r\n const result = await authService.completeSignOut(url);\r\n switch (result.status) {\r\n case AuthenticationResultStatus.Redirect:\r\n // There should not be any redirects as the only time completeAuthentication finishes\r\n // is when we are doing a redirect sign in flow.\r\n throw new Error('Should not redirect.');\r\n case AuthenticationResultStatus.Success:\r\n await this.navigateToReturnUrl(this.getReturnUrl(result.state));\r\n break;\r\n case AuthenticationResultStatus.Fail:\r\n this.setState({ message: result.message });\r\n break;\r\n default:\r\n throw new Error(\"Invalid authentication result status.\");\r\n }\r\n }\r\n\r\n async populateAuthenticationState() {\r\n const authenticated = await authService.isAuthenticated();\r\n this.setState({ isReady: true, authenticated });\r\n }\r\n\r\n getReturnUrl(state?: any) {\r\n const params = new URLSearchParams(window.location.search);\r\n const fromQuery = params.get(QueryParameterNames.ReturnUrl);\r\n if (fromQuery && !fromQuery.startsWith(`${window.location.origin}/`)) {\r\n // This is an extra check to prevent open redirects.\r\n throw new Error(\"Invalid return url. The return url needs to have the same origin as the current page.\")\r\n }\r\n return (state && state.returnUrl) ||\r\n fromQuery ||\r\n `${window.location.origin}${ApplicationPaths.LoggedOut}`;\r\n }\r\n\r\n navigateToReturnUrl(returnUrl: string) {\r\n return window.location.replace(returnUrl);\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { Login } from './Login'\r\nimport { Logout } from './Logout'\r\nimport { RouteEntry } from '../../shared/routes';\r\n\r\nexport const apiAuthorizationRoutes: Array = [\r\n { path: '/authentication/login', render: () => loginAction('login') },\r\n { path: '/authentication/login-callback', render: () => loginAction('login-callback') },\r\n { path: '/authentication/login-failed', render: () => loginAction('login-failed') },\r\n { path: '/authentication/profile', render: () => loginAction('profile') },\r\n { path: '/authentication/register', render: () => loginAction('register') },\r\n\r\n { path: '/authentication/logout', render: () => logoutAction('logout') },\r\n { path: '/authentication/logout-callback', render: () => logoutAction('logout-callback') },\r\n { path: '/authentication/logged-out', render: () => logoutAction('logged-out') },\r\n];\r\n\r\nfunction loginAction(name: string){\r\n return ();\r\n}\r\n\r\nfunction logoutAction(name: string) {\r\n return ();\r\n}\r\n","import * as React from 'react';\r\nimport { Alert, AlertProps, Row, Col, Badge } from 'reactstrap';\r\nimport { userFriendlyErrorMessage, FriendlyErrorMessage } from '../userFriendlyErrorMessage';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { ConditionalFragment } from '../conditionalFragment';\r\n\r\n\r\nexport interface AlertOnErrorsProps extends AlertProps {\r\n errors?: any,\r\n children?: any,\r\n simple?: boolean,\r\n}\r\n\r\n/**\r\n * Alert that shows an if error is set.\r\n * @param props\r\n */\r\nexport const AlertOnErrors = (props: AlertOnErrorsProps) => {\r\n const { errors, color, simple, ...rest } = props;\r\n\r\n const [openErrors, setOpenErrors] = React.useState>([]);\r\n const isOpen = React.useCallback((key: string) => !!openErrors.find(it => it === key), [openErrors]);\r\n const toggleOpen = React.useCallback((key: string) => {\r\n setOpenErrors(prevState => {\r\n if (prevState.find(it => it === key)) {\r\n return prevState.filter(it => it !== key);\r\n } else {\r\n return [...prevState, key];\r\n }\r\n });\r\n }, [setOpenErrors]);\r\n\r\n // Get the friendly version of each error.\r\n const friendlyErrors = React.useMemo(() => {\r\n // Flatten up to three levels of errors (wrapping in our own array first) and removing any\r\n // empty items (e.g. null, undefined, '').\r\n let flatErrors = [errors].flat(4).filter(item => item ? true : false);\r\n\r\n // Make friendly versions of all the error messages.\r\n const ret: Array = [flatErrors.map(error => userFriendlyErrorMessage(error))].flat(2);\r\n return ret;\r\n }, [errors])\r\n\r\n // Group errors with the same message together.\r\n const errorGroups = React.useMemo(() => {\r\n let groups: Array<{ message: string, errors: Array }> = [];\r\n\r\n for (const error of friendlyErrors) {\r\n let group = groups.find(item => item.message === error.message);\r\n if (!group) {\r\n group = { message: error.message, errors: [] };\r\n groups.push(group);\r\n }\r\n\r\n group.errors.push(error);\r\n }\r\n\r\n return groups;\r\n }, [friendlyErrors]);\r\n\r\n // If we have no errors, return nothing.\r\n if (!friendlyErrors.length) {\r\n return null;\r\n }\r\n\r\n // If we are in simple mode, return a list of friendly messages with no grouping or options to expand for more details.\r\n if (!!simple) {\r\n return (\r\n \r\n {props.children}\r\n\r\n {\r\n friendlyErrors.map((item, index) => (\r\n
\r\n {item.message}\r\n
\r\n ))\r\n }\r\n
\r\n );\r\n }\r\n\r\n // If we are not in simple mode (the default) then provide an interactive list of errors with grouping and the ability to expand for more\r\n // details if the user wants to.\r\n return (\r\n \r\n {props.children}\r\n {\r\n errorGroups.map(item => (\r\n
\r\n \r\n \r\n
toggleOpen(item.message)} style={{ cursor: 'pointer' }}>\r\n \r\n <> {\r\n item.errors.length > 1 ? (\r\n \r\n {item.errors.length}\r\n \r\n ) : (\r\n \r\n \r\n \r\n )\r\n }\r\n 1}>\r\n <> \r\n \r\n
\r\n \r\n \r\n
\r\n {item.message}\r\n
\r\n \r\n {\r\n item.errors.map((error, index) => (\r\n
\r\n \r\n
\r\n {error.details}\r\n
\r\n
\r\n \r\n {JSON.stringify(error?.error, null, 4)}\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 './externalLoginButton.scss';\r\n\r\nimport * as React from 'react';\r\nimport { ButtonProps, Button } from 'reactstrap';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nexport interface ExternalLoginButtonProps extends ButtonProps {\r\n provider: string,\r\n providerDisplayName?: string,\r\n}\r\n\r\ninterface ProviderDisplayOptions {\r\n text: string,\r\n icon: IconProp,\r\n className: string,\r\n}\r\n\r\n/**\r\n * Button for a an external service that can be used to log in. \r\n */\r\nexport const ExternalLoginButton = (props: ExternalLoginButtonProps) => {\r\n const { t } = useTranslation();\r\n const { provider, providerDisplayName, className: propsClassName, ...rest } = props;\r\n\r\n const { text, icon, className } = React.useMemo((): ProviderDisplayOptions => {\r\n switch (provider) {\r\n case 'Microsoft':\r\n return { text: t('externalLoginButton.microsoftAccountProviderText', 'Microsoft Account'), icon: ['fab', 'microsoft'], className: 'microsoft' };\r\n case 'Google':\r\n return { text: providerDisplayName ?? provider, icon: ['fab', 'google'], className: 'google' };\r\n case 'Facebook':\r\n return { text: providerDisplayName ?? provider, icon: ['fab', 'facebook'], className: 'facebook' };\r\n case 'Twitter':\r\n return { text: providerDisplayName ?? provider, icon: ['fab', 'twitter'], className: 'twitter' };\r\n default:\r\n return { text: providerDisplayName ?? provider, icon: 'external-link-alt', className: 'other' };\r\n }\r\n }, [provider, providerDisplayName, t]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n","import './formButtons.scss';\r\n\r\nimport * as React from 'react';\r\n\r\nexport interface FormButtonsProps {\r\n className?: string,\r\n children: React.ReactNode\r\n}\r\n\r\n/**\r\n * Container for buttons (e.g. sumbit) at the bottom of a form. \r\n */\r\nexport const FormButtons = (props: FormButtonsProps) => {\r\n const { className, children } = props;\r\n\r\n return (\r\n
\r\n {children}\r\n
\r\n );\r\n};","import './banner.scss';\r\n\r\nimport * as React from 'react';\r\nimport { Container } from 'reactstrap';\r\n\r\nexport interface BannerProps {\r\n children?: React.ReactNode,\r\n className?: string,\r\n fluid?: boolean,\r\n}\r\n\r\n/**\r\n * Banner to show title and toolbars at the top of pages.\r\n * @param props\r\n */\r\nexport const Banner = (props: BannerProps) => {\r\n const { children, className, fluid } = props;\r\n\r\n return (\r\n
\r\n \r\n {children}\r\n \r\n
\r\n );\r\n};","import './loginContainer.scss';\r\n\r\nimport * as React from 'react';\r\nimport { Container, ContainerProps, ListGroupItem, ListGroup } from 'reactstrap';\r\nimport {useMediaQuery} from \"react-responsive\";\r\n\r\nexport interface MainContainerProps extends ContainerProps {\r\n}\r\n\r\n/**\r\n * Input that is hooked up for searching as the user types, by introducing an appropriate delay before raising the onSearch event.\r\n */\r\nexport const LoginContainer = (props: MainContainerProps) => {\r\n const { className, children, ...rest } = props;\r\n const isSmallScreen = useMediaQuery({maxWidth: \"768px\"});\r\n\r\n return (\r\n \r\n \r\n {children}\r\n
\r\n \r\n {\"© Greenbridge Technology\"}\r\n {/*{\"Terms & Conditions\"}*/}\r\n {\"Privacy Notice\"}\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n","import {RouteEntry} from \"../../shared/routes\";\r\nimport {Login} from \"./Login\";\r\n\r\nexport const accountRoutes: Array = [\r\n { path: '/account/login', component: Login },\r\n];\r\n","import * as React from \"react\";\r\nimport {Alert, CustomInput, Form, FormGroup, Label, Spinner} from \"reactstrap\";\r\nimport {AlertOnErrors} from \"../../shared/alertOnErrors\";\r\nimport {useHistory} from \"react-router-dom\";\r\nimport {useChanges} from \"../../shared/useChanges\";\r\nimport {useValidatorCallback} from \"pojo-validator-react\";\r\nimport {ValidatedInput} from \"pojo-validator-reactstrap\";\r\nimport {ButtonAsync} from \"reactstrap-buttonasync\"\r\nimport {LoadingIndicator} from \"../../components/shared/LoadingIndicator\";\r\nimport {\r\n useExternalAuthenticationSchemes,\r\n useLoginWithPasswordCallback,\r\n useResendConfirmationEmailCallback,\r\n useStartExternalLoginCallback\r\n} from \"../../api/account\";\r\nimport {Login as LoginModel} from '../../api/account/models/Login';\r\nimport {useTranslation} from \"react-i18next\";\r\nimport {ExternalLoginButton} from \"./ExternalLoginButton\";\r\nimport {FormButtons} from \"../shared/FormButtons\";\r\nimport {Banner} from \"../shared/Banner\";\r\nimport './login.scss'\r\nimport {LoginContainer} from \"../shared/LoginContainer\";\r\n\r\n/**\r\n * Login screen.\r\n */\r\nexport const Login = () => {\r\n const { t } = useTranslation();\r\n const { data: { externalAuthenticationSchemes }, isLoading, errors: loadErrors } = useExternalAuthenticationSchemes();\r\n const [login, { isExecuting: isLoggingIn, errors: loginErrors }] = useLoginWithPasswordCallback();\r\n const [startExternalLogin] = useStartExternalLoginCallback();\r\n const [isPendingEmailConfirmation, setIsPendingEmailConfirmation] = React.useState(false);\r\n const history = useHistory();\r\n\r\n const [resendConfirmationEmail,\r\n { isExecuting: isResendingConfirmationEmail, errors: resendConfirmationEmailErrors }\r\n ] = useResendConfirmationEmailCallback();\r\n\r\n const [hasSentConfirmationEmail, setHasSentConfirmationEmail] = React.useState(false);\r\n\r\n const { model, change } = useChanges({ email: '', password: '', rememberMe: true });\r\n\r\n // Need the URL to pass on to registration or 2faif we redirect to it.\r\n const params = new URLSearchParams(window.location.search);\r\n const returnUrl = params.get('returnUrl') ?? params.get('ReturnUrl') ?? '';\r\n\r\n /**\r\n * Validate the model before trying to use it.\r\n */\r\n const [validate, validationErrors] = useValidatorCallback((validation, fieldsToCheck) => {\r\n const rules = {\r\n email: () => !model.email ? t('login.emailRequired', 'Email is required') : '',\r\n password: () => !model.password ? t('login.passwordRequired', 'Password is required') : '',\r\n };\r\n\r\n validation.checkRules(rules, fieldsToCheck);\r\n }, [model]);\r\n\r\n /**\r\n * Perform a login by and handle the result.\r\n */\r\n const [isDoingFullPageRedirect, setIsDoingFullPageRedirect] = React.useState(false);\r\n const performLogin = React.useCallback(async (): Promise => {\r\n if (!validate()) {\r\n return;\r\n }\r\n\r\n let result = await login(model);\r\n\r\n if (result) {\r\n setIsPendingEmailConfirmation(result.requiresEmailConfirmation);\r\n\r\n if (result.requiresTwoFactor) {\r\n history.push(`/account/loginWithTwoFactor?returnUrl=${encodeURIComponent(result.returnUrl)}`);\r\n }\r\n\r\n // Redirect the whole page (not just the react app) as its likely the returnUrl is handled on the server.\r\n if (result.succeeded) {\r\n // Redirect the whole page (not just react) to the returnUrl to let the server handle as well as the client.\r\n if (!result.requiresEmailConfirmation && !result.requiresTwoFactor) {\r\n setIsDoingFullPageRedirect(true);\r\n window.location.href = result.returnUrl;\r\n }\r\n }\r\n }\r\n }, [login, model, setIsPendingEmailConfirmation, history, validate, setIsDoingFullPageRedirect]);\r\n\r\n // Render the UI.\r\n return (\r\n <>\r\n \r\n \r\n

{t('login.signInHeading', 'Sign in')}

\r\n
\r\n
{ e.preventDefault(); await performLogin(); }}>\r\n \r\n {\r\n isPendingEmailConfirmation ?\r\n hasSentConfirmationEmail ? (\r\n \r\n <>{t('login.confirmationEmailHasBeenResent', 'Confirmation link to verify the email for this account has been resent. Please check your email to confirm.')} \r\n { e.preventDefault(); await resendConfirmationEmail(model.email); setHasSentConfirmationEmail(true); }}\r\n isExecuting={isResendingConfirmationEmail}\r\n executingChildren={<>{t('common.sending', 'Sending...')}}>\r\n {t('common.resendEmail', 'Resend email')}\r\n \r\n \r\n ) : (\r\n \r\n <>{t('login.mustConfirmEmailBeforeLogin', 'You need to confirm your account before you can sign in. Please check your email.')} \r\n { e.preventDefault(); await resendConfirmationEmail(model.email); setHasSentConfirmationEmail(true); }}\r\n isExecuting={isResendingConfirmationEmail}\r\n executingChildren={<>{t('common.sending', 'Sending...')}}>\r\n {t('common.resendEmail', 'Resend email')}\r\n \r\n \r\n ) : null\r\n }\r\n \r\n \r\n change({ email: e.currentTarget.value })}\r\n onBlur={e => validate('email')}\r\n validationErrors={validationErrors['email']} />\r\n \r\n \r\n \r\n change({ password: e.currentTarget.value })}\r\n onBlur={e => validate('password')}\r\n validationErrors={validationErrors['password']} />\r\n \r\n \r\n change({ rememberMe: e.currentTarget.checked })} />\r\n \r\n\r\n \r\n {t('login.loggingIn', 'Logging in...')}}>\r\n {t('login.logIn', 'Log in')}\r\n \r\n \r\n\r\n
\r\n {\r\n isLoading ? (\r\n \r\n ) : (\r\n <>\r\n
\r\n {\r\n !externalAuthenticationSchemes ? null\r\n : externalAuthenticationSchemes.length !== 0 ? (\r\n <>\r\n
{t('login.useExternalService', 'Or sign in using an identity provider')}
\r\n {\r\n externalAuthenticationSchemes.map((item) => (\r\n startExternalLogin(item.name, returnUrl)} />\r\n ))\r\n }\r\n \r\n )\r\n : null\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 './mainContainer.scss'; \r\n\r\nimport * as React from 'react';\r\nimport { Container, ContainerProps } from 'reactstrap';\r\n\r\nexport interface MainContainerProps extends ContainerProps {\r\n}\r\n\r\n/**\r\n * Input that is hooked up for searching as the user types, by introducing an appropriate delay before raising the onSearch event.\r\n */\r\nexport const MainContainer = (props: MainContainerProps) => {\r\n const { className, children, ...rest } = props;\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};","import { RouteEntry } from \"../../shared/routes\";\r\nimport { Home } from \"./Home\";\r\n\r\nexport const homeRoutes: Array = [\r\n { path: '/', exact: true, component: Home, authorize: false },\r\n\r\n];\r\n","import * as React from 'react';\r\nimport {Redirect} from 'react-router';\r\n\r\n/**\r\n * Default / home page.\r\n */\r\nexport const Home = () => {\r\n return (\r\n \r\n );\r\n};","import gql from \"graphql-tag\";\r\nimport {partFieldsFragment} from \"./Part\";\r\n\r\n\r\nexport const portalNotificationFieldsFragment = gql`\r\n fragment portalNotificationFields on PortalNotification {\r\n id,\r\n name,\r\n linkName,\r\n linkPath\r\n\r\n }\r\n `","import './notification.scss';\r\n\r\nimport React from \"react\";\r\nimport {useClaimNotification} from \"../../api/main/claims/useClaimNotification\";\r\nimport {useLocation} from \"react-router\";\r\nimport {Link} from \"react-router-dom\";\r\nimport {Container} from \"reactstrap\";\r\nimport {AlertOnErrors} from \"../../shared/alertOnErrors\";\r\n\r\n\r\nexport const Notification = (props: {claimId?: string, refreshRequired?: boolean}) => {\r\n const [refreshRequired, setRefreshRequired] = React.useState(props.refreshRequired ?? false);\r\n\r\n const location = useLocation();\r\n\r\n const {data: {item}, isLoading, errors, refresh} = useClaimNotification({id: props.claimId});\r\n\r\n React.useEffect(() => {\r\n if (refreshRequired) {\r\n setRefreshRequired(false);\r\n refresh();\r\n }\r\n }, [refresh, refreshRequired])\r\n\r\n if (isLoading && !item){\r\n return (<>);\r\n }\r\n\r\n // If we are an excess payment notification, then link to that tab instead of a modal.\r\n //\r\n // They previously had an issue where the /excess-payment was going on the end of the URL in the same way other notification links do. \r\n // My guess is this is caused from linkpath not loading yet so if linkpath is empty we will use \"\".\r\n const linkPath = item?.notification?.linkPath == \"/excess-payment\" ? `/excess-payment/${props.claimId}` : item?.notification?.linkPath ? location.pathname + (item?.notification?.linkPath ?? \"\") : \"\";\r\n\r\n\r\n return (\r\n item?.notification ? (\r\n \r\n \r\n
\r\n
{item.notification?.name}
\r\n
\r\n {item.notification.linkName}\r\n
\r\n
\r\n\r\n
\r\n ) : (\r\n <>\r\n )\r\n )\r\n}\r\n","import {AsyncLoadResult} from \"../../../shared/abstractStore\";\r\nimport {useLazyQuery} from \"@apollo/react-hooks\";\r\nimport gql from \"graphql-tag\";\r\nimport {mainApiConfig} from \"../../../configure/mainApiConfig\";\r\nimport React from \"react\";\r\nimport {portalNotificationFieldsFragment} from \"../models/PortalNotification\";\r\nimport {claimNotificationQuery} from \"../generated/claimNotificationQuery\";\r\nimport {ClaimQueryOptions} from \"./useMyClaim\";\r\n\r\n\r\nexport function useClaimNotification(options: ClaimQueryOptions)\r\n : AsyncLoadResult {\r\n // create a query\r\n\r\n const [load, {loading, error, data, refetch}] = useLazyQuery(\r\n gql`\r\n query claimNotificationQuery($claimId: String) {\r\n item : claim (id: $claimId) {\r\n id,\r\n number\r\n notification {\r\n ...portalNotificationFields\r\n }\r\n }\r\n }\r\n ${portalNotificationFieldsFragment}\r\n `,\r\n {\r\n variables: {claimId: options.id},\r\n fetchPolicy: options.fetchPolicy ?? mainApiConfig.defaultFetchPolicy,\r\n pollInterval: options.pollInterval,\r\n onCompleted: (data) => {\r\n if(options.onCompleted){\r\n options?.onCompleted(data);\r\n }\r\n }\r\n }\r\n )\r\n\r\n // Run the query (unless we are being lazy).\r\n React.useEffect(() => {\r\n if (!options.lazy) {\r\n load();\r\n }\r\n }, [options.lazy, load])\r\n\r\n // Return the results.\r\n const refresh = React.useCallback(async () => { !refetch ? await load() : await refetch(); }, [refetch, load]);\r\n return React.useMemo(() => ({\r\n data: data ?? ({} as any),\r\n refresh: refresh,\r\n isLoading: loading,\r\n errors: error\r\n }), [data, refresh, loading, error]);\r\n}\r\n","import './styledModal.scss';\r\n\r\nimport React from \"react\";\r\nimport {Modal, ModalProps} from \"reactstrap\";\r\n\r\n\r\n/**\r\n * Shared Bootsrap modal component with some common styling\r\n */\r\nexport function StyledModal(props: ModalProps){\r\n const {children, className, ...other} = props;\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}","import './pinEntry.scss';\r\n\r\nimport React from \"react\";\r\nimport {Button, FormGroup, Input, Label, Spinner} from \"reactstrap\";\r\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\r\nimport {ButtonAsync} from \"reactstrap-buttonasync\";\r\n\r\nexport interface PinEntryProps {\r\n onChangeCallback: (passcode: string) => void\r\n passcode?: string,\r\n isLoading: boolean,\r\n}\r\n\r\n\r\n/**\r\n * Form group containing input specialised for numeric PIN entry\r\n */\r\nexport function PinEntry(props: PinEntryProps) {\r\n const {onChangeCallback, isLoading = false, passcode: initialPasscode = \"\"} = props;\r\n\r\n const [passcode, setPasscode] = React.useState(initialPasscode);\r\n const [showPassword, setShowPassword] = React.useState(false);\r\n\r\n const toggleShowPassword = () => setShowPassword(!showPassword);\r\n\r\n function focusPrevious(currentName: string){\r\n // focus on change\r\n const currentFieldNumber = Number.parseInt(currentName.split(\"-\")[1]);\r\n // if value is empty, focus on previous element\r\n const pinElement = document.getElementsByName(`pin-${currentFieldNumber - 1}`)\r\n\r\n if (pinElement.length){\r\n pinElement[0].focus();\r\n }\r\n }\r\n\r\n function focusNext(currentName: string){\r\n // focus on change\r\n const currentFieldNumber = Number.parseInt(currentName.split(\"-\")[1]);\r\n // if value is empty, focus on previous element\r\n const pinElement = document.getElementsByName(`pin-${currentFieldNumber + 1}`)[0]\r\n\r\n // focus on next input if there is one\r\n if (pinElement) {\r\n pinElement.focus();\r\n } else {\r\n // otherwise lose focus on current element\r\n const currentElement = document.getElementsByName(currentName)[0];\r\n currentElement.blur();\r\n }\r\n }\r\n\r\n function pinKeyEvent(e: React.KeyboardEvent) {\r\n if (e.key === \"Backspace\" || e.key === \"Delete\"){\r\n e.currentTarget.value = \"\";\r\n\r\n const newPassCode = passcode.substring(0, passcode.length - 1);\r\n setPasscode(newPassCode);\r\n onChangeCallback(newPassCode);\r\n\r\n // if value is empty, focus on previous element\r\n focusPrevious(e.currentTarget.name)\r\n }\r\n }\r\n\r\n // pin change event\r\n function onPinInputChanged(e: React.ChangeEvent){\r\n if(!isNaN(Number(e.currentTarget.value))){\r\n if (e.currentTarget.value !== \"\") {\r\n\r\n const newPassCode = passcode + e.currentTarget.value;\r\n setPasscode(newPassCode);\r\n onChangeCallback(newPassCode);\r\n\r\n // if value was put in, focus on next element\r\n focusNext(e.currentTarget.name)\r\n }\r\n } else {\r\n // cancel input otherwise\r\n e.currentTarget.value = \"\";\r\n }\r\n }\r\n\r\n // pin focus event\r\n function onPinAreaClick(e: React.MouseEvent){\r\n // clear passcode\r\n setPasscode(\"\");\r\n onChangeCallback(passcode);\r\n\r\n const firstPinInput = document.getElementsByName(\"pin-1\")[0];\r\n if (firstPinInput){\r\n firstPinInput.focus();\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 e.preventDefault()}\r\n value={passcode[1] ?? \"\"}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n }>\r\n {\"Submit\"}\r\n \r\n
\r\n )\r\n}","import {Point} from \"./types\";\r\nimport React from \"react\";\r\n\r\n\r\n/**\r\n * convert client coordinates to canvas (parent element) coordinates\r\n */\r\nexport function clientPointToCanvas(canvasRef: React.RefObject, { x, y }: Point): Point | undefined {\r\n if (canvasRef?.current) {\r\n const rect = canvasRef.current.getBoundingClientRect();\r\n if (x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom) {\r\n return { x: x - rect.left, y: y - rect.top }\r\n }\r\n }\r\n}\r\n\r\n\r\n/**\r\n * get top-left coordinates of each node and return as an array\r\n * @param nodeSize: size in pixels of a node element\r\n * @param wrapperWidth: width in pixes of the pattern lock area\r\n * @param patternSize: number of nodes that exist in the row or col of the pattern (always equal)\r\n */\r\nexport function getNodePoints(nodeSize: number, wrapperWidth: number, patternSize: number): Point[] {\r\n\r\n // center of node\r\n const nodeHalfSize = nodeSize / 2;\r\n // surrounding area of the node\r\n const nodeAreaSize = wrapperWidth / patternSize;\r\n // center of the surrounding area of the node\r\n const halfNodeArea = nodeAreaSize / 2;\r\n\r\n return Array.from({ length: patternSize ** 2 }).map((_, i) => ({\r\n x: ((nodeAreaSize * (i % patternSize)) + halfNodeArea) - nodeHalfSize,\r\n y: ((nodeAreaSize * Math.floor(i / patternSize)) + halfNodeArea) - nodeHalfSize\r\n }));\r\n}\r\n\r\n\r\nexport function getConnectorPoint({ x, y }: Point, nodeSize: number, connectorThickness: number): Point {\r\n return {\r\n x: x + Math.floor(nodeSize / 2),\r\n y: y + Math.floor(nodeSize / 2) - Math.floor(connectorThickness / 2)\r\n }\r\n}\r\n\r\n/**\r\n* Check collision against pattern nodes. Points array contains coordinates for \r\n* the top-left corner of each node. We can use that and the width of the node to\r\n* calculate intersection.\r\n* Returns -1 when no intersect found\r\n*/\r\nexport function getCollidedPointIndex({ x, y }: Point, points: Point[], nodeSize: number) {\r\n for (let i = 0; i < points.length; i ++) {\r\n if (x > points[i].x\r\n && x < points[i].x + nodeSize\r\n && y > points[i].y\r\n && y < points[i].y + nodeSize\r\n ) return i;\r\n }\r\n return -1;\r\n}\r\n\r\n\r\n// get distance between two points\r\nexport function getDistance(a: Point, b: Point) {\r\n return Math.hypot(b.y - a.y, b.x - a.x);\r\n}\r\n\r\n\r\n// get rotation degree between two points with a being treated as the x plane\r\nexport function getAngle(a: Point, b: Point) {\r\n return Math.atan2(b.y - a.y, b.x - a.x)\r\n}\r\n\r\n/**\r\n * Returns an array of node numbers that have been intersected by a line from indexFrom to indexTo.\r\n * patternSize in this case is the size of a single axis of the pattern lock (by number of nodes). Pattern\r\n * is always square, so all sides are equal\r\n */\r\nexport function getIntersectedNodes(indexFrom: number, indexTo: number, patternSize: number): number[] {\r\n\r\n // get point coordinates from indexes\r\n const fromPoint: Point = { x: indexFrom % patternSize, y: Math.floor(indexFrom / patternSize) };\r\n const toPoint: Point = { x: indexTo % patternSize, y: Math.floor(indexTo / patternSize) };\r\n\r\n // there are three possible intersects available:\r\n // 1. Horizontal\r\n if (fromPoint.y === toPoint.y) {\r\n // get the absolute distance between two points on x axis\r\n const diff = Math.abs(fromPoint.x - toPoint.x);\r\n // if difference is small, ignore\r\n if (diff <= 1) return [];\r\n const points: number[] = [];\r\n\r\n for (let i = 0; i < diff; i++) {\r\n const point = (fromPoint.y * patternSize) + i + Math.min(fromPoint.x, toPoint.x);\r\n points.push(point);\r\n }\r\n return points;\r\n }\r\n\r\n // 2. Vertical\r\n if (fromPoint.x === toPoint.x) {\r\n\r\n // get the absolute distance between two points on y axis\r\n const diff = Math.abs(fromPoint.y - toPoint.y);\r\n // if difference is small, ignore\r\n if (diff <= 1) return [];\r\n const points: number[] = [];\r\n\r\n for (let i = 0; i < diff; i++) {\r\n const point = ((i + Math.min(fromPoint.y, toPoint.y)) * patternSize) + fromPoint.x;\r\n points.push(point);\r\n }\r\n return points;\r\n }\r\n\r\n // 3. Diagonal\r\n const xDiff = Math.abs(fromPoint.x - toPoint.x);\r\n const yDiff = Math.abs(fromPoint.y - toPoint.y);\r\n if (xDiff === yDiff && xDiff > 0) {\r\n // get diagonal direction\r\n const dirX = toPoint.x - fromPoint.x > 0 ? 1 : -1;\r\n const dirY = toPoint.y - fromPoint.y > 0 ? 1 : -1;\r\n\r\n const points: number[] = [];\r\n for (let i = 1; i < yDiff; i++) {\r\n const point = (((i * dirY) + fromPoint.y) * patternSize) + (i * dirX) + fromPoint.x;\r\n points.push(point);\r\n return points;\r\n }\r\n }\r\n\r\n return [];\r\n}","import './patternLock.scss';\r\n\r\nimport React from 'react';\r\nimport {Button, Container} from 'reactstrap';\r\nimport {Connector, ConnectorsProps, PatternLockNodeProps, PatternLockProps, Point} from \"./types\";\r\nimport {\r\n clientPointToCanvas,\r\n getAngle,\r\n getCollidedPointIndex,\r\n getConnectorPoint,\r\n getDistance,\r\n getIntersectedNodes,\r\n getNodePoints\r\n} from './helpers';\r\n\r\n\r\nexport function PatternLockNode(props: PatternLockNodeProps & React.HTMLProps) {\r\n const { selected = false, index, ...divProps } = props;\r\n\r\n return (\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\n/**\r\n * Component that is responsible for drawing connector lines\r\n * on the pattern lock\r\n */\r\nexport function Connectors(props: ConnectorsProps) {\r\n\r\n const {\r\n pattern,\r\n points,\r\n connectorThickness,\r\n nodeSize,\r\n canvasRef,\r\n initialMousePos = null,\r\n } = props;\r\n\r\n const [mouse, setMouse] = React.useState(null);\r\n React.useEffect(() => setMouse(initialMousePos), [initialMousePos])\r\n\r\n const { setMousePosition } = React.useMemo(() => ({\r\n setMousePosition: (point: Point): void => {\r\n const canvasPoint = clientPointToCanvas(canvasRef, point);\r\n if (canvasPoint) setMouse(canvasPoint);\r\n }\r\n }), [canvasRef])\r\n\r\n // subscribe to mouse and touch move events\r\n React.useEffect(() => {\r\n\r\n if (!initialMousePos) return;\r\n if (!canvasRef?.current) return;\r\n\r\n // copy ref inside the hook so we know it points to the same component\r\n // by the time cleanup is called\r\n const copiedRef = canvasRef.current;\r\n\r\n const onMouseMove = (e: MouseEvent) => {\r\n const point = clientPointToCanvas(canvasRef,{ x: e.clientX, y: e.clientY });\r\n if (!point) return;\r\n setMousePosition({ x: e.clientX, y: e.clientY });\r\n };\r\n\r\n const onTouchMove = (e: TouchEvent) => {\r\n setMousePosition({ x: e.touches[0].clientX, y: e.touches[0].clientY });\r\n }\r\n\r\n copiedRef.addEventListener(\"mousemove\", onMouseMove);\r\n copiedRef.addEventListener(\"touchmove\", onTouchMove);\r\n\r\n return () => {\r\n copiedRef?.removeEventListener(\"mousemove\", onMouseMove);\r\n copiedRef?.removeEventListener(\"touchmove\", onTouchMove);\r\n }\r\n }, [initialMousePos])\r\n\r\n\r\n // get connector points\r\n const connectors: Connector[] = [];\r\n for (let i = 0; i < pattern.length - 1; i++) {\r\n const currentPoint = points[pattern[i]];\r\n const nextPoint = points[pattern[i + 1]];\r\n connectors.push({\r\n from: getConnectorPoint(currentPoint, nodeSize, connectorThickness),\r\n to: getConnectorPoint(nextPoint, nodeSize, connectorThickness)\r\n })\r\n }\r\n\r\n // add connector being dragged\r\n if (mouse && pattern.length) {\r\n connectors.push({\r\n from: getConnectorPoint(points[pattern[pattern.length - 1]], nodeSize, connectorThickness),\r\n to: mouse\r\n })\r\n }\r\n\r\n return (\r\n <>\r\n {connectors.map(({ from, to }, i) => {\r\n return (\r\n\r\n
\r\n )\r\n })}\r\n \r\n )\r\n\r\n}\r\n\r\n\r\nexport function PatternLockWidget(props: PatternLockProps) {\r\n\r\n const {\r\n onChange,\r\n onFinished,\r\n pixelSize,\r\n pattern: initialPattern = [],\r\n size: patternSize = 3,\r\n } = props;\r\n\r\n\r\n // pattern lock state\r\n const [pattern, setPattern] = React.useState(initialPattern);\r\n const canvasRef = React.useRef(null);\r\n const [dragging, setDragging] = React.useState(false);\r\n const nodeSize = 35; // TODO: make this not hardcoded!\r\n\r\n // coordinates and points\r\n const [startPoint, setStartPoint] = React.useState(null);\r\n const [points, setPoints] = React.useState([]);\r\n\r\n function checkCollision({ x, y }: Point) {\r\n\r\n const nodeOverIndex = getCollidedPointIndex({ x, y }, points, nodeSize);\r\n\r\n checkCollisionFromIndex(nodeOverIndex);\r\n }\r\n\r\n function checkCollisionFromIndex(nodeOverIndex: number) {\r\n // if there is no collision, or collision is with previous node, ignore\r\n if (nodeOverIndex === -1) return;\r\n if (pattern[pattern.length - 1] === nodeOverIndex) return;\r\n if (pattern.indexOf(nodeOverIndex) !== -1) return;\r\n\r\n // get all nodes intersected between last and current nodes, select only those that haven't been selected\r\n const intersectedPoints = getIntersectedNodes(pattern[pattern.length - 1], nodeOverIndex, patternSize);\r\n\r\n const newPattern = [...pattern, ...intersectedPoints.filter(p => pattern.indexOf(p) === -1), nodeOverIndex];\r\n\r\n if (onChange) onChange(newPattern);\r\n setPattern(newPattern);\r\n }\r\n\r\n // event that handles mouse down event\r\n function onMouseDown({ clientX, clientY }: React.MouseEvent) {\r\n\r\n // set dragging and set initial point\r\n setDragging(true);\r\n const point = clientPointToCanvas(canvasRef, { x: clientX, y: clientY });\r\n if (!point) return;\r\n\r\n setStartPoint(point);\r\n // checkCollision(point);\r\n }\r\n\r\n function onTouchStart(e: React.TouchEvent) {\r\n // set dragging and set initial point\r\n\r\n setDragging(true);\r\n const point = clientPointToCanvas(canvasRef,{ x: e.touches[0].clientX, y: e.touches[0].clientY });\r\n if (!point) return;\r\n setStartPoint(point);\r\n checkCollision(point);\r\n }\r\n\r\n /* == workaround to fix the issue where changed pattern state did not save in checkCollisions method == */\r\n // triggers when a mouse or touch starts on a node\r\n function mouseDownNode(index: number) {\r\n setDragging(true);\r\n setPattern([index]);\r\n if (onChange) onChange([index]);\r\n }\r\n\r\n // triggers when a pressed mouse or touch enters node\r\n function mouseEnterNode(index: number) {\r\n if (dragging) {\r\n checkCollisionFromIndex(index);\r\n }\r\n }\r\n /* ======== */\r\n\r\n React.useEffect(() => {\r\n if (!dragging) return;\r\n if (!canvasRef?.current) return;\r\n\r\n // copy ref so it's the same object when we're unsubscribing\r\n const copiedRef = canvasRef.current;\r\n\r\n const onMouseMove = ({ clientX, clientY }: MouseEvent) => {\r\n const point = clientPointToCanvas(canvasRef,{ x: clientX, y: clientY });\r\n if (point) checkCollision(point);\r\n };\r\n const onTouchMove = ({ touches }: TouchEvent) => {\r\n const point = clientPointToCanvas(canvasRef,{ x: touches[0].clientX, y: touches[0].clientY });\r\n if (point) checkCollision(point);\r\n };\r\n\r\n copiedRef.addEventListener(\"mousemove\", onMouseMove);\r\n copiedRef.addEventListener(\"touchmove\", onTouchMove);\r\n return () => {\r\n copiedRef.removeEventListener(\"mousemove\", onMouseMove);\r\n copiedRef.removeEventListener(\"touchmove\", onTouchMove);\r\n };\r\n });\r\n\r\n // get top left points from each node in the pattern lock\r\n React.useEffect(() => {\r\n if (!pixelSize) return;\r\n const points = getNodePoints(nodeSize, pixelSize, patternSize);\r\n setPoints(points)\r\n }, [pixelSize]);\r\n\r\n // subscribe to mouse and touch release event\r\n React.useEffect(() => {\r\n const onRealease = () => {\r\n setDragging(false);\r\n setStartPoint(null);\r\n onFinished(pattern);\r\n };\r\n\r\n window.addEventListener(\"mouseup\", onRealease);\r\n window.addEventListener(\"touchend\", onRealease);\r\n\r\n return () => {\r\n window.removeEventListener(\"mouseup\", onRealease);\r\n window.removeEventListener(\"touchend\", onRealease);\r\n }\r\n });\r\n\r\n return (\r\n\r\n onTouchStart(e)}>\r\n \r\n {Array.from({ length: patternSize ** 2 }).map((_, index) => {\r\n return (\r\n
\r\n mouseEnterNode(index)}\r\n onMouseDown={e => mouseDownNode(index)}\r\n //onTouchMove={e => mouseEnterNode(index)}\r\n //onTouchStart={e => mouseDownNode(index)}\r\n\r\n\r\n />\r\n
\r\n )\r\n })}\r\n {points.length && canvasRef && (\r\n \r\n )}\r\n
\r\n \r\n \r\n )\r\n}\r\n\r\n\r\n\r\n","import './patternEntry.scss';\r\n\r\nimport React from \"react\";\r\nimport {Alert, FormGroup, Label, Spinner} from \"reactstrap\";\r\nimport {ButtonAsync} from \"reactstrap-buttonasync\";\r\nimport {PatternLockWidget} from \"../patternLock/PatternLock\";\r\nimport {useMediaQuery} from 'react-responsive';\r\nimport {ConditionalFragment} from \"../../shared/conditionalFragment\";\r\n\r\nexport interface PinEntryProps {\r\n onChangeCallback: (passcode: string) => void\r\n isLoading: boolean,\r\n active: boolean,\r\n}\r\n\r\n\r\n/**\r\n * Form group containing input specialised for pattern lock entry\r\n */\r\nexport function PatternEntry(props: PinEntryProps) {\r\n const { onChangeCallback, active, isLoading = false, } = props;\r\n const [valid, setValid] = React.useState(true);\r\n\r\n const isSmallScreen = useMediaQuery({maxWidth: \"768px\"});\r\n\r\n function onFinished(pattern: number[]) {\r\n // we have to tell pattern lock that we activated it when we click on its tab\r\n // this fixes a bug where it was tracking mouse events even though it was not visible\r\n if (!active) return;\r\n if (pattern.length > 0 && pattern.length < 4) {\r\n setValid(false);\r\n } else {\r\n setValid(true);\r\n onChangeCallback(pattern.join(\",\"))\r\n }\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n \r\n {\"Pattern must consist of at least 4 nodes!\"}\r\n \r\n
\r\n \r\n
\r\n }>\r\n {\"Submit\"}\r\n \r\n
\r\n )\r\n}","import \"./gdprConsentNotePart.scss\";\r\nimport * as React from 'react';\r\nimport {FormGroup, Label} from \"reactstrap\";\r\nimport {ValidatedInput} from \"pojo-validator-reactstrap\";\r\n\r\nexport interface GDPRConsentFormPartProps {\r\n validationErrors: string | string[];\r\n onChange?: (checked: boolean) => void,\r\n checked?: boolean,\r\n onBlur?: (e: React.FocusEvent) => void\r\n}\r\n\r\nexport const GDPRConsentFormPart = (props: GDPRConsentFormPartProps) => {\r\n const {checked = false, onChange, validationErrors, onBlur} = props;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","import './passcodeEntryModal.scss';\r\nimport React from \"react\";\r\nimport {StyledModal} from \"../shared/StyledModal\";\r\nimport {\r\n Button,\r\n Form,\r\n FormGroup,\r\n Input,\r\n Label,\r\n ModalBody,\r\n ModalFooter,\r\n ModalHeader,\r\n Nav,\r\n NavItem,\r\n NavLink,\r\n Spinner,\r\n TabContent,\r\n TabPane\r\n} from \"reactstrap\";\r\nimport {useChanges} from \"../../shared/useChanges\";\r\nimport {ButtonAsync} from \"reactstrap-buttonasync\";\r\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\r\nimport {useHistory} from \"react-router\";\r\nimport {useSubmitPasscode} from \"../../api/main/dataFormDatas/useSubmitPasscode\";\r\nimport {AlertOnErrors} from \"../../shared/alertOnErrors\";\r\nimport {useValidatorCallback} from \"pojo-validator-react\";\r\nimport {useCurrentClaimId} from \"../../api/main/claims/useCurrentClaimId\";\r\nimport {PinEntry} from \"./PinEntry\";\r\nimport {PatternEntry} from \"./PatternEntry\";\r\nimport {GDPRConsentFormPart} from \"../shared/GDPRConsentFormPart\";\r\n\r\n\r\ninterface PasscodeEntryModel {\r\n passcode: string,\r\n claimId: string,\r\n passcodeType: 'pattern' | 'pin' | 'password',\r\n gdprConsent?: boolean,\r\n}\r\n\r\nexport function PasscodeEntry(props: { onSubmitCallback?: (passcode?: string) => void }) {\r\n\r\n const claimId = useCurrentClaimId();\r\n\r\n // modal and tab states\r\n const history = useHistory();\r\n const [modal, setModal] = React.useState(history.location.pathname.includes(\"/submit-passcode\"));\r\n const [activeTab, setActiveTab] = React.useState(\"password\");\r\n const [showPassword, setShowPassword] = React.useState(false);\r\n // we have to tell pattern lock that we activated it when we click on its tab\r\n // this fixes a bug where it was tracking mouse events even though it was not visible\r\n const [patternLockActive, setPatternLockActive] = React.useState(false);\r\n\r\n\r\n // submit passcode mutation callback\r\n const [submitPasscodeMutation, { errors: submitErrors, isExecuting: isSubmitting }] = useSubmitPasscode();\r\n\r\n // model changes and validation\r\n const { model, change } = useChanges({ passcode: \"\", claimId: claimId ?? \"\", passcodeType: \"password\", gdprConsent: false})\r\n const [validate, validationErrors] = useValidatorCallback((validation, fieldsToCheck) => {\r\n console.log(`Validating: ${model.passcode}, ${model.passcodeType}`);\r\n const rules = {\r\n passcode: () => !model.passcode ? \"Passcode is required\" : \"\",\r\n gdprConsent: () => !model.gdprConsent ? 'Please tick this box if you consent to our Privacy Notice' : ''\r\n };\r\n\r\n validation.checkRules(rules, fieldsToCheck);\r\n }, [model])\r\n\r\n // toggle modals and tabs\r\n const toggleModal = () => setModal(!modal);\r\n const toggleShowPassword = () => setShowPassword(!showPassword);\r\n const toggleTab = (tab: 'password' | 'pattern' | 'pin') => {\r\n change({passcodeType: tab});\r\n setPatternLockActive(tab === \"pattern\");\r\n setActiveTab(tab);\r\n };\r\n\r\n const onPasscodeChange = (model: Partial) => {\r\n change({...model});\r\n }\r\n\r\n // validate model and submit passcode\r\n const submitPasscode = React.useCallback(async () => {\r\n if (!validate()) {\r\n return;\r\n }\r\n const {gdprConsent, ...rest} = model;\r\n\r\n await submitPasscodeMutation(rest);\r\n\r\n // close modal after we are done\r\n setModal(false);\r\n\r\n }, [validate, model, submitPasscodeMutation])\r\n\r\n\r\n return (\r\n {\r\n history.push(history.location.pathname.replace(\"/submit-passcode\", \"\"));\r\n if (props.onSubmitCallback) {\r\n props.onSubmitCallback();\r\n }\r\n }}\r\n >\r\n\r\n \r\n {\"Submit your device passcode\"}\r\n

{\"In order to progress your claim, we require your passcode for this device.\"}

\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
{ e.preventDefault(); console.log(model); await submitPasscode() }}>\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n onPasscodeChange({ passcode: e.currentTarget.value , passcodeType: \"password\"})}\r\n onBlur={e => validate('passcode')}\r\n />\r\n \r\n }>\r\n {\"Submit\"}\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
{ e.preventDefault(); await submitPasscode() }}>\r\n onPasscodeChange({passcodeType: \"pin\", passcode: p})} />\r\n \r\n
\r\n \r\n
{ e.preventDefault(); await submitPasscode() }}>\r\n onPasscodeChange({ passcode: p, passcodeType: \"pattern\" })} />\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n change({gdprConsent: checked})}\r\n onBlur={() => validate(\"gdprConsent\")}\r\n checked={model.gdprConsent}\r\n />\r\n
\r\n
\r\n\r\n
\r\n )\r\n}\r\n","import {useMutation} from \"@apollo/react-hooks\";\r\nimport gql from \"graphql-tag\";\r\nimport {useAsyncCallback} from \"react-use-async-callback\";\r\nimport {dataFormDataFieldsFragment} from \"../models/DataFormData\";\r\nimport {SetPasscodeInput} from \"../generated/globalTypes\";\r\nimport {AsyncActionStatus} from \"../../../shared/abstractStore\";\r\nimport {submitPasscode, submitPasscodeVariables} from \"../generated/submitPasscode\";\r\n\r\n\r\n/**\r\n * Get a callback to update delivery address for the claim\r\n */\r\nexport function useSubmitPasscode(): [(model: SetPasscodeInput) => Promise, AsyncActionStatus] {\r\n const [mutationAction, {error}] = useMutation(\r\n gql`\r\n mutation submitPasscode($model: SetPasscodeInput!) {\r\n setPasscode(model: $model) {\r\n ...dataFormDataFields\r\n }\r\n }\r\n ${dataFormDataFieldsFragment}\r\n `);\r\n\r\n // Wrap the mutation in a standard callback.\r\n const [action, {isExecuting, errors: actionErrors}] = useAsyncCallback(\r\n async (model: SetPasscodeInput) => {\r\n if (model.claimId === \"\") throw new Error(\"Could not get claim id!\")\r\n const result = await mutationAction({variables: {model: model}});\r\n if (result.errors && result.errors.length){\r\n throw result.errors;\r\n }\r\n }, [mutationAction]\r\n )\r\n\r\n return [action, { isExecuting: isExecuting, errors: error ? error.message : actionErrors }];\r\n}","import './icloudModal.scss';\r\nimport React from \"react\";\r\nimport {StyledModal} from \"../shared/StyledModal\";\r\nimport {Button, ModalBody, ModalHeader} from \"reactstrap\";\r\nimport {useHistory} from \"react-router\";\r\nimport {useCurrentClaimId} from \"../../api/main/claims/useCurrentClaimId\";\r\nimport {useSubmitIcloudStatus} from \"../../api/main/dataFormDatas/useSubmitIcloudStatus\";\r\nimport {AlertOnErrors} from \"../../shared/alertOnErrors\";\r\nimport {LoadingIndicator} from \"./LoadingIndicator\";\r\nimport {ConditionalFragment} from \"../../shared/conditionalFragment\";\r\n\r\n\r\nexport function ICloudModal(props: {onSubmitCallback?: (data?: string) => void}){\r\n\r\n const claimId = useCurrentClaimId();\r\n const [submitIcloudStatus, {errors, isExecuting}] = useSubmitIcloudStatus()\r\n\r\n // modal and tab states\r\n const history = useHistory();\r\n const [modal, setModal] = React.useState(history.location.pathname.includes(\"/remove-icloud\"));\r\n\r\n // toggle modals and tabs\r\n const toggleModal = () => setModal(!modal);\r\n\r\n // submit icloud status\r\n const submit = (claimId: string, iCloudOff: boolean) => {\r\n submitIcloudStatus({claimId: claimId, iCloudOff: iCloudOff});\r\n setModal(false);\r\n }\r\n\r\n return (\r\n {\r\n history.push(history.location.pathname.replace(\"/remove-icloud\", \"\"));\r\n if (props.onSubmitCallback) {\r\n props.onSubmitCallback();\r\n }\r\n }}\r\n >\r\n \r\n {\"Confirm iCloud Removal\"}\r\n

{\"In order to progress your claim, you need to remove iCloud lock from your device.\"}

\r\n

\r\n {\"Need help? \"}\r\n \r\n {\"Click here\"}\r\n \r\n {\" to view our iCloud Removal guide\"}\r\n

\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n","import {useMutation} from \"@apollo/react-hooks\";\r\nimport gql from \"graphql-tag\";\r\nimport {useAsyncCallback} from \"react-use-async-callback\";\r\nimport {dataFormDataFieldsFragment} from \"../models/DataFormData\";\r\nimport {AsyncActionStatus} from \"../../../shared/abstractStore\";\r\nimport {ConfirmIcloudLockInput} from \"../generated/globalTypes\";\r\nimport {submitIcloudStatus, submitIcloudStatusVariables} from \"../generated/submitIcloudStatus\";\r\n\r\n\r\n/**\r\n * Get a callback to update delivery address for the claim\r\n */\r\nexport function useSubmitIcloudStatus(): [(model: ConfirmIcloudLockInput) => Promise, AsyncActionStatus] {\r\n const [mutationAction, {error}] = useMutation(\r\n gql`\r\n mutation submitIcloudStatus($model: ConfirmIcloudLockInput!) {\r\n confirmIcloudLock(model: $model) {\r\n ...dataFormDataFields\r\n }\r\n }\r\n ${dataFormDataFieldsFragment}\r\n `);\r\n\r\n // Wrap the mutation in a standard callback.\r\n const [action, {isExecuting, errors: actionErrors}] = useAsyncCallback(\r\n async (model: any) => {\r\n if (model.claimId === \"\") throw new Error(\"Could not get claim id!\")\r\n const result = await mutationAction({variables: {model: model}});\r\n if (result.errors && result.errors.length){\r\n throw result.errors;\r\n }\r\n }, [mutationAction]\r\n )\r\n\r\n return [action, { isExecuting: isExecuting, errors: error ? error.message : actionErrors }];\r\n}","import './notification.scss';\r\n\r\nimport React from \"react\";\r\nimport {Container} from \"reactstrap\";\r\nimport {useClaimSummary} from \"../../api/main/claims/useClaimSummary\";\r\n\r\n\r\nexport interface ClaimStateNotificationProps {\r\n claimId?: string,\r\n stateName?: string,\r\n children?: React.ReactNode\r\n}\r\n\r\nexport const ClaimStateNotification = (props: ClaimStateNotificationProps) => {\r\n\r\n const {data: {item}, isLoading} = useClaimSummary({id: props.claimId});\r\n if (isLoading && !item){\r\n return (<>);\r\n }\r\n\r\n // show message when claim is sent to external repair\r\n if (item?.state?.systemName === props.stateName) {\r\n return (\r\n \r\n
\r\n
\r\n {props.children}\r\n
\r\n
\r\n
\r\n )\r\n }\r\n if (!props.claimId && props.children) {\r\n return (\r\n \r\n
\r\n
\r\n {props.children}\r\n
\r\n
\r\n\r\n
\r\n )\r\n }\r\n\r\n return (\r\n <>\r\n )\r\n}\r\n","import './mainContainer.scss';\r\n\r\nimport * as React from 'react';\r\nimport {MainContainer, MainContainerProps} from \"./MainContainer\";\r\nimport {useCurrentClaimId} from \"../../api/main/claims/useCurrentClaimId\";\r\nimport {Redirect, Route} from \"react-router\";\r\nimport {useValidateClaimId} from \"../../api/main/claims/useValidateClaimId\";\r\nimport {Notification} from \"./Notification\";\r\nimport {PasscodeEntry} from \"../passcodeEntry/PasscodeEntryModal\";\r\nimport {ICloudModal} from \"./ICloudModal\";\r\nimport {ClaimStateNotification} from \"./ClaimStateNotification\";\r\n\r\n\r\n/**\r\n * Checks that a valid claim id is in the address bar\r\n * before rendering its children. Otherwise redirects to\r\n * Track My Claim\r\n */\r\nexport const TrackedClaimContainer = (props: MainContainerProps) => {\r\n // todo: this can be better. we are manually hiding notification on submit\r\n const [, setState] = React.useState();\r\n\r\n\r\n function handleUpdate() {\r\n //passing empty object will re-render the component\r\n setState({});\r\n }\r\n\r\n const { className, children } = props;\r\n\r\n // get claim id in the query string\r\n const currentClaimId = useCurrentClaimId();\r\n\r\n // get validation query function\r\n const {claimId, isLoading, called} = useValidateClaimId(currentClaimId);\r\n\r\n // show nothing until we validated the claim\r\n if ((isLoading || !called) && claimId === undefined){\r\n return (<>)\r\n }\r\n\r\n if (called && claimId && currentClaimId === claimId) {\r\n\r\n return (\r\n \r\n \r\n <>\r\n {\"Your device is currently with an Authorised Apple Service Provider and is subject to Apple's service level agreements. \" +\r\n \"In some cases this may be a little longer than the estimated date above\"}\r\n \r\n \r\n \r\n {children}\r\n handleUpdate()}/>}/>\r\n handleUpdate()}/>}/>\r\n \r\n );\r\n\r\n } else {\r\n const redirect = {\r\n pathname: \"/track\",\r\n search:`?returnUrl=${encodeURIComponent(window.location.href)}`\r\n }\r\n return \r\n }\r\n\r\n};\r\n","import './dateView.scss';\r\n\r\n\r\nimport React from \"react\";\r\nimport moment from \"moment\";\r\nimport {LoadingIndicator} from \"./LoadingIndicator\";\r\nimport {ConditionalFragment} from \"../../shared/conditionalFragment\";\r\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\r\nimport {faCircle} from \"@fortawesome/free-regular-svg-icons\";\r\n\r\nexport interface DateViewProps {\r\n date?: moment.Moment,\r\n showTime?: boolean,\r\n size?: 'sm' | 'md' | 'lg'\r\n placeholder?: boolean,\r\n isLoading?: boolean,\r\n showNoDataIcon?: boolean\r\n}\r\n\r\n\r\n// Represents a date in a fancy way\r\nexport const DateView = (props: DateViewProps) => {\r\n\r\n const {\r\n date,\r\n placeholder = false,\r\n isLoading = false,\r\n showTime = false,\r\n showNoDataIcon = false,\r\n size = 'md'\r\n } = props;\r\n\r\n const year = date?.format(\"YYYY\") ?? \"\";\r\n const month = date?.format(\"MMM\") ?? \"\";\r\n const day = date?.format(\"DD\") ?? \"\";\r\n const time = date?.format(\"HH:mm\") ?? \"\";\r\n return (\r\n
\r\n {placeholder && !date ? (\r\n
\r\n \r\n
\r\n ) : (\r\n <>\r\n {date ? (\r\n\r\n <>\r\n
{month}
\r\n
{day}
\r\n \r\n
{year}
\r\n
\r\n \r\n
{time}
\r\n
\r\n \r\n ) : (\r\n\r\n \r\n
\r\n \r\n
\r\n
\r\n )}\r\n \r\n )}\r\n
\r\n )\r\n}\r\n\r\n","import './responsiveProgress.scss';\r\n\r\nimport React from \"react\";\r\nimport {Progress, ProgressProps} from \"reactstrap\";\r\nimport {useMediaQuery} from \"react-responsive\";\r\n\r\n\r\nexport interface ResponsiveProgressProps extends ProgressProps {\r\n maxWidth?: string,\r\n}\r\n\r\n/**\r\n * Boostrap progress bar that will turn vertical on smaller screens\r\n */\r\nexport const ResponsiveProgress = (props: ResponsiveProgressProps) => {\r\n\r\n const {value, maxWidth = \"768px\", ...other} = props;\r\n\r\n // find out if we are on a smaller screen\r\n const isSmallScreen = useMediaQuery({maxWidth: maxWidth});\r\n\r\n return (\r\n
\r\n {isSmallScreen ? (\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 from \"react\";\r\nimport {DateView} from \"../shared/dateView\";\r\nimport moment from \"moment\";\r\nimport {ResponsiveProgress} from \"../shared/ResponsiveProgress\";\r\n\r\nexport interface DateProgressProps {\r\n step?: string,\r\n description?: string,\r\n dateStart?: moment.Moment,\r\n dateEnd?: moment.Moment,\r\n progressAmount?: number,\r\n placeholder?: boolean,\r\n isLoading?: boolean,\r\n}\r\n\r\nexport function DateProgress(props: DateProgressProps){\r\n\r\n const {\r\n dateEnd,\r\n dateStart,\r\n progressAmount,\r\n step = \"\",\r\n description = \"\",\r\n placeholder = false,\r\n isLoading = false,\r\n } = props;\r\n\r\n\r\n let progressValue = progressAmount !== undefined ? progressAmount : 0;\r\n\r\n // if we are not given a progress value, calculate progress based on date difference\r\n if (!progressAmount && dateStart && dateEnd){\r\n\r\n let total = dateEnd.diff(dateStart, 'days');\r\n let currentProgress = moment().diff(dateStart, 'days');\r\n\r\n // if progress is negative (progress hasn't started yet), show 0\r\n // otherwise calculate progress\r\n progressValue = currentProgress >= 0 ?\r\n moment() > dateEnd ? 1 : (currentProgress / total) * 100\r\n : 0;\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n
{placeholder ? \"\" : step}
\r\n
{placeholder ? \"\" : description}
\r\n
\r\n
\r\n
\r\n )\r\n}","import './pageSection.scss';\r\nimport React from \"react\";\r\n\r\nexport interface PageSectionProps {\r\n children?: React.ReactNode,\r\n className?: string\r\n}\r\n\r\nexport const PageSection = (props: PageSectionProps) => {\r\n const {className, children} = props;\r\n\r\n return (\r\n
\r\n {children}\r\n
\r\n )\r\n}","import './loadingComponent.scss';\r\nimport React from \"react\";\r\nimport {ConditionalFragment} from \"../../shared/conditionalFragment\";\r\nimport {LoadingIndicator} from \"./LoadingIndicator\";\r\nimport Container from \"reactstrap/lib/Container\";\r\n\r\n\r\nexport interface HeaderLoadingIndicatorProps {\r\n isLoading?: boolean\r\n children?: React.ReactNode\r\n}\r\n\r\n/**\r\n * Displays a loading indicator next to children its child\r\n */\r\nexport function LoadingComponent(props: HeaderLoadingIndicatorProps){\r\n\r\n const {isLoading = false, children} = props;\r\n\r\n return (\r\n \r\n {children}\r\n \r\n \r\n \r\n \r\n )\r\n}","import './claimStatus.scss'\r\nimport React from \"react\";\r\nimport {Button, Col, Row} from \"reactstrap\";\r\nimport {DateProgress} from \"./DateProgress\";\r\nimport {useHistory} from \"react-router\";\r\nimport {AlertOnErrors} from \"../../shared/alertOnErrors\";\r\nimport {PageSection} from \"../../shared/pageSection/PageSection\";\r\nimport {ClaimProgressData, useClaimProgressData} from \"../../api/main/claims/useClaimProgressData\";\r\nimport {LoadingComponent} from \"../shared/LoadingComponent\";\r\nimport {useClaimReadyByDate} from \"../../api/main/claims/useClaimReadyByDate\";\r\nimport moment from \"moment\";\r\n\r\n\r\nexport function ClaimStatus(props: {claimId?: string}) {\r\n const history = useHistory();\r\n\r\n // these are last states for each of the 3 state categories to be displayed in the 3 progress bars\r\n const [initialStep, setInitialStep] = React.useState(null);\r\n const [progressStep, setProgressStep] = React.useState(null);\r\n const [finalStep, setFinalStep] = React.useState(null);\r\n\r\n const {data, isLoading, errors: loadingErrors} = useClaimProgressData({id: props.claimId})\r\n const readyByDate = useClaimReadyByDate({\r\n claimId: props.claimId,\r\n dateReceived: data.receiveDate,\r\n finalEvent: finalStep?.event,\r\n contractSlaDays: data.contractSlaDays ?? 0,\r\n collectionDate: data.nextCollection\r\n })\r\n\r\n React.useEffect(() => {\r\n if (data && readyByDate){\r\n\r\n // get last events for each of the 3 stages, or create empty events if they are missing\r\n let lastInitial = data.initialStates[data.initialStates.length - 1] ?? {stateName: \"Collection\", stateDescription: \"Pending\", progressStep: 0};\r\n let lastProgress = data.progressStates[data.progressStates.length - 1] ?? {stateName: \"Inspection\", stateDescription: \"Pending\", progressStep: 0};\r\n let lastFinal = data.finalStates[data.finalStates.length - 1] ?? {stateName: \"Completion\", stateDescription: \"Pending\", progressStep: 0};\r\n\r\n // if next state has events, previous must be completed, unless claim is cancelled\r\n if (lastProgress.startDate && lastFinal.event?.relatedState?.systemName !== 'Claim Cancelled') {\r\n lastInitial.progressStep = 100;\r\n lastInitial.stateDescription = \"Completed\";\r\n }\r\n\r\n if (lastFinal.startDate && lastFinal.event?.relatedState?.systemName !== 'Claim Cancelled') {\r\n lastProgress.progressStep = 100;\r\n lastProgress.stateDescription = \"Completed\";\r\n }\r\n // for the final progress bar display completed event date or SLA date\r\n if (lastFinal?.progressStep !== 100) {\r\n if (!lastFinal) lastFinal = {stateName: \"Completion\", stateDescription: \"Pending\", progressStep: 0};\r\n lastFinal.startDate = moment(readyByDate);\r\n }\r\n\r\n // if the progress step does not have a date, give it a\r\n // half-way date between initial and final\r\n if (!lastProgress.startDate && lastInitial.startDate) {\r\n lastProgress = {stateName: \"Inspection\", stateDescription: \"Pending\", progressStep: 0, startDate: moment(lastInitial.startDate).add(\"3\", \"days\")}\r\n }\r\n\r\n // handle claim cancelled\r\n if (lastFinal.event?.relatedState?.systemName === 'Claim Cancelled') {\r\n lastInitial = {stateName: \"Collection\", stateDescription: \"Pending\", progressStep: 0};\r\n lastProgress = {stateName: \"Inspection\", stateDescription: \"Pending\", progressStep: 0};\r\n lastFinal = {stateName: \"Completion\", stateDescription: \"Your claim has been cancelled\", progressStep: 0};\r\n }\r\n\r\n setInitialStep(lastInitial);\r\n setProgressStep(lastProgress);\r\n setFinalStep(lastFinal);\r\n }\r\n\r\n }, [data, readyByDate])\r\n\r\n return (\r\n \r\n \r\n \r\n

Claim Status

\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","import React from \"react\";\r\nimport {useLazyQuery} from \"@apollo/react-hooks\";\r\nimport gql from \"graphql-tag\";\r\nimport {claimFieldsFragment} from \"../models/Claim\";\r\nimport {stateFieldsFragment} from \"../models/State\";\r\nimport {contractFieldsFragment} from \"../models/Contract\";\r\nimport {mainApiConfig} from \"../../../configure/mainApiConfig\";\r\nimport {AsyncLoadResult} from \"../../../shared/abstractStore\";\r\nimport {eventHistoryFieldsFragement} from \"../models/EventHistory\";\r\nimport moment from \"moment\";\r\nimport {ClaimQueryOptions} from \"./useMyClaim\";\r\nimport {claimProgressDataQuery} from \"../generated/claimProgressDataQuery\";\r\nimport {eventHistoryFields} from \"../generated/eventHistoryFields\";\r\n\r\n\r\nexport interface ClaimProgressData {\r\n stateName: string,\r\n stateDescription: string\r\n startDate?: moment.Moment,\r\n endDate?: moment.Moment,\r\n progressStep?: number,\r\n event?: Partial\r\n}\r\n\r\nexport interface ClaimProgressResult {\r\n initialStates: ClaimProgressData[],\r\n progressStates: ClaimProgressData[],\r\n finalStates: ClaimProgressData[],\r\n receiveDate?: moment.Moment,\r\n nextCollection?: moment.Moment,\r\n nextDelivery?: moment.Moment,\r\n contractSlaDays?: number\r\n}\r\n\r\n\r\n/**\r\n * get claim progress information data sorted by start date and split into\r\n * 3 progress stages\r\n * @see ClaimProgressData\r\n */\r\nexport function useClaimProgressData(options: ClaimQueryOptions) : AsyncLoadResult {\r\n\r\n // get claims state and all claim events\r\n const [load, {loading: dataLoading, error, data, refetch}] = useLazyQuery(\r\n gql`\r\n query claimProgressDataQuery($claimId: String) {\r\n item : claim (id: $claimId) {\r\n ...claimFields\r\n state {\r\n ...stateFields\r\n }\r\n contract {\r\n ...contractFields\r\n }\r\n events {\r\n ...eventHistoryFields\r\n }\r\n }\r\n\r\n }\r\n ${claimFieldsFragment}\r\n ${stateFieldsFragment}\r\n ${contractFieldsFragment}\r\n ${eventHistoryFieldsFragement}\r\n `,\r\n {\r\n variables: {claimId: options.id},\r\n fetchPolicy: options.fetchPolicy ?? mainApiConfig.defaultFetchPolicy,\r\n pollInterval: options.pollInterval,\r\n onCompleted: (data) => {\r\n if (options.onCompleted) {\r\n options?.onCompleted(data);\r\n }\r\n }\r\n }\r\n )\r\n\r\n // Run the query (unless we are being lazy).\r\n React.useEffect(() => {\r\n if (!options.lazy) {\r\n load();\r\n }\r\n }, [options.lazy, load])\r\n\r\n\r\n function sortfn(a: ClaimProgressData, b: ClaimProgressData) {\r\n if (!a?.progressStep || !b?.progressStep) return 0;\r\n return a.progressStep > b.progressStep ? 1 : -1;\r\n }\r\n\r\n const parseData = React.useCallback((): ClaimProgressResult | undefined => {\r\n if (data?.item) {\r\n // we need to sort our states into 3 categories\r\n const initialStates: ClaimProgressData[] = [];\r\n const progressStates: ClaimProgressData[] = [];\r\n const finalStates: ClaimProgressData[] = [];\r\n let receiveEvent: moment.Moment | undefined = undefined;\r\n\r\n data.item.events\r\n .filter((e) => e && e.relatedState)\r\n .forEach((e) => {\r\n\r\n // go through all events and sort them into state groups\r\n if (e?.relatedState && e?.relatedState.name !== \"\") {\r\n\r\n // find receive event\r\n if (e.relatedState.systemName === \"Equipment Received\") {\r\n receiveEvent = moment(e.eventDate);\r\n }\r\n\r\n if (e.relatedState.trackerNumber === 1) {\r\n initialStates.push({\r\n stateName: e?.relatedState?.name ?? \"\",\r\n stateDescription: e?.relatedState?.description ?? \"\",\r\n startDate: e?.eventDate ? moment(e.eventDate) : undefined,\r\n progressStep: e.relatedState.trackerStep,\r\n event: e\r\n })\r\n } else if (e.relatedState.trackerNumber === 2) {\r\n progressStates.push({\r\n stateName: e?.relatedState?.name ?? \"\",\r\n stateDescription: e?.relatedState?.description ?? \"\",\r\n startDate: e?.eventDate ? moment(e.eventDate) : undefined,\r\n progressStep: e.relatedState.trackerStep,\r\n event: e\r\n })\r\n } else if (e.relatedState.trackerNumber === 3) {\r\n finalStates.push({\r\n stateName: e?.relatedState?.name ?? \"\",\r\n stateDescription: e?.relatedState?.description ?? \"\",\r\n startDate: e?.eventDate ? moment(e.eventDate) : undefined,\r\n progressStep: e.relatedState.trackerStep,\r\n event: e\r\n })\r\n }\r\n }\r\n }\r\n )\r\n\r\n\r\n // sort by date ascending\r\n initialStates.sort(sortfn);\r\n progressStates.sort(sortfn);\r\n finalStates.sort(sortfn);\r\n\r\n return {\r\n finalStates: finalStates,\r\n initialStates: initialStates,\r\n progressStates: progressStates,\r\n nextCollection: moment(data.item.nextCollectionAttemptDate),\r\n nextDelivery: moment(data.item.nextCollectionAttemptDate),\r\n contractSlaDays: data.item?.contract?.tatSlaDays,\r\n receiveDate: receiveEvent,\r\n }\r\n }\r\n }, [data])\r\n\r\n const refresh = React.useCallback(async () => {\r\n !refetch ? await load() : await refetch();\r\n }, [refetch, load]);\r\n\r\n return React.useMemo(() => {\r\n if (!data?.item){\r\n return {\r\n data: data ?? {finalStates: [], progressStates: [], initialStates: [], item: null} as any,\r\n refresh: refresh,\r\n isLoading: dataLoading,\r\n errors: error\r\n }\r\n }\r\n return {\r\n data: parseData(),\r\n refresh: refresh,\r\n isLoading: dataLoading,\r\n errors: error\r\n }\r\n\r\n }, [parseData, data, refresh, dataLoading, error]);\r\n}\r\n","import './nameValueBox.scss';\r\nimport React from \"react\";\r\n\r\nexport interface NameValueProps {\r\n name?: string,\r\n value?: string\r\n displayEmpty?: boolean\r\n placeholder?: boolean\r\n size?: 'sm' | 'md' | 'lg',\r\n inline?: boolean,\r\n children?: React.ReactNode,\r\n}\r\n\r\n\r\n/**\r\n * Component to display a name-value pair or a fancy placeholder\r\n */\r\nexport const NameValueBox = (props: NameValueProps) => {\r\n const {\r\n name,\r\n value,\r\n children,\r\n size = 'md',\r\n placeholder = false,\r\n displayEmpty = true,\r\n inline = false,\r\n } = props\r\n\r\n const display = placeholder || (value && value.trim() !== '') || children || displayEmpty\r\n\r\n return (\r\n <>\r\n {display && (\r\n
\r\n
{placeholder ? \"\" : name}
\r\n {children ? (\r\n children\r\n ) : (\r\n
{placeholder ? \"\" : value?.split(\"\\n\").map((text, index) => {\r\n return
{text}
\r\n })}
\r\n ) }\r\n
\r\n )}\r\n \r\n )\r\n}","import React from \"react\";\r\nimport {Container} from \"reactstrap\";\r\nimport {AlertOnErrors} from \"../../shared/alertOnErrors\";\r\nimport {NameValueBox} from \"../../shared/nameValueView/NameValueBox\";\r\nimport {PageSection} from \"../../shared/pageSection/PageSection\";\r\nimport {useMyClaim} from \"../../api/main/claims/useMyClaim\";\r\nimport {useMatchingDataFormDatas} from \"../../api/main/dataFormDatas/useMatchingDataFormDatas\";\r\nimport {LoadingComponent} from \"../shared/LoadingComponent\";\r\n\r\nexport function MyDevice(props: {claimId?: string}){\r\n const {data: {item}, isLoading, errors: loadingErrors} = useMyClaim({id: props.claimId});\r\n\r\n const requiredDatas = [\r\n \"Manufacturer\",\r\n \"Model\",\r\n \"Colour\",\r\n \"Storage\",\r\n \"Memory Size\",\r\n \"Serial Number\",\r\n \"IMEI\",\r\n ]\r\n\r\n const specs = useMatchingDataFormDatas(item?.dataFormData, (data) => requiredDatas.includes(data.name));\r\n\r\n // TODO: use category level descriptions for this!\r\n const deviceName = specs !== undefined ?\r\n `${(specs[\"Manufacturer\"]?.textValue ?? \"\")} ${specs[\"Model\"]?.textValue ?? \"\"}`\r\n : \"\";\r\n\r\n return (\r\n \r\n \r\n \r\n

My Device

\r\n
\r\n {\r\n // if isLoading, display placeholders\r\n isLoading && (\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 // when loaded, show actual data\r\n !isLoading && item && specs && (\r\n \r\n \r\n \r\n \r\n \r\n
\r\n {\r\n item?.state && item?.state.name === \"Collection\" ? (\r\n
\r\n {\"We are waiting to inspect your device. Come back later to view your device specs.\"}\r\n
\r\n ) : (\r\n <>\r\n {\r\n Object.entries(specs).map(([name, data], i) => {\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 )\r\n}\r\n","import {DataFormDatasOptions} from \"./useClaimDataFormDatas\";\r\nimport {dataFormDatasQuery_items} from \"../generated/dataFormDatasQuery\";\r\nimport React from \"react\";\r\nimport {DataFormData} from \"../types/types\";\r\n\r\nexport interface MatchingDataFormDatasOptions extends DataFormDatasOptions {\r\n filterCallback: (item: dataFormDatasQuery_items | null, n?: number) => boolean\r\n}\r\n\r\n\r\n\r\n/**\r\n * Find matching data form data\r\n */\r\nexport function useMatchingDataFormDatasList(\r\n datas: (DataFormData|null)[] | undefined,\r\n filterCallback: (data: DataFormData) => boolean): DataFormData[] | undefined {\r\n\r\n return React.useMemo(() => {\r\n if (!datas?.length) return;\r\n\r\n const res: DataFormData[] = [];\r\n for (let data of datas){\r\n if (data !== null) {\r\n if (filterCallback(data)){\r\n res.push(data);\r\n }\r\n }\r\n }\r\n return res;\r\n\r\n }, [filterCallback, datas])\r\n}\r\n\r\n/**\r\n * Find matching data form data into a dictionary\r\n */\r\nexport function useMatchingDataFormDatas(\r\n datas: (DataFormData|null)[] | undefined,\r\n filterCallback: (data: DataFormData) => boolean): {[key: string]: DataFormData} | undefined {\r\n\r\n return React.useMemo(() => {\r\n if (!datas?.length) return {};\r\n\r\n const res: {[key: string]: DataFormData} = {};\r\n for (let data of datas){\r\n if (data !== null) {\r\n if (filterCallback(data)){\r\n res[data.name] = data;\r\n }\r\n }\r\n }\r\n return res;\r\n\r\n }, [filterCallback, datas])\r\n}","import {AsyncLoadOptions, AsyncLoadResult} from \"../../../shared/abstractStore\";\r\nimport {useLazyQuery} from \"@apollo/react-hooks\";\r\nimport gql from \"graphql-tag\";\r\nimport {mainApiConfig} from \"../../../configure/mainApiConfig\";\r\nimport React from \"react\";\r\nimport {contractFieldsFragment} from \"../models/Contract\";\r\nimport {dataFormDataFieldsFragment} from \"../models/DataFormData\";\r\nimport {equipmentTypeFieldsFragment} from \"../models/EquipmentType\";\r\nimport {myClaimQuery} from \"../generated/myClaimQuery\";\r\nimport {stateFieldsFragment} from \"../models/State\";\r\n\r\n\r\nexport interface ClaimQueryOptions extends AsyncLoadOptions {\r\n id?: string,\r\n}\r\n\r\nexport function useMyClaim(options: ClaimQueryOptions): AsyncLoadResult {\r\n\r\n const [load, {loading, error, data, refetch}] = useLazyQuery(\r\n gql`\r\n query myClaimQuery($id: String!){\r\n item: claim(id: $id){\r\n id,\r\n number,\r\n state {\r\n ...stateFields\r\n }\r\n contract {\r\n ...contractFields\r\n }\r\n equipmentType {\r\n ...equipmentTypeFields\r\n }\r\n dataFormData {\r\n ...dataFormDataFields\r\n }\r\n }\r\n }\r\n ${contractFieldsFragment} ${dataFormDataFieldsFragment} ${equipmentTypeFieldsFragment}\r\n ${stateFieldsFragment}\r\n `, {\r\n variables: {id: options.id},\r\n fetchPolicy: options.fetchPolicy ?? mainApiConfig.defaultFetchPolicy,\r\n pollInterval: options.pollInterval,\r\n onCompleted: (data) => {\r\n if (options.onCompleted){\r\n options.onCompleted(data);\r\n }\r\n }\r\n }\r\n )\r\n\r\n // Run the query (unless we are being lazy).\r\n React.useEffect(() => {\r\n if (!options.lazy) {\r\n load();\r\n }\r\n }, [options.lazy, load])\r\n\r\n const refresh = React.useCallback(\r\n async () => {!refetch ? await load() : await refetch();},\r\n [refetch, load]);\r\n\r\n return React.useMemo(() => ({\r\n data: data ?? ({} as any),\r\n refresh: refresh,\r\n isLoading: loading,\r\n errors: error\r\n }), [data, refresh, loading, error]);\r\n\r\n}\r\n","import {ApiFetch} from \"apifetch-json\";\r\n\r\nexport interface EndUserAuthorizationRequest {\r\n reference: string,\r\n postcode: string,\r\n}\r\n\r\nexport interface EndUserAuthorizationResult {\r\n succeeded: boolean,\r\n claimId?: string,\r\n returnUrl: string\r\n}\r\n\r\nexport interface ClaimPhotosResult { [key: string]: string }\r\n\r\nexport interface SendMessageRequest {\r\n claimId: string,\r\n subject: string,\r\n message: string,\r\n}\r\n\r\nexport class EndUserService {\r\n api: ApiFetch;\r\n\r\n constructor(api?: ApiFetch) {\r\n this.api = api ?? new ApiFetch();\r\n }\r\n\r\n authorizeEndUser = async (request: EndUserAuthorizationRequest, returnUrl?: string) => {\r\n const result = await this.api.post(\r\n `/api/enduser/login?returnUrl=${encodeURIComponent(returnUrl ?? '')}`,\r\n request,\r\n );\r\n return result;\r\n }\r\n\r\n getClaimPhotos = async (id: string) => {\r\n const result = await this.api.get(`/api/media/inspectionPhotos?claimId=${encodeURIComponent(id)}`);\r\n return result;\r\n }\r\n\r\n sendMessage = async (request: SendMessageRequest) => {\r\n const result = await this.api.post(\"api/enduser/sendMessage\", request);\r\n return result;\r\n }\r\n\r\n}\r\n","import React from \"react\";\r\nimport {LoginContainer} from \"../shared/LoginContainer\";\r\nimport {Banner} from \"../shared/Banner\";\r\nimport {Form, FormGroup, Label, Spinner} from \"reactstrap\";\r\nimport {ButtonAsync} from \"reactstrap-buttonasync\";\r\nimport {ValidatedInput} from \"pojo-validator-reactstrap\";\r\nimport {FormButtons} from \"../shared/FormButtons\";\r\nimport {useChanges} from \"../../shared/useChanges\";\r\nimport {useValidatorCallback} from \"pojo-validator-react\";\r\nimport {useAuthorizeEndUserCallback} from \"../../api/account/useAuthorizeEndUserCallback\";\r\nimport {AlertOnErrors} from \"../../shared/alertOnErrors\";\r\n\r\n\r\ninterface TrackMyClaimModel {\r\n reference: string,\r\n postcode: string\r\n}\r\n\r\n// End user access component\r\nexport const TrackMyClaim = () => {\r\n const [authorize, { isExecuting: isLoading, errors: authorizationErrors }] = useAuthorizeEndUserCallback();\r\n\r\n const { model, change } = useChanges({ postcode: '', reference: '' });\r\n\r\n /**\r\n * Validate the model before trying to use it.\r\n */\r\n const [validate, validationErrors] = useValidatorCallback((validation, fieldsToCheck) => {\r\n const rules = {\r\n email: () => !model.reference ? 'Claim reference is required' : '',\r\n password: () => !model.postcode ? 'You postcode is required' : '',\r\n };\r\n\r\n validation.checkRules(rules, fieldsToCheck);\r\n }, [model]);\r\n\r\n /**\r\n * Perform a login by and handle the result.\r\n */\r\n const [isDoingFullPageRedirect, setIsDoingFullPageRedirect] = React.useState(false);\r\n const performLogin = React.useCallback(async (): Promise => {\r\n if (!validate()) {\r\n return;\r\n }\r\n\r\n const result = await authorize(model);\r\n\r\n if (result && result.succeeded && result.claimId){\r\n setIsDoingFullPageRedirect(true)\r\n // const returnUrl = (result.returnUrl === \"/\" ? \"/my-claim/\" : result.returnUrl) + `${result.claimId}`;\r\n // TODO: disabled this because it will keep redirecting to an invalid url if we arrived here by invalid url\r\n window.location.href = `/my-claim/${result.claimId}`;\r\n }\r\n\r\n }, [authorize, validate, model]);\r\n\r\n // Render the UI.\r\n return (\r\n <>\r\n \r\n \r\n

{'Track your claim'}

\r\n
\r\n
{ e.preventDefault(); await performLogin(); }}>\r\n \r\n \r\n \r\n change({ reference: e.currentTarget.value })}\r\n onBlur={e => validate('reference')}\r\n validationErrors={validationErrors['reference']} />\r\n \r\n \r\n \r\n change({ postcode: e.currentTarget.value })}\r\n onBlur={e => validate('postcode')}\r\n validationErrors={validationErrors['postcode']} />\r\n \r\n\r\n \r\n {'Finding your claim...'}}>\r\n {'Track Claim'}\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\n","import * as React from \"react\";\r\nimport {AsyncActionStatus} from \"../../shared/abstractStore\";\r\nimport {useAsyncCallback} from \"react-use-async-callback\";\r\nimport { EndUserService, EndUserAuthorizationRequest, EndUserAuthorizationResult } from \"./EndUserService\";\r\n\r\n/**\r\n * Callback to Login using a password.\r\n */\r\nexport function useAuthorizeEndUserCallback(): [(model: EndUserAuthorizationRequest) => Promise, AsyncActionStatus] {\r\n const endUserService = new EndUserService();\r\n\r\n // Get the return url from the query string.\r\n const returnUrl = React.useMemo(() => {\r\n const params = new URLSearchParams(window.location.search);\r\n return params.get('returnUrl') ?? params.get('ReturnUrl') ?? '';\r\n }, []);\r\n\r\n const [action, { isExecuting, errors }] = useAsyncCallback(async (model: EndUserAuthorizationRequest) => {\r\n return await endUserService.authorizeEndUser(model, returnUrl);\r\n }, [endUserService]);\r\n\r\n return [action, { isExecuting, errors }];\r\n}\r\n","import {RouteEntry} from \"../../shared/routes\";\r\nimport {MyClaim} from \"./MyClaim\";\r\nimport {TrackMyClaim} from \"../track/TrackMyClaim\";\r\n\r\nexport const myClaimRoutes: Array = [\r\n { path: '/my-claim/:id', component: MyClaim},\r\n { path: '/my-claim/', component: TrackMyClaim},\r\n];\r\n","import React from \"react\";\r\nimport { useCurrentClaimId } from \"../../api/main/claims/useCurrentClaimId\";\r\nimport { TrackedClaimContainer } from \"../shared/TrackedClaimContainer\";\r\nimport { ClaimStatus } from \"./ClaimStatus\";\r\nimport \"./myClaim.scss\";\r\nimport { MyDevice } from \"./MyDevice\";\r\n\r\n\r\n\r\nexport function MyClaim() {\r\n\r\n const claimId = useCurrentClaimId();\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n}","import './myDelivery.scss';\r\n\r\nimport React from \"react\";\r\nimport {TrackedClaimContainer} from \"../shared/TrackedClaimContainer\";\r\nimport {PageSection} from \"../../shared/pageSection/PageSection\";\r\nimport {useCurrentClaimId} from \"../../api/main/claims/useCurrentClaimId\";\r\nimport {Alert, Button, Media} from \"reactstrap\";\r\nimport {NameValueBox} from \"../../shared/nameValueView/NameValueBox\";\r\nimport {useClaimDeliveryDetails} from \"../../api/main/claims/useClaimDeliveryDetails\";\r\nimport {LoadingComponent} from \"../shared/LoadingComponent\";\r\nimport {AlertOnErrors} from \"../../shared/alertOnErrors\";\r\nimport {ConditionalFragment} from \"../../shared/conditionalFragment\";\r\nimport moment from \"moment\";\r\n\r\n\r\nexport function MyDelivery() {\r\n\r\n const claimId = useCurrentClaimId();\r\n const { data: { item }, isLoading, errors } = useClaimDeliveryDetails({ id: claimId });\r\n const [isDeliveryArranged, setIsDeliveryArranged] = React.useState(false);\r\n\r\n const [collectionCourierImage, setCollectionCourierImage] = React.useState(null);\r\n const [deliveryCourierImage, setDeliveryCourierImage] = React.useState(null);\r\n\r\n const [deliveryRef, setDeliveryRef] = React.useState(\"\");\r\n const [collectionRef, setCollectionRef] = React.useState(\"\");\r\n\r\n // tracking\r\n // const { data: trackingData, isLoading: loadingTracking } = useClaimDeliveryTracking(claimId);\r\n\r\n React.useEffect(() => {\r\n setIsDeliveryArranged(!!item?.deliveryCourier && item.deliveryCourier !== \"\");\r\n }, [setIsDeliveryArranged, item])\r\n\r\n // work out courier tracking references\r\n React.useEffect(() => {\r\n setDeliveryRef(\r\n (item?.dpddeliveryNumber && item?.dpddeliveryNumber !== \"\")\r\n ? item.dpddeliveryNumber\r\n : item?.deliveryTrackingDetails ?? \"\"\r\n );\r\n setCollectionRef(\r\n (item?.dpdcollectionNumber && item?.dpdcollectionNumber !== \"\")\r\n ? item.dpdcollectionNumber\r\n : item?.collectionTrackingDetails ?? \"\"\r\n );\r\n }, [item])\r\n\r\n\r\n React.useEffect(() => {\r\n if (item?.deliveryCourier) {\r\n if (item.deliveryCourier.toLowerCase().includes(\"royal mail\")) setDeliveryCourierImage(\"royalmail.png\");\r\n if (item.deliveryCourier.toLowerCase().includes(\"dpd\")) setDeliveryCourierImage(\"dpd.png\");\r\n }\r\n\r\n }, [item, setDeliveryCourierImage])\r\n\r\n React.useEffect(() => {\r\n if (item?.collectionCourier) {\r\n if (item.collectionCourier.toLowerCase().includes(\"royal mail\")) setCollectionCourierImage(\"royalmail.png\");\r\n if (item.collectionCourier.toLowerCase().includes(\"dpd\")) setCollectionCourierImage(\"dpd.png\");\r\n }\r\n }, [item, setCollectionCourierImage])\r\n\r\n\r\n return (\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n

{\"Track my delivery\"}

\r\n
\r\n
\r\n {isDeliveryArranged && item?.deliveryCourier && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n
\r\n \r\n {\"Your delivery has not been arranged yet.\"}\r\n \r\n {item && deliveryRef && (\r\n <>\r\n \r\n {deliveryCourierImage ? (\r\n
\r\n \r\n
\r\n ) : (\r\n item.deliveryCourier ?? \"\"\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

{\"Track my collection\"}

\r\n
\r\n
\r\n {item?.collectionCourier && collectionRef !== '' && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n
\r\n \r\n {\"Your collection has not been arranged yet.\"}\r\n \r\n {item && (\r\n <>\r\n \r\n {collectionCourierImage ? (\r\n
\r\n \r\n
\r\n ) : (\r\n item.collectionCourier ?? \"\"\r\n )}\r\n
\r\n \r\n \r\n \r\n )}\r\n
\r\n
\r\n {/* {trackingData?.trackerDetails && trackingData.trackerDetails.length !== 0 && (\r\n \r\n \r\n

Status

\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n trackingData.trackerDetails.map((d, index) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n
DateLocationDescription
{d.dateTime ? moment(d.dateTime).format(\"DD MMM YYYY HH:mm\") : \"\"}{d.location}{d.message}
\r\n
\r\n )}*/}\r\n
\r\n )\r\n\r\n}\r\n","import {AsyncLoadResult} from \"../../../shared/abstractStore\";\r\nimport {useLazyQuery} from \"@apollo/react-hooks\";\r\nimport gql from \"graphql-tag\";\r\nimport {mainApiConfig} from \"../../../configure/mainApiConfig\";\r\nimport React from \"react\";\r\nimport {ClaimQueryOptions} from \"./useMyClaim\";\r\nimport {claimDeliveryDetails} from \"../generated/claimDeliveryDetails\";\r\n\r\n\r\nexport function useClaimDeliveryDetails(options: ClaimQueryOptions): AsyncLoadResult {\r\n\r\n const [load, {loading, error, data, refetch}] = useLazyQuery(\r\n gql`\r\n query claimDeliveryDetails($id: String!){\r\n item: claim(id: $id){\r\n id,\r\n dpddeliveryNumber,\r\n lastDeliveryAttemptDate,\r\n nextDeliveryAttemptDate,\r\n deliveryAddress,\r\n deliveryTrackingDetails,\r\n deliveryCourier,\r\n dpdcollectionNumber,\r\n lastCollectionAttemptDate,\r\n nextCollectionAttemptDate,\r\n collectionAddress,\r\n collectionTrackingDetails,\r\n dpdcollectionNumber,\r\n collectionCourier: courier,\r\n dispatchEvent: claimEvent(name: \"Returned to End User\") {\r\n eventDate,\r\n name\r\n },\r\n }\r\n }\r\n `, {\r\n variables: {id: options.id},\r\n fetchPolicy: options.fetchPolicy ?? mainApiConfig.defaultFetchPolicy,\r\n pollInterval: options.pollInterval,\r\n onCompleted: (data) => {\r\n if (options.onCompleted){\r\n options.onCompleted(data);\r\n }\r\n }\r\n }\r\n )\r\n\r\n // Run the query (unless we are being lazy).\r\n React.useEffect(() => {\r\n if (!options.lazy) {\r\n load();\r\n }\r\n }, [options.lazy, load])\r\n\r\n const refresh = React.useCallback(\r\n async () => {!refetch ? await load() : await refetch();},\r\n [refetch, load]);\r\n\r\n return React.useMemo(() => ({\r\n data: data ?? ({} as any),\r\n refresh: refresh,\r\n isLoading: loading,\r\n errors: error\r\n }), [data, refresh, loading, error]);\r\n\r\n}\r\n","import {RouteEntry} from \"../../shared/routes\";\r\nimport {MyDelivery} from \"./MyDelivery\";\r\n\r\nexport const myDeliveryRoutes: Array = [\r\n { path: '/my-delivery/:id', component: MyDelivery },\r\n { path: '/my-delivery', component: MyDelivery },\r\n];\r\n","import React from \"react\";\r\n\r\n\r\nexport function useFormattedAddressCallback() {\r\n\r\n return React.useCallback((address?: string) => {\r\n if (!address) return '';\r\n\r\n const matches = address.match(/([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9][A-Za-z]?))))\\s?[0-9][A-Za-z]{2})/m)\r\n if (!matches) return address;\r\n\r\n const postCode = matches[0];\r\n if (!postCode) return address;\r\n\r\n let newAddress = '';\r\n const addressLines = address.replace(postCode, \"\").split('\\n');\r\n\r\n addressLines.forEach(line => {\r\n newAddress += line.split(\" \")\r\n .map(word => word.charAt(0).toUpperCase() + word.toLowerCase().substr(1))\r\n .join(' ')\r\n .concat('\\n');\r\n })\r\n\r\n return `${newAddress}\\n${postCode.toUpperCase()}`;\r\n\r\n }, [])\r\n\r\n}","import \"./myDetails.scss\";\r\n\r\nimport React from \"react\";\r\nimport {TrackedClaimContainer} from \"../shared/TrackedClaimContainer\";\r\nimport {PageSection} from \"../../shared/pageSection/PageSection\";\r\nimport {useClaimEndUserDetails} from \"../../api/main/claims/useClaimEndUserDetails\";\r\nimport {useCurrentClaimId} from \"../../api/main/claims/useCurrentClaimId\";\r\nimport {NameValueBox} from \"../../shared/nameValueView/NameValueBox\";\r\nimport {Button, Col, Container, Form, FormGroup, Input, Label, ModalBody, ModalHeader, Spinner} from \"reactstrap\";\r\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\r\nimport {AlertOnErrors} from \"../../shared/alertOnErrors\";\r\nimport {useChanges} from \"../../shared/useChanges\";\r\nimport {useUpdateDeliveryAddress} from \"../../api/main/claims/useUpdateDeliveryAddress\";\r\nimport {FormButtons} from \"../shared/FormButtons\";\r\nimport {ButtonAsync} from \"reactstrap-buttonasync\";\r\nimport {StyledModal} from \"../shared/StyledModal\";\r\nimport {LoadingComponent} from \"../shared/LoadingComponent\";\r\nimport {useFormattedAddressCallback} from \"../../shared/useFormattedAddressCallback\";\r\nimport {GDPRConsentFormPart} from \"../shared/GDPRConsentFormPart\";\r\nimport {useValidatorCallback} from \"pojo-validator-react\";\r\nimport moment from \"moment\";\r\n\r\n\r\ninterface DeliveryAddressInput {\r\n line1: string,\r\n line2: string,\r\n line3: string,\r\n city: string,\r\n postcode: string,\r\n gdprConsent?: boolean,\r\n}\r\n\r\nexport function MyDetails(){\r\n const [modal, setModal] = React.useState(false);\r\n const [addressChangeAllowed, setAddressChangeAllowed] = React.useState(true);\r\n\r\n // get claim reference from url\r\n const claimId = useCurrentClaimId();\r\n const {data: {item}, isLoading} = useClaimEndUserDetails({id: claimId})\r\n\r\n // get the callback for updating registered address\r\n const [updateAddressCallback, {errors: updateErrors, isExecuting}] = useUpdateDeliveryAddress();\r\n const {model, change} = useChanges({line1: \"\", line2: \"\", line3: \"\", city: \"\", postcode: \"\", gdprConsent: false})\r\n const [validate, validationErrors] = useValidatorCallback((validation, fieldsToCheck) => {\r\n const rules = {\r\n gdprConsent: () => !model.gdprConsent ? 'Please tick this box if you consent to our Privacy Notice' : ''\r\n };\r\n\r\n validation.checkRules(rules, fieldsToCheck);\r\n }, [model]);\r\n const formatAddress = useFormattedAddressCallback();\r\n\r\n const toggleModal = () => setModal(!modal);\r\n const updateRegisteredAddress = React.useCallback(async (): Promise => {\r\n if (!validate()) return;\r\n\r\n if (claimId){\r\n const deliveryAddress = `${model.line1}\\r\\n${model.line2}\\r\\n${model.line3}\\r\\n${model.city}\\r\\n${model.postcode}`;\r\n await updateAddressCallback({id: claimId, deliveryAddress: deliveryAddress});\r\n setModal(false);\r\n }\r\n },[validate, claimId, model, updateAddressCallback]);\r\n\r\n // check that we are allowed to change address\r\n React.useEffect(() => {\r\n if (item?.state) {\r\n // address change is now allowed when claim is close to delivery\r\n if (item.state.status === \"Completed\") {\r\n setAddressChangeAllowed(false);\r\n } else {\r\n // check that repair finished less than 12 hours ago\r\n const dateRepairFinished = item.repairFinishedEvent[0]?.eventDate;\r\n if (dateRepairFinished) {\r\n const lastChanceDate = moment(dateRepairFinished).add(12, \"h\");\r\n setAddressChangeAllowed(moment().diff(lastChanceDate, \"hour\") <= 12);\r\n }\r\n }\r\n }\r\n }, [item])\r\n\r\n return (\r\n \r\n \r\n \r\n

{\"My Details\"}

\r\n
\r\n {isLoading && !item ? (\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 {isLoading && !item ? (\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 {addressChangeAllowed && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n \r\n {\"Edit Return Address\"}\r\n \r\n \r\n
{ e.preventDefault(); await updateRegisteredAddress() }}>\r\n \r\n \r\n \r\n change({ line1: e.currentTarget.value })}\r\n />\r\n \r\n \r\n \r\n change({ line2: e.currentTarget.value })}\r\n />\r\n \r\n \r\n \r\n change({ line3: e.currentTarget.value })}\r\n />\r\n \r\n \r\n \r\n \r\n change({ city: e.currentTarget.value })}\r\n />\r\n \r\n \r\n \r\n change({ postcode: e.currentTarget.value })}\r\n />\r\n \r\n \r\n \r\n change({gdprConsent: checked})}\r\n onBlur={() => validate(\"gdprConsent\")}\r\n checked={model.gdprConsent}\r\n />\r\n \r\n \r\n {\" Submitting...\"}}>\r\n {\"Confirm Return Address\"}\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 {AsyncLoadResult} from \"../../../shared/abstractStore\";\r\nimport {useLazyQuery} from \"@apollo/react-hooks\";\r\nimport gql from \"graphql-tag\";\r\nimport {mainApiConfig} from \"../../../configure/mainApiConfig\";\r\nimport React from \"react\";\r\nimport {claimEndUserQuery} from \"../generated/claimEndUserQuery\";\r\nimport {ClaimQueryOptions} from \"./useMyClaim\";\r\n\r\n\r\nexport function useClaimEndUserDetails(options: ClaimQueryOptions): AsyncLoadResult {\r\n\r\n const [load, {loading, error, data, refetch}] = useLazyQuery(\r\n gql`\r\n query claimEndUserQuery($id: String!){\r\n item: claim(id: $id){\r\n id,\r\n number,\r\n endUserEmail,\r\n endUserMobile,\r\n endUserName,\r\n endUserPhone,\r\n registeredAddress,\r\n deliveryAddress,\r\n externalReference,\r\n policyNumber,\r\n state {\r\n id,\r\n name,\r\n status,\r\n trackerStep,\r\n trackerNumber,\r\n }\r\n repairFinishedEvent: events(eventName: \"Awaiting Repaired Equipment Return to End User\") {\r\n id,\r\n name,\r\n eventDate\r\n }\r\n }\r\n }\r\n `, {\r\n variables: {id: options.id},\r\n fetchPolicy: options.fetchPolicy ?? mainApiConfig.defaultFetchPolicy,\r\n pollInterval: options.pollInterval,\r\n onCompleted: (data) => {\r\n if (options.onCompleted){\r\n options.onCompleted(data);\r\n }\r\n }\r\n }\r\n )\r\n\r\n // Run the query (unless we are being lazy).\r\n React.useEffect(() => {\r\n if (!options.lazy) {\r\n load();\r\n }\r\n }, [options.lazy, load])\r\n\r\n const refresh = React.useCallback(\r\n async () => {!refetch ? await load() : await refetch();},\r\n [refetch, load]);\r\n\r\n return React.useMemo(() => ({\r\n data: data ?? ({} as any),\r\n refresh: refresh,\r\n isLoading: loading,\r\n errors: error\r\n }), [data, refresh, loading, error]);\r\n\r\n}\r\n","import {useMutation} from \"@apollo/react-hooks\";\r\nimport gql from \"graphql-tag\";\r\nimport {claimFieldsFragment} from \"../models/Claim\";\r\nimport {AsyncActionStatus} from \"../../../shared/abstractStore\";\r\nimport {useAsyncCallback} from \"react-use-async-callback\";\r\nimport {ChangeAddressClaimInput} from \"../generated/globalTypes\";\r\nimport {changeDeliveryAddress, changeDeliveryAddressVariables} from \"../generated/changeDeliveryAddress\";\r\n\r\n\r\n/**\r\n * Get a callback to update delivery address for the claim\r\n */\r\nexport function useUpdateDeliveryAddress(): [(model: ChangeAddressClaimInput) => Promise, AsyncActionStatus] {\r\n const [mutationAction, {error}] = useMutation(\r\n gql`\r\n mutation changeDeliveryAddress($model: ChangeAddressClaimInput!) {\r\n changeDeliveryAddress(model: $model){\r\n ...claimFields\r\n }\r\n }\r\n ${claimFieldsFragment}\r\n `);\r\n\r\n // Wrap the mutation in a standard callback.\r\n\r\n const [action, {isExecuting, errors: actionErrors}] = useAsyncCallback(\r\n async (model: ChangeAddressClaimInput) => {\r\n const result = await mutationAction({variables: {model: model}});\r\n if (result.errors && result.errors.length){\r\n throw result.errors;\r\n }\r\n }, [mutationAction]\r\n )\r\n\r\n return [action, { isExecuting: isExecuting, errors: error ? error.message : actionErrors }];\r\n}","import {RouteEntry} from \"../../shared/routes\";\r\nimport {MyDetails} from \"./MyDetails\";\r\n\r\nexport const myDetailsRoutes: Array = [\r\n { path: '/my-details/:id', component: MyDetails },\r\n { path: '/my-details', component: MyDetails },\r\n];\r\n","import './messageComponent.scss';\r\n\r\nimport React from \"react\";\r\nimport {Alert, Button, ModalBody, ModalFooter, ModalHeader} from \"reactstrap\";\r\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\r\nimport {StyledModal} from \"../shared/StyledModal\";\r\nimport {useMediaQuery} from \"react-responsive\";\r\nimport {useMarkMessageAsRead} from \"../../api/main/claims/useMarkMessageAsRead\";\r\nimport ReactHtmlParser from 'react-html-parser';\r\nimport moment from \"moment\";\r\n\r\nexport interface MessageProps {\r\n messageId?: string,\r\n subject?: string,\r\n body?: string,\r\n dateSent?: Date,\r\n read: boolean,\r\n active: boolean,\r\n isLoading?: boolean\r\n}\r\n\r\nexport function MessageComponent(props: MessageProps){\r\n const {subject = \"\", body = \"\", dateSent = null, read = false, active = true, messageId} = props;\r\n const [modal, setModal] = React.useState(false);\r\n const [messagePreview, setMessagePreview] = React.useState(\"\");\r\n const [subjectPreview, setSubjectPreview] = React.useState(\"\");\r\n\r\n const [markAsReadCallback] = useMarkMessageAsRead();\r\n\r\n const isSmallScreen = useMediaQuery({maxWidth: \"768px\"});\r\n\r\n\r\n const stripHtlm = (html: string): string => {\r\n const doc = new DOMParser().parseFromString(html, 'text/html');\r\n return doc.body.textContent || \"\"\r\n }\r\n \r\n const trimMessage = React.useCallback(() => {\r\n const maxChars = isSmallScreen ? 40 : 70;\r\n const trimmed = stripHtlm(body).trim();\r\n return trimmed.length > maxChars ? trimmed.slice(0, maxChars) + \"...\" : trimmed;\r\n }, [body, isSmallScreen]);\r\n\r\n const trimSubject = React.useCallback(() => {\r\n const maxChars = isSmallScreen ? 20 : 30;\r\n return subject.length > maxChars ? subject.slice(0, maxChars) + \"...\" : subject;\r\n }, [subject, isSmallScreen])\r\n\r\n const markAsRead = React.useCallback(async () => {\r\n if (messageId && !read) {\r\n await markAsReadCallback({id: messageId, read: true, active: active});\r\n }\r\n }, [messageId, read, active, markAsReadCallback]);\r\n\r\n const parsedHtml = React.useMemo(() => {\r\n try {\r\n return ReactHtmlParser(body);\r\n } catch {\r\n return Html message could not be parsed!\r\n }\r\n }, [body]);\r\n\r\n React.useEffect(() => {\r\n setSubjectPreview(trimSubject());\r\n setMessagePreview(trimMessage())\r\n }, []);\r\n \r\n const toggleModal = () => {\r\n if (modal && !read){\r\n // mark message as read when closing modal\r\n markAsRead();\r\n }\r\n setModal(!modal);\r\n }\r\n return (\r\n
\r\n
\r\n {subjectPreview}\r\n
\r\n
{messagePreview}
\r\n
\r\n \r\n
\r\n \r\n \r\n {subject}\r\n \r\n \r\n {parsedHtml}\r\n \r\n \r\n {dateSent && (\r\n moment(dateSent).format(\"DD/MM/YYYY hh:mm\")\r\n )}\r\n \r\n \r\n
\r\n )\r\n}","import {useMutation} from \"@apollo/react-hooks\";\r\nimport gql from \"graphql-tag\";\r\nimport {AsyncActionStatus} from \"../../../shared/abstractStore\";\r\nimport {useAsyncCallback} from \"react-use-async-callback\";\r\nimport {PortalMessageFlagsInput} from \"../generated/globalTypes\";\r\nimport {messageFieldsFragment} from \"../models/Message\";\r\nimport {markMessageAsRead, markMessageAsReadVariables} from \"../generated/markMessageAsRead\";\r\n\r\n\r\n/**\r\n * Get a callback to update delivery address for the claim\r\n */\r\nexport function useMarkMessageAsRead(): [(model: PortalMessageFlagsInput) => Promise, AsyncActionStatus] {\r\n const [mutationAction, {error}] = useMutation(\r\n gql`\r\n mutation markMessageAsRead($model: PortalMessageFlagsInput!) {\r\n updateMessageFlags(model: $model){\r\n ...messageFields\r\n }\r\n }\r\n ${messageFieldsFragment}\r\n `);\r\n\r\n // Wrap the mutation in a standard callback.\r\n\r\n const [action, {isExecuting, errors: actionErrors}] = useAsyncCallback(\r\n async (model: PortalMessageFlagsInput) => {\r\n const result = await mutationAction({variables: {model: model}});\r\n if (result.errors && result.errors.length){\r\n throw result.errors;\r\n }\r\n }, [mutationAction]\r\n )\r\n\r\n return [action, { isExecuting: isExecuting, errors: error ? error.message : actionErrors }];\r\n}","import './messages.scss';\r\n\r\nimport React from \"react\";\r\nimport {TrackedClaimContainer} from \"../shared/TrackedClaimContainer\";\r\nimport {PageSection} from \"../../shared/pageSection/PageSection\";\r\nimport {Alert, Badge, Form, FormGroup, Label, Spinner} from \"reactstrap\";\r\nimport {ValidatedInput} from \"pojo-validator-reactstrap\";\r\nimport {useChanges} from \"../../shared/useChanges\";\r\nimport {ButtonAsync} from \"reactstrap-buttonasync\";\r\nimport {useValidatorCallback} from \"pojo-validator-react\";\r\nimport {ConditionalFragment} from \"../../shared/conditionalFragment\";\r\nimport {useClaimMessages} from \"../../api/main/claims/useClaimMessages\";\r\nimport {useCurrentClaimId} from \"../../api/main/claims/useCurrentClaimId\";\r\nimport {MessageComponent} from \"./MessageComponent\";\r\nimport {LoadingIndicator} from \"../shared/LoadingIndicator\";\r\nimport {claimMessagesQuery_claim_messages} from \"../../api/main/generated/claimMessagesQuery\";\r\nimport moment from \"moment\";\r\nimport {useSendMessageCallback} from '../../api/main/messages/useSendMessageCallback';\r\nimport {AlertOnErrors} from '../../shared/alertOnErrors';\r\nimport {GDPRConsentFormPart} from \"../shared/GDPRConsentFormPart\";\r\n\r\ninterface MessageModel {\r\n subject?: string,\r\n message?: string,\r\n gdprConsent?: boolean,\r\n}\r\n\r\n\r\nexport function Messages(){\r\n\r\n const claimId = useCurrentClaimId();\r\n\r\n /* received messages handling */\r\n // get existing messages\r\n const {data: {claim}, isLoading: messagesLoading, errors: messageLoadErrors} = useClaimMessages({id: claimId});\r\n const [unreadCount, setUnreadCount] = React.useState(0);\r\n const [unreadMessages, setSortedMessages] = React.useState<(claimMessagesQuery_claim_messages | null)[]>([]);\r\n\r\n // sort and count unread\r\n React.useEffect(() => {\r\n\r\n if (claim?.messages) {\r\n\r\n setUnreadCount(claim.messages.filter(m => m && !m.read).length);\r\n\r\n claim.messages.sort((a, b) => {\r\n if (!a?.dateSent || !b?.dateSent) return 0;\r\n let momentA = moment(a.dateSent);\r\n let momentB = moment(b.dateSent);\r\n return momentA.isBefore(momentB)\r\n ? 1\r\n : momentA.isAfter(momentB) ? -1 : 0;\r\n });\r\n\r\n setSortedMessages(claim.messages)\r\n }\r\n }, [claim])\r\n\r\n\r\n /* new message handling */\r\n const {model, change} = useChanges({message: \"\", subject: \"\", gdprConsent: false})\r\n const [isSent, setIsSent] = React.useState(false);\r\n const [sendMessageCallback, {isExecuting: isSending, errors: sendMessageErrors}] = useSendMessageCallback();\r\n\r\n const [validate, validationErrors] = useValidatorCallback((validation, fieldsToCheck) => {\r\n const rules = {\r\n subject: () => !model.subject ? 'Please enter topic' : '',\r\n message: () => !model.message ? 'Please enter message' : '',\r\n gdprConsent: () => !model.gdprConsent ? 'Please tick this box if you consent to our Privacy Notice' : ''\r\n };\r\n\r\n validation.checkRules(rules, fieldsToCheck);\r\n }, [model]);\r\n\r\n const sendMessage = React.useCallback(async () => {\r\n\r\n if (!validate()) return;\r\n\r\n // send message\r\n if (model.subject && model.message && claimId) {\r\n change({ message: \"\", subject: \"\" });\r\n setIsSent(true);\r\n await sendMessageCallback({ subject: model.subject, message: model.message, claimId: claimId });\r\n\r\n }\r\n\r\n }, [validate, claimId, change, model, sendMessageCallback])\r\n\r\n\r\n return (\r\n \r\n \r\n

{\"Messages\"}{claim?.messages && ({unreadCount})}

\r\n
\r\n \r\n \r\n \r\n \r\n {unreadMessages.length ? (\r\n unreadMessages.map((m, i) => {\r\n if (!m) return null;\r\n return \r\n })\r\n ) : (\r\n {\"No recent messages\"}\r\n )}\r\n
\r\n
\r\n \r\n \r\n {\"Thank you, we've received your message.\"}\r\n \r\n {/**/}\r\n
{e.preventDefault(); sendMessage();}}>\r\n \r\n \r\n change({subject: e.currentTarget.value})}\r\n />\r\n change({message: e.currentTarget.value})}\r\n />\r\n \r\n change({gdprConsent: checked})}\r\n onBlur={(e) => validate(\"gdprConsent\")}\r\n />\r\n {\"Sending...\"}}>\r\n {\"Send Message\"}\r\n \r\n \r\n
\r\n
\r\n )\r\n\r\n}\r\n","import {useLazyQuery} from \"@apollo/react-hooks\";\r\nimport gql from \"graphql-tag\";\r\nimport {mainApiConfig} from \"../../../configure/mainApiConfig\";\r\nimport {AsyncLoadResult} from \"../../../shared/abstractStore\";\r\nimport React from \"react\";\r\nimport {ClaimQueryOptions} from \"./useMyClaim\";\r\nimport {messageFieldsFragment} from \"../models/Message\";\r\nimport {claimMessagesQuery} from \"../generated/claimMessagesQuery\";\r\n\r\n\r\nexport function useClaimMessages(options: ClaimQueryOptions): AsyncLoadResult {\r\n // query data\r\n const [load, {data, loading, error, refetch}] = useLazyQuery(\r\n gql`\r\n query claimMessagesQuery ($id: String!) {\r\n claim (id: $id) {\r\n id,\r\n messages {\r\n ...messageFields\r\n }\r\n \r\n }\r\n }\r\n ${messageFieldsFragment}\r\n `, {\r\n variables: {\r\n id: options.id,\r\n },\r\n\r\n fetchPolicy: options.fetchPolicy ?? mainApiConfig.defaultFetchPolicy,\r\n pollInterval: options.pollInterval,\r\n onCompleted: (data) => {\r\n if (options.onCompleted){\r\n options.onCompleted(data);\r\n }\r\n }\r\n }\r\n )\r\n\r\n // run the query unless lazy loading is specified\r\n React.useEffect(() => {\r\n if (!options.lazy){\r\n load();\r\n }\r\n }, [options.lazy, load])\r\n\r\n // return the results\r\n const refresh = React.useCallback(async () => {\r\n !refetch? await load() : await refetch();\r\n }, [refetch, load])\r\n\r\n return React.useMemo(() => ({\r\n data: data ?? ({} as any),\r\n refresh: refresh,\r\n isLoading: loading,\r\n errors: error,\r\n }), [data, refresh, loading, error])\r\n}","import {AsyncActionStatus} from \"../../../shared/abstractStore\";\r\nimport {useAsyncCallback} from \"react-use-async-callback\";\r\nimport {EndUserService, SendMessageRequest} from \"../../account/EndUserService\";\r\n\r\n\r\n/**\r\n * Callback to send a message to Greenbridge\r\n */\r\nexport function useSendMessageCallback(): [(message: SendMessageRequest) => Promise, AsyncActionStatus] {\r\n const claimService = new EndUserService();\r\n\r\n const [action, { isExecuting, errors }] = useAsyncCallback(async (message: SendMessageRequest) => {\r\n return await claimService.sendMessage(message);\r\n }\r\n , [claimService]);\r\n\r\n return [action, { isExecuting, errors }];\r\n}\r\n\r\n","import {RouteEntry} from \"../../shared/routes\";\r\nimport {Messages} from \"./Messages\";\r\n\r\nexport const myMessagesRoutes: Array = [\r\n { path: '/messages/:id', component: Messages },\r\n { path: '/messages/', component: Messages },\r\n];\r\n","import './historyItem.scss';\r\n\r\nimport React from \"react\";\r\nimport {DateView} from \"../shared/dateView\";\r\nimport {LoadingIndicator} from \"../shared/LoadingIndicator\";\r\nimport moment from \"moment\";\r\n\r\n\r\nexport interface HistoryItemProps {\r\n placeholder?: boolean,\r\n text?: string,\r\n date?: moment.Moment\r\n}\r\n\r\n\r\nexport const HistoryItem = (props: HistoryItemProps) => {\r\n\r\n const {placeholder = false, text, date} = 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\n
{text}
\r\n
\r\n
\r\n
\r\n\r\n {placeholder ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n
\r\n )\r\n}\r\n\r\n\r\n","import './history.scss';\r\n\r\nimport React from \"react\";\r\nimport {TrackedClaimContainer} from \"../shared/TrackedClaimContainer\";\r\nimport {PageSection} from \"../../shared/pageSection/PageSection\";\r\nimport {useCurrentClaimId} from \"../../api/main/claims/useCurrentClaimId\";\r\nimport {NameValueBox} from \"../../shared/nameValueView/NameValueBox\";\r\nimport {useClaimEventHistories} from \"../../api/main/claims/useClaimEventHistories\";\r\nimport {AlertOnErrors} from \"../../shared/alertOnErrors\";\r\nimport {HistoryItem} from \"./HistoryItem\";\r\nimport {claimEventsQuery_claim_events} from \"../../api/main/generated/claimEventsQuery\";\r\nimport moment from \"moment\";\r\nimport {LoadingComponent} from \"../shared/LoadingComponent\";\r\n\r\n\r\nexport function History() {\r\n\r\n const claimId = useCurrentClaimId();\r\n const [displayData, setDisplayData] = React.useState<(claimEventsQuery_claim_events | null)[]>([]);\r\n\r\n // get events\r\n const {data, isLoading, errors} = useClaimEventHistories({id: claimId});\r\n\r\n // sort and filter events we want\r\n React.useEffect(() => {\r\n if (data.claim?.events){\r\n\r\n let events = data.claim.events.filter((e) => {\r\n return e?.name.includes(\"state changed to\") ||\r\n e?.name.toLowerCase().includes(\"Collection Arranged\")\r\n })\r\n\r\n events.sort((a, b) => {\r\n if (!a?.eventDate || !b?.eventDate) return 0;\r\n let momentA = moment(a.eventDate);\r\n let momentB = moment(b.eventDate);\r\n return momentA.isBefore(momentB)\r\n ? 1\r\n : momentA.isAfter(momentB) ? -1 : 0;\r\n });\r\n\r\n // sort by date descending\r\n setDisplayData(events);\r\n\r\n }\r\n }, [data])\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n

{\"History\"}

\r\n
\r\n \r\n
\r\n \r\n { isLoading && !displayData.length ? (\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 displayData.map((e, index) => {\r\n return ;\r\n })\r\n }\r\n \r\n
\r\n )\r\n\r\n}","import {useLazyQuery} from \"@apollo/react-hooks\";\r\nimport gql from \"graphql-tag\";\r\nimport {eventHistoryFieldsFragement} from \"../models/EventHistory\";\r\nimport {mainApiConfig} from \"../../../configure/mainApiConfig\";\r\nimport {AsyncLoadOptions, AsyncLoadResult} from \"../../../shared/abstractStore\";\r\nimport React from \"react\";\r\nimport {claimEventsQuery} from \"../generated/claimEventsQuery\";\r\n\r\n\r\nexport interface ClaimEventsOptions extends AsyncLoadOptions {\r\n id?: string,\r\n filterName?: string\r\n}\r\n\r\n\r\nexport function useClaimEventHistories(options: ClaimEventsOptions): AsyncLoadResult {\r\n // query data\r\n const [load, {data, loading, error, refetch}] = useLazyQuery(\r\n gql`\r\n query claimEventsQuery ($id: String!, $name: String) {\r\n claim (id: $id) {\r\n id,\r\n events (eventName: $name) {\r\n ...eventHistoryFields\r\n }\r\n }\r\n }\r\n ${eventHistoryFieldsFragement}\r\n `, {\r\n variables: {\r\n id: options.id,\r\n name: options.filterName\r\n },\r\n\r\n fetchPolicy: options.fetchPolicy ?? mainApiConfig.defaultFetchPolicy,\r\n pollInterval: options.pollInterval,\r\n onCompleted: (data) => {\r\n if (options.onCompleted){\r\n options.onCompleted(data);\r\n }\r\n }\r\n }\r\n )\r\n\r\n // run the query unless lazy loading is specified\r\n React.useEffect(() => {\r\n if (!options.lazy){\r\n load();\r\n }\r\n }, [options.lazy, load])\r\n\r\n // return the results\r\n const refresh = React.useCallback(async () => {\r\n !refetch? await load() : await refetch();\r\n }, [refetch, load])\r\n\r\n return React.useMemo(() => ({\r\n data: data ?? ({} as any),\r\n refresh: refresh,\r\n isLoading: loading,\r\n errors: error,\r\n }), [data, refresh, loading, error])\r\n}","import {RouteEntry} from \"../../shared/routes\";\r\nimport {History} from \"./History\";\r\n\r\nexport const historyRoutes: Array = [\r\n { path: '/history/:id', component: History },\r\n { path: '/history', component: History },\r\n];\r\n","import {ClaimPhotosResult, EndUserService} from \"../../account/EndUserService\";\r\nimport React from \"react\";\r\n\r\n\r\nexport function useGetInspectionPhotos(id?: string): {loading: boolean, photos: ClaimPhotosResult, errors: any[]} {\r\n const [isLoading, setIsLoading] = React.useState(false);\r\n const [error, setError] = React.useState(null);\r\n const [photos, setPhotos] = React.useState();\r\n\r\n async function loadData(){\r\n if (!id) return;\r\n\r\n const claimService = new EndUserService();\r\n try {\r\n setIsLoading(true);\r\n const result = await claimService.getClaimPhotos(id);\r\n setPhotos(result);\r\n } catch (e) {\r\n setError(e);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n }\r\n\r\n React.useEffect(() => {\r\n loadData();\r\n }, [id])\r\n\r\n return React.useMemo(() => ({\r\n loading: isLoading,\r\n photos: photos ?? {} as any,\r\n errors: [error]\r\n }), [photos, isLoading, error])\r\n}","import './galleryImage.scss';\r\n\r\nimport React from \"react\";\r\nimport {Button, Media, ModalBody, ModalFooter} from \"reactstrap\";\r\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\r\nimport {NameValueBox} from \"../../shared/nameValueView/NameValueBox\";\r\nimport {StyledModal} from \"./StyledModal\";\r\nimport {LoadingIndicator} from \"./LoadingIndicator\";\r\nimport {ConditionalFragment} from \"../../shared/conditionalFragment\";\r\n\r\n\r\nexport interface GalleryImageProps {\r\n alt: string,\r\n base64?: string,\r\n url?: string,\r\n captionHeader?: string,\r\n captionValue?: string,\r\n placeholder?: boolean\r\n}\r\n\r\nexport function GalleryImage(props: GalleryImageProps){\r\n const {base64, alt, url, captionHeader = \"\", captionValue = \"\", placeholder = false} = props;\r\n\r\n const [loaded, setLoaded] = React.useState(false);\r\n const [modal, setModal] = React.useState(false);\r\n\r\n const toggleModal = () => setModal(!modal);\r\n\r\n function downloadImage() {\r\n\r\n const a = document.createElement(\"a\");\r\n a.href = url ?? '';\r\n a.download = alt;\r\n document.body.appendChild(a)\r\n a.click();\r\n document.body.removeChild(a)\r\n }\r\n\r\n return (\r\n
\r\n {\r\n url ? (\r\n {alt} setLoaded(true)} />\r\n ): \r\n base64 && base64 !== \"\" && (\r\n {alt} setLoaded(true)} />\r\n )}\r\n {(!loaded || placeholder) && (\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n )}\r\n { loaded && !placeholder && (\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}","import moment from \"moment\";\r\nimport React from \"react\";\r\nimport { Alert, Container, Spinner } from \"reactstrap\";\r\nimport { ButtonAsync } from \"reactstrap-buttonasync\";\r\nimport { useClaimInspectionDate } from \"../../api/main/claims/useClaimInspectionDate\";\r\nimport { useCurrentClaimId } from \"../../api/main/claims/useCurrentClaimId\";\r\nimport { useGetInspectionPhotos } from \"../../api/main/claims/useGetInspectionPhotosCallback\";\r\nimport { AlertOnErrors } from \"../../shared/alertOnErrors\";\r\nimport { PageSection } from \"../../shared/pageSection/PageSection\";\r\nimport { useZipBlobCallback } from \"../../shared/useZipData\";\r\nimport { GalleryImage } from \"../shared/GalleryImage\";\r\nimport { LoadingComponent } from \"../shared/LoadingComponent\";\r\nimport { TrackedClaimContainer } from \"../shared/TrackedClaimContainer\";\r\nimport './photos.scss';\r\n\r\n\r\n\r\nexport function Photos() {\r\n\r\n const [showPlaceholders, setShowPlaceholders] = React.useState(false);\r\n // get inspection photos from server\r\n const claimId = useCurrentClaimId();\r\n const { photos, loading: isLoading, errors } = useGetInspectionPhotos(claimId);\r\n // get inspection date\r\n const { data: { item }, errors: claimErrors, isLoading: claimIsLoading } = useClaimInspectionDate({ id: claimId });\r\n\r\n // zip callback\r\n const [zipPhotos, { errors: zipErrors, isExecuting: isZipping }] = useZipBlobCallback();\r\n\r\n function downloadBlob(blob: Blob) {\r\n const url = URL.createObjectURL(blob);\r\n\r\n const a = document.createElement(\"a\");\r\n a.href = url;\r\n a.download = \"inspection_photos\";\r\n document.body.appendChild(a)\r\n a.click();\r\n document.body.removeChild(a)\r\n\r\n URL.revokeObjectURL(url);\r\n }\r\n\r\n React.useEffect(() => {\r\n setShowPlaceholders(isLoading && Object.keys(photos).length === 0);\r\n }, [photos, isLoading]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n

{\"Inspection Photos\"}

\r\n
\r\n {/* if loading and have no cached data, show placeholders */}\r\n {showPlaceholders ? (\r\n \r\n {Array.from({ length: 9 }).map((_, index) => {\r\n return \r\n })}\r\n \r\n ) :\r\n /* if loaded and have no data, show message */\r\n Object.keys(photos).length === 0 ? (\r\n {\"Inspection photos for this claim have not yet been taken.\"}\r\n ) : (\r\n /* if we have data, show pictures*/\r\n <>\r\n
\r\n {\r\n item?.inspectionStart?.eventDate ?\r\n `Inspection photos added ${moment(item.inspectionStart.eventDate).format(\"DD/MM/YYYY\")}`\r\n : \"\"\r\n }\r\n
\r\n {(\r\n \r\n {Object.entries(photos).map(([name, url], index) => {\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}","import {AsyncLoadResult} from \"../../../shared/abstractStore\";\r\nimport {useLazyQuery} from \"@apollo/react-hooks\";\r\nimport gql from \"graphql-tag\";\r\nimport {mainApiConfig} from \"../../../configure/mainApiConfig\";\r\nimport React from \"react\";\r\nimport {ClaimQueryOptions} from \"./useMyClaim\";\r\nimport {claimInspectionDateQuery} from \"../generated/claimInspectionDateQuery\";\r\n\r\n\r\n/**\r\n * Get claim and related state and spec details\r\n */\r\nexport function useClaimInspectionDate(options: ClaimQueryOptions): AsyncLoadResult {\r\n\r\n const [load, {loading, error, data, refetch}] = useLazyQuery(\r\n gql`\r\n query claimInspectionDateQuery($id: String!){\r\n item: claim(id: $id){\r\n id,\r\n number,\r\n inspectionStart: claimEvent(name: \"Claim state changed to Inspection.\") {\r\n id,\r\n eventDate\r\n }\r\n }\r\n }\r\n `, {\r\n variables: {id: options.id},\r\n fetchPolicy: options.fetchPolicy ?? mainApiConfig.defaultFetchPolicy,\r\n pollInterval: options.pollInterval,\r\n onCompleted: (data) => {\r\n if (options.onCompleted){\r\n options.onCompleted(data);\r\n }\r\n }\r\n }\r\n )\r\n\r\n // Run the query (unless we are being lazy).\r\n React.useEffect(() => {\r\n if (!options.lazy) {\r\n load();\r\n }\r\n }, [options.lazy, load])\r\n\r\n const refresh = React.useCallback(\r\n async () => {!refetch ? await load() : await refetch();},\r\n [refetch, load]);\r\n\r\n return React.useMemo(() => ({\r\n data: data ?? ({} as any),\r\n refresh: refresh,\r\n isLoading: loading,\r\n errors: error\r\n }), [data, refresh, loading, error]);\r\n\r\n}\r\n","import JSZip from \"jszip\";\r\nimport {useAsyncCallback} from \"react-use-async-callback\";\r\nimport {AsyncActionStatus} from \"../abstractStore\";\r\n\r\n\r\nexport interface ZipOptions {\r\n files: {[key: string]: string},\r\n folderName?: string\r\n}\r\n\r\n\r\n/**\r\n * Create a zip file blob from a collection of files, where\r\n * key is the full file name and value is the base64 encoded data\r\n */\r\nexport function useZipBlobCallback(): [(options: ZipOptions) => Promise, AsyncActionStatus] {\r\n\r\n const [action, {isExecuting, errors}] = useAsyncCallback(async (options: ZipOptions) => {\r\n const {files, folderName = \"content\"} = options;\r\n if (!files) return null;\r\n\r\n // create a new zip folder\r\n const zip = new JSZip();\r\n const folder = zip.folder(folderName);\r\n if (folder === null) throw new Error(\"Could not create a zip folder!\");\r\n\r\n // go through our file collection and add them to the zip folder\r\n Object.entries(files).filter(f => (f !== null)).forEach(([key, data]) => {\r\n folder?.file(key, data, {base64: true})\r\n })\r\n\r\n // generate a blob representation of the zipped data\r\n const result = await folder.generateAsync({type: \"blob\"})\r\n return result;\r\n }, []);\r\n\r\n return [action, { isExecuting, errors }];\r\n\r\n}","import {RouteEntry} from \"../../shared/routes\";\r\nimport {Photos} from \"./Photos\";\r\n\r\nexport const photosRoutes: Array = [\r\n { path: '/photos/:id', component: Photos },\r\n { path: '/photos', component: Photos },\r\n];\r\n","import './quote.scss';\r\n\r\nimport React from \"react\";\r\nimport {TrackedClaimContainer} from \"../shared/TrackedClaimContainer\";\r\nimport {PageSection} from \"../../shared/pageSection/PageSection\";\r\nimport {useCurrentClaimId} from \"../../api/main/claims/useCurrentClaimId\";\r\nimport {Table} from \"reactstrap\";\r\nimport {useClaimQuote} from \"../../api/main/claims/useClaimQuote\";\r\nimport {AlertOnErrors} from \"../../shared/alertOnErrors\";\r\nimport {ConditionalFragment} from \"../../shared/conditionalFragment\";\r\nimport {LoadingIndicator} from \"../shared/LoadingIndicator\";\r\n\r\n\r\nexport function Quote() {\r\n\r\n const claimId = useCurrentClaimId();\r\n\r\n const {data, isLoading, errors} = useClaimQuote({id: claimId});\r\n\r\n return (\r\n \r\n \r\n

Quote

\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 {!isLoading && data.item?.quote && (\r\n data.item.quote.quoteDetails.map((detail, index) => {\r\n if (!detail) return null;\r\n const total = Number.parseFloat(detail.total);\r\n const vat = Number.parseFloat(detail.vat);\r\n const exVat = total - vat;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n })\r\n ) }\r\n { data.item?.quote && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n
{\"Description\"}{\"Cost (Ex VAT)\"}{\"VAT\"}{\"Total Cost (Inc VAT)\"}
{detail.part?.name ?? index}{`£ ${exVat.toFixed(2)}`}{`£ ${detail.vat.toFixed(2)}`}{`£ ${detail.total.toFixed(2)}`}
{\"Total\"}{(Number.parseFloat(data.item.quote.total) - Number.parseFloat(data.item.quote.vat)).toFixed(2)}{Number.parseFloat(data.item.quote.vat).toFixed(2)}{Number.parseFloat(data.item.quote.total).toFixed(2)}
\r\n
\r\n
\r\n )\r\n\r\n}","import {AsyncLoadResult} from \"../../../shared/abstractStore\";\r\nimport {useLazyQuery} from \"@apollo/react-hooks\";\r\nimport gql from \"graphql-tag\";\r\nimport {mainApiConfig} from \"../../../configure/mainApiConfig\";\r\nimport React from \"react\";\r\nimport {ClaimQueryOptions} from \"./useMyClaim\";\r\nimport {quoteFieldsFragment} from \"../models/Quote\";\r\nimport {quoteDetailFieldsFragment} from \"../models/QuoteDetail\";\r\nimport {claimQuote} from \"../generated/claimQuote\";\r\n\r\n\r\nexport function useClaimQuote(options: ClaimQueryOptions): AsyncLoadResult {\r\n\r\n const [load, {loading, error, data, refetch}] = useLazyQuery(\r\n gql`\r\n query claimQuote($id: String!){\r\n item: claim(id: $id){\r\n id,\r\n number,\r\n quote {\r\n ...quoteFields,\r\n quoteDetails {\r\n ...quoteDetailFields\r\n part {\r\n id,\r\n name\r\n }\r\n }\r\n }\r\n }\r\n }\r\n ${quoteFieldsFragment}\r\n ${quoteDetailFieldsFragment}\r\n `, {\r\n variables: {id: options.id},\r\n fetchPolicy: options.fetchPolicy ?? mainApiConfig.defaultFetchPolicy,\r\n pollInterval: options.pollInterval,\r\n onCompleted: (data) => {\r\n if (options.onCompleted){\r\n options.onCompleted(data);\r\n }\r\n }\r\n }\r\n )\r\n\r\n // Run the query (unless we are being lazy).\r\n React.useEffect(() => {\r\n if (!options.lazy) {\r\n load();\r\n }\r\n }, [options.lazy, load])\r\n\r\n const refresh = React.useCallback(\r\n async () => {!refetch ? await load() : await refetch();},\r\n [refetch, load]);\r\n\r\n return React.useMemo(() => ({\r\n data: data ?? ({} as any),\r\n refresh: refresh,\r\n isLoading: loading,\r\n errors: error\r\n }), [data, refresh, loading, error]);\r\n\r\n}\r\n","import {RouteEntry} from \"../../shared/routes\";\r\nimport {Quote} from \"./Quote\";\r\n\r\nexport const quoteRoutes: Array = [\r\n { path: '/quote/:id', component: Quote },\r\n { path: '/quote', component: Quote },\r\n];\r\n","import React from \"react\";\r\nimport ReactPDF, {StyleSheet, View} from '@react-pdf/renderer';\r\n\r\n\r\n// pdf styles\r\nexport const pdfStyles = StyleSheet.create({\r\n table: {\r\n width: \"auto\",\r\n },\r\n body: {\r\n margin: \"40px\",\r\n },\r\n pageHeader: {\r\n margin: 0,\r\n backgroundColor: \"#67beb0\",\r\n fontStyle: \"bold\",\r\n maxWidth: \"100%\",\r\n flexDirection: \"row\",\r\n color: \"white\",\r\n fontSize: \"24px\",\r\n padding: \"25px\"\r\n },\r\n tableRow: {\r\n width: \"100%\",\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n flexGrow: 1,\r\n },\r\n tableHeader: {\r\n borderStyle: \"solid\",\r\n height: \"auto\",\r\n width: \"100%\",\r\n padding: 10,\r\n fontStyle: \"bold\",\r\n fontSize: 11,\r\n color: \"#505050\",\r\n flexGrow: 1,\r\n\r\n },\r\n tableCell: {\r\n borderStyle: \"solid\",\r\n height: \"auto\",\r\n width: \"100%\",\r\n margin: \"auto\",\r\n padding: 10,\r\n fontSize: 11,\r\n fontWeight: \"normal\",\r\n flexDirection: \"row\",\r\n flexGrow: 1,\r\n }\r\n});\r\n\r\n\r\nexport const PageHeader = (props: ReactPDF.ViewProps) => {\r\n const {children, style, ...rest} = props;\r\n const styleSheet = style ? {...pdfStyles.pageHeader, ...style} : pdfStyles.pageHeader;\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n\r\n\r\nexport const PdfTable = (props: ReactPDF.ViewProps) => {\r\n const {children, style, ...rest} = props;\r\n const styleSheet = style ? {...pdfStyles.table, ...style} : pdfStyles.table;\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n\r\nexport const PdfTableRow = (props: ReactPDF.ViewProps) => {\r\n const {children, style, ...rest} = props;\r\n const styleSheet = style ? {...pdfStyles.tableRow, ...style} : pdfStyles.tableRow;\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n\r\nexport const PdfTableHeader = (props: ReactPDF.ViewProps) => {\r\n const {children, style, ...rest} = props;\r\n const styleSheet = style ? {...pdfStyles.tableHeader, ...style} : pdfStyles.tableHeader;\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n\r\n\r\nexport const PdfTableCell = (props: ReactPDF.ViewProps) => {\r\n const {children, style, ...rest} = props;\r\n const styleSheet = style ? {...pdfStyles.tableCell, ...style} : pdfStyles.tableCell;\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n","import React from 'react';\r\nimport ReactPDF, {Document, Font, Image, Page, StyleSheet, Text, View} from \"@react-pdf/renderer\";\r\nimport {PageHeader, PdfTable, PdfTableRow} from \"../shared/PdfComponents\";\r\nimport {ReportModel} from \"./Report\";\r\n\r\n\r\nFont.register({\r\n family: \"Roobert\",\r\n fonts: [\r\n {\r\n src: `${process.env.PUBLIC_URL}/fonts/Roobert-Regular.ttf`,\r\n fontStyle: \"normal\",\r\n },\r\n {\r\n src: `${process.env.PUBLIC_URL}/fonts/Roobert-Regular.ttf`,\r\n fontStyle: \"semi-bold\",\r\n fontWeight: 700,\r\n },\r\n {\r\n src: `${process.env.PUBLIC_URL}/fonts/Roobert-Bold.ttf`,\r\n fontStyle: \"bold\",\r\n fontWeight: 700\r\n }\r\n ]\r\n})\r\n\r\n\r\n// pdf styles\r\nconst styles = StyleSheet.create({\r\n page: {\r\n backgroundColor: '#FFF',\r\n fontFamily: \"Roobert\",\r\n fontSize: \"8pt\",\r\n maxWidth: \"100%\",\r\n display: \"flex\",\r\n },\r\n sectionHeader: {\r\n fontStyle: \"bold\",\r\n fontSize: \"10pt\",\r\n width: \"100%\",\r\n textAlign: \"left\",\r\n marginTop: 20,\r\n marginBottom: 15,\r\n },\r\n tableParent: {\r\n paddingHorizontal: 60,\r\n paddingVertical: 20,\r\n },\r\n darkSection: {\r\n maxWidth: \"100%\",\r\n backgroundColor: \"#fafafa\",\r\n },\r\n lightSection: {\r\n maxWidth: \"100%\",\r\n backgroundColor: \"#FFF\"\r\n },\r\n tableHeader: {\r\n width: \"100pt\",\r\n minHeight: \"15pt\",\r\n color: \"#505050\",\r\n fontStyle: \"semi-bold\",\r\n display: \"flex\",\r\n flexGrow: 1,\r\n justifyContent: \"center\",\r\n alignItems: \"flex-start\",\r\n flexWrap: \"wrap\",\r\n },\r\n tableCell: {\r\n width: \"130pt\",\r\n minHeight: \"15pt\",\r\n fontStyle: \"normal\",\r\n display: \"flex\",\r\n flexGrow: 2,\r\n justifyContent: \"center\",\r\n alignItems: \"flex-start\",\r\n },\r\n darkCell: {\r\n padding: 5,\r\n backgroundColor: \"#fafafa\",\r\n border: \"3pt solid #fff\",\r\n },\r\n lightCell: {\r\n padding: 5,\r\n backgroundColor: \"#fff\",\r\n border: \"3pt solid #fafafa\",\r\n },\r\n leftTable: {\r\n width: \"50%\",\r\n flex: 1,\r\n },\r\n rightTable: {\r\n width: \"50%\",\r\n flex: 1,\r\n }\r\n});\r\n\r\n\r\n\r\nexport const ReportRow = (props: {header: string, value?: string, style?: ReactPDF.Style, displayEmpty?: boolean}) => {\r\n const {header, value, style = {}, displayEmpty = false} = props;\r\n\r\n const display = displayEmpty || value;\r\n\r\n if (!display) return (<>);\r\n\r\n return (\r\n \r\n \r\n {header}\r\n \r\n \r\n {value}\r\n \r\n \r\n )\r\n}\r\n\r\n\r\nexport const PdfReport = (props: ReportModel) => {\r\n\r\n const {\r\n claimNumber,\r\n policyNumber,\r\n jobReference,\r\n inspectionStart,\r\n inspectionEngineer,\r\n endUserName,\r\n endUserAddress,\r\n endUserPhone,\r\n accessories,\r\n equipmentType,\r\n deviceInformation,\r\n inspectionInformation\r\n } = props;\r\n\r\n\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {\"Inspection Report\"}\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 {inspectionStart && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n {\"Device Accessories Present\"}\r\n \r\n \r\n \r\n \r\n \r\n {accessories && accessories.length ?\r\n accessories.map((item, _) => {\r\n return `• ${item}\\n`;\r\n })\r\n : \"N/A\"}\r\n \r\n \r\n \r\n \r\n \r\n {\"Device Information\"}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\"Inspection Information\"}\r\n \r\n \r\n \r\n \r\n \r\n {\"Terms & Conditions\"}\r\n \r\n \r\n {\"Greenbridge Technology is a trading name of Laptop Power NW Ltd (Company 079539), \" +\r\n \"who have been instructed on behalf of the Insurance Company to handle your insurance claim. \" +\r\n \" Greenbridge Technology will take care to look after your personal data, however, \" +\r\n \"please ensure that all data has been fully backed up before your unit is collected. \" +\r\n \"If your machine is repairable any parts/components required will be ordered and the repair completed. \" +\r\n \"Payment of your excess on your policy will be required before a repair can take place. \" +\r\n \"If the unit is beyond economical repair. \" +\r\n \"The Insurance Company will replace the unit with a new equivalent specification machine,\" +\r\n \" based on the specification listed above.\"}\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n","import './report.scss';\r\n\r\nimport {BlobProvider, pdf} from '@react-pdf/renderer';\r\nimport moment from \"moment\";\r\nimport React from \"react\";\r\nimport {Col, Container, Row, Spinner, Table} from \"reactstrap\";\r\nimport {ButtonAsync} from \"reactstrap-buttonasync\";\r\nimport {useCurrentClaimId} from \"../../api/main/claims/useCurrentClaimId\";\r\nimport {useMyClaimDetails} from \"../../api/main/claims/useMyClaimDetails\";\r\nimport {AlertOnErrors} from \"../../shared/alertOnErrors\";\r\nimport {PageSection} from \"../../shared/pageSection/PageSection\";\r\nimport {LoadingComponent} from \"../shared/LoadingComponent\";\r\nimport {TrackedClaimContainer} from \"../shared/TrackedClaimContainer\";\r\nimport {PdfReport} from './PdfReport';\r\nimport {useFormattedAddressCallback} from \"../../shared/useFormattedAddressCallback\";\r\nimport {useAsyncCallback} from \"react-use-async-callback\";\r\n\r\n\r\nexport interface InspectionItem {\r\n sharedKey?: string | null,\r\n name: string,\r\n value: string\r\n}\r\n\r\n\r\nexport interface ReportModel {\r\n claimNumber: string,\r\n policyNumber: string,\r\n jobReference: string,\r\n inspectionStart?: moment.Moment | null,\r\n inspectionEngineer: string,\r\n endUserName: string,\r\n endUserAddress: string,\r\n endUserPhone: string,\r\n accessories: string[],\r\n equipmentType: string,\r\n deviceInformation: { [key: string]: InspectionItem },\r\n inspectionInformation: { [key: string]: InspectionItem },\r\n}\r\n\r\n\r\nconst ReportRow = (props: { name: string, value?: string, displayEmpty?: boolean }) => {\r\n const { name: header, value, displayEmpty = false } = props;\r\n\r\n const display = displayEmpty || (value && value !== \"\")\r\n\r\n if (!display) return (<>)\r\n return (\r\n \r\n {header}\r\n {value}\r\n \r\n )\r\n}\r\n\r\n\r\nexport function Report() {\r\n const claimId = useCurrentClaimId();\r\n\r\n const [pdfError, setPdfError] = React.useState(null);\r\n const [model, setModel] = React.useState(null);\r\n\r\n const deviceDetails = [\r\n \"Manufacturer\",\r\n \"Model\",\r\n \"Colour\",\r\n \"Serial Number\",\r\n \"IMEI\",\r\n \"CPU\",\r\n \"Processor\",\r\n \"RAM\",\r\n \"Memory Size\",\r\n ]\r\n\r\n const inspectionDetails = [\r\n \"Inspection Type 1\",\r\n \"Inspection Type 2\",\r\n \"Inspection Type 3\",\r\n \"Repair Action Needed\",\r\n ]\r\n\r\n // get data forms\r\n const { data: { item }, isLoading, errors } = useMyClaimDetails({ id: claimId });\r\n const formatAddress = useFormattedAddressCallback();\r\n\r\n // generate pdf callback\r\n const [generatePdf, {errors: pdfErrors, isExecuting}] = useAsyncCallback(async () => {\r\n if (!model) return;\r\n const blob = await pdf().toBlob();\r\n const url = URL.createObjectURL(blob);\r\n window.open(url, \"__blank\");\r\n }, [model])\r\n\r\n // generate report model from data\r\n React.useEffect(() => {\r\n\r\n if (!item) return;\r\n\r\n const inspectionData: { [key: string]: InspectionItem } = {};\r\n const deviceData: { [key: string]: InspectionItem } = {};\r\n\r\n // parse and add data form information to relevant fields\r\n if (item?.dataFormData) {\r\n\r\n // extract relevant data from data form\r\n for (let dataItem of item.dataFormData) {\r\n let name = dataItem?.name;\r\n if (!name && name !== null) continue;\r\n\r\n // change name of inspection type to something more user friendly\r\n let displayName = name;\r\n if (name.includes(\"Inspection Type \")) {\r\n displayName = name.replace(\"Inspection Type \", \"Fault Diagnosis \");\r\n }\r\n\r\n // create model item and add it to the relevant list\r\n const inspectionItem: InspectionItem = {\r\n name: displayName,\r\n sharedKey: dataItem?.sharedDataKey,\r\n value: dataItem?.stringValue ?? dataItem?.decimalValue\r\n }\r\n\r\n if (inspectionDetails.includes(name)) inspectionData[name] = inspectionItem;\r\n if (deviceDetails.includes(name)) deviceData[name] = inspectionItem;\r\n }\r\n }\r\n\r\n let engineerName = \"\";\r\n if (item.inspectionStart?.engineer) {\r\n const split = item.inspectionStart.engineer.split(\" \");\r\n const firstName = split[0];\r\n const lastInitial = split[1] ? split[1][0] : \"\";\r\n engineerName = `${firstName} ${lastInitial}`\r\n }\r\n\r\n // set our report model\r\n setModel({\r\n claimNumber: item.number,\r\n policyNumber: item.policyNumber,\r\n jobReference: item.externalReference,\r\n inspectionStart: item.inspectionStart?.eventDate ? moment(item.inspectionStart.eventDate) : null,\r\n inspectionEngineer: engineerName ?? \"\",\r\n endUserName: item.endUserName ?? \"\",\r\n endUserAddress: formatAddress(item.registeredAddress),\r\n endUserPhone: item.endUserMobile ?? item.endUserPhone,\r\n accessories: item.accessories ? item.accessories.split(\"\\n\") : [],\r\n equipmentType: item.equipmentType?.name ?? \"\",\r\n deviceInformation: deviceData ?? {} as any,\r\n inspectionInformation: inspectionData ?? {} as any,\r\n });\r\n\r\n }, [item]);\r\n\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n

Inspection Report

\r\n
\r\n
\r\n {model && (\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
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
{\"Device Accessories Present\"}
{\r\n model.accessories.length ?\r\n
    \r\n {model.accessories.map((a, i) => {\r\n return
  • {a}
  • \r\n })}\r\n
\r\n : \"None\"\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
\r\n
\r\n
\r\n \r\n \r\n await generatePdf()}\r\n isExecuting={isExecuting}\r\n executingChildren={<>{\" Generating pdf...\"}}\r\n >\r\n {\"Download Inspection Report\"}\r\n \r\n \r\n \r\n )}\r\n\r\n
\r\n )\r\n}\r\n\r\n\r\n","import {RouteEntry} from \"../../shared/routes\";\r\nimport {Report} from \"./Report\";\r\nimport {TrackMyClaim} from \"../track/TrackMyClaim\";\r\n\r\nexport const reportRoutes: Array = [\r\n { path: '/report/:id', component: Report },\r\n { path: '/report/', component: TrackMyClaim },\r\n];\r\n","import {RouteEntry} from \"../../shared/routes\";\r\nimport {TrackMyClaim} from \"./TrackMyClaim\";\r\n\r\nexport const trackRoutes: Array = [\r\n { path: '/track', component: TrackMyClaim },\r\n];\r\n","export const stripeConfig = {\r\n //publishableKey: 'pk_test_rnfl7WRJHAgakpRWhSNxljIT', // Test (Ambidect)\r\n publishableKey: 'pk_live_51MrgtzLvsHSdIL0eQmSuJK25605eSBibsuqNCC9bAkRL0fYEj9uXvnApst09aeP10KdkJjk5a7fP163SlR3RpQ7C00NxeDu00s', // Live (Greenbridge)\r\n};","import React, { useState } from \"react\";\r\nimport { TrackedClaimContainer } from \"../shared/TrackedClaimContainer\";\r\nimport { PageSection } from \"../../shared/pageSection/PageSection\";\r\nimport { useCurrentClaimId } from \"../../api/main/claims/useCurrentClaimId\";\r\nimport moment from \"moment\";\r\nimport { useStripe, useElements, PaymentElement, Elements } from \"@stripe/react-stripe-js\";\r\nimport { ConditionalFragment } from \"../../shared/conditionalFragment\";\r\nimport { useMyClaimDetails } from \"../../api/main/claims/useMyClaimDetails\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { loadStripe } from '@stripe/stripe-js/';\r\nimport { stripeConfig } from \"../../configure/stripeConfig\";\r\nimport { myClaimSupportingDetailsQuery_item } from \"../../api/main/generated/myClaimSupportingDetailsQuery\";\r\nimport { Guid } from \"guid-string\";\r\n\r\n// Make sure to call `loadStripe` outside of a component�s render to avoid recreating the `Stripe` object on every render.\r\nconst stripePromise = loadStripe(stripeConfig.publishableKey);\r\n\r\nexport function StripeExcessContainer() {\r\n\r\n const [clientSecret, setClientSecret] = React.useState(\"\");\r\n const claimId = useCurrentClaimId();\r\n\r\n\r\n\r\n React.useEffect(() => {\r\n if (!claimId) {\r\n return;\r\n }\r\n\r\n // Create PaymentIntent as soon as the page loads\r\n fetch(\"/api/create-payment-intent/Create\", {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify({ item: { id: claimId } }),\r\n })\r\n .then((res) => res.json())\r\n .then((info) => setClientSecret(info.clientSecret));\r\n }, [claimId]);\r\n\r\n const options = {\r\n clientSecret\r\n };\r\n\r\n return (\r\n \r\n {clientSecret && (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n\r\n}\r\n\r\nexport interface excessPaymentProps {\r\n claimId: string | undefined,\r\n paymentStatus?: string | undefined,\r\n}\r\n\r\nexport const ExcessPayment = (props: excessPaymentProps) => {\r\n\r\n const {\r\n claimId,\r\n paymentStatus: initialPaymentStatus,\r\n } = props;\r\n\r\n var { data, isLoading, errors } = useMyClaimDetails({ id: claimId })\r\n\r\n const stripe = useStripe();\r\n const elements = useElements();\r\n\r\n const [paymentStatus, setPaymentStatus] = useState(initialPaymentStatus);\r\n const [paymentError, setPaymentError] = useState();\r\n\r\n const handleSubmit = async () => {\r\n if (!stripe || !elements || !data.item?.id) {\r\n // stop from being null\r\n return;\r\n }\r\n\r\n const result = await stripe.confirmPayment({\r\n //`Elements` instance that was used to create the Payment Element\r\n elements: elements as any,\r\n redirect: \"always\", // Will only redirect if the payment method requires it.\r\n confirmParams: {\r\n return_url: new URL(`/excess-payment-completed/${claimId}`, new URL(window.location.href)).toString(),\r\n }\r\n });\r\n\r\n if (result.error) {\r\n // Show error to your customer (for example, payment details incomplete)\r\n console.log(result.error.message);\r\n setPaymentError(result.error.message);\r\n setPaymentStatus('error');\r\n }\r\n //else if (result.paymentIntent.amount === (data.item.policyExcessAmount * 100)) {\r\n // // Only want to progress if the numbers match\r\n\r\n // // Your customer will be redirected to your `return_url`.\r\n // // For some payment methods like iDEAL, your customer will be redirected to an intermediate site first to authorize the payment, then redirected to the `return_url`.\r\n\r\n // // log a succesful payment\r\n // setPaymentStatus('success');\r\n //}\r\n };\r\n\r\n return (\r\n \r\n \r\n
\r\n
\r\n \r\n {\" Excess has been paid\"}\r\n
\r\n

Excess was paid on: {moment(data.item?.excessTakenDate).format('DD-MM-YYYY')}

\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n \r\n {\"Error taking excess payment\"}\r\n
\r\n

Message from your payment provider: {paymentError}

\r\n
\r\n
\r\n\r\n { /*Unsure if the excess amount will ever be 0 live but we will deal with it just incase*/}\r\n \r\n
\r\n
\r\n

No excess to be paid

\r\n
\r\n
\r\n
\r\n\r\n 0 && !data.item.excessPaymentTaken}>\r\n
\r\n
\r\n

Excess due: £{data.item?.policyExcessAmount.toFixed(2)}

\r\n
\r\n
\r\n
{\r\n e.preventDefault();\r\n\r\n handleSubmit();\r\n }}>\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n\r\n};","import React, { useMemo } from \"react\";\r\nimport { useParams } from \"react-router\";\r\nimport { ExcessPayment } from \"./ExcessPayment\";\r\nimport { useCurrentClaimId } from \"../../api/main/claims/useCurrentClaimId\";\r\nimport { TrackedClaimContainer } from \"../shared/TrackedClaimContainer\";\r\nimport { Elements } from \"@stripe/react-stripe-js\";\r\nimport { loadStripe } from \"@stripe/stripe-js\";\r\nimport { stripeConfig } from \"../../configure/stripeConfig\";\r\n\r\n/**\r\n * Redirected here after payment excess is complete.\r\n */\r\nexport const ExcessPaymentComplete = () => {\r\n const { claimId } = useParams();\r\n \r\n const {\r\n redirect_status,\r\n } = useMemo(() => {\r\n const urlSearchParams = new URLSearchParams(window.location.search);\r\n\r\n return {\r\n payment_intent: urlSearchParams.get('payment_intent'),\r\n payment_intent_client_secret: urlSearchParams.get('payment_intent_client_secret'),\r\n redirect_status: urlSearchParams.get('redirect_status'),\r\n };\r\n }, []);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\n// Make sure to call `loadStripe` outside of a component�s render to avoid recreating the `Stripe` object on every render.\r\nconst stripePromise = loadStripe(stripeConfig.publishableKey);\r\n\r\nexport function StripeExcessCompleteContainer() {\r\n\r\n const [clientSecret, setClientSecret] = React.useState(\"\");\r\n const claimId = useCurrentClaimId();\r\n\r\n React.useEffect(() => {\r\n if (!claimId) {\r\n return;\r\n }\r\n\r\n // Create PaymentIntent as soon as the page loads\r\n fetch(\"/api/create-payment-intent/Create\", {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify({ item: { id: claimId } }),\r\n })\r\n .then((res) => res.json())\r\n .then((info) => setClientSecret(info.clientSecret));\r\n }, [claimId]);\r\n\r\n const options = {\r\n clientSecret\r\n };\r\n\r\n return (\r\n \r\n {clientSecret && (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n\r\n}","import { RouteEntry } from \"../../shared/routes\";\r\nimport { StripeExcessContainer } from \"./ExcessPayment\";\r\nimport { StripeExcessCompleteContainer } from \"./ExcessPaymentComplete\";\r\n\r\nexport const excessPaymentRoutes: Array = [\r\n { path: '/excess-payment/:id', component: StripeExcessContainer },\r\n { path: '/excess-payment-completed/:id', component: StripeExcessCompleteContainer },\r\n];\r\n","import {RouteEntry} from \"../shared/routes\";\r\nimport {apiAuthorizationRoutes} from \"../components/api-authorization/routes\";\r\nimport {accountRoutes} from \"../components/account/routes\";\r\nimport {NotFound} from \"../components/shared/NotFound\";\r\nimport {homeRoutes} from \"../components/home/routes\";\r\nimport {myClaimRoutes} from \"../components/myClaim/routes\";\r\nimport {myDeliveryRoutes} from \"../components/myDelivery/routes\";\r\nimport {myDetailsRoutes} from \"../components/myDetails/routes\";\r\nimport {myMessagesRoutes} from \"../components/messages/routes\";\r\nimport {historyRoutes} from \"../components/history/routes\";\r\nimport {photosRoutes} from \"../components/photos/routes\";\r\nimport {quoteRoutes} from \"../components/quote/routes\";\r\nimport {reportRoutes} from \"../components/report/routes\";\r\nimport {trackRoutes} from \"../components/track/routes\";\r\nimport { excessPaymentRoutes } from \"../components/excessPayment/routes\";\r\n\r\n\r\nexport const appRoutes: Array = [\r\n ...apiAuthorizationRoutes,\r\n ...accountRoutes,\r\n ...excessPaymentRoutes,\r\n ...homeRoutes,\r\n ...historyRoutes,\r\n ...myMessagesRoutes,\r\n ...myClaimRoutes,\r\n ...myDetailsRoutes,\r\n ...photosRoutes,\r\n ...quoteRoutes,\r\n ...reportRoutes,\r\n ...myDeliveryRoutes,\r\n ...trackRoutes,\r\n\r\n { path: undefined, component: NotFound }\r\n];\r\n","import * as React from 'react';\r\nimport { Button } from 'reactstrap';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useHistory } from 'react-router';\r\nimport { MainContainer } from './MainContainer';\r\nimport { Banner } from './Banner';\r\nimport { Background } from './Background';\r\n\r\n/**\r\n * Component to show when a route is not found. \r\n */\r\nexport const NotFound = () => {\r\n const { t } = useTranslation();\r\n const history = useHistory();\r\n\r\n return (\r\n \r\n \r\n

{t('notFound.notFoundHeading', 'Sorry the page you have requested cannot be found')}

\r\n
\r\n \r\n

\r\n {t('notFound.helpText', 'The link you have acccessed is for a page that could not be found. Please check and try again, or try navigating to the page you want using the apps menus.')}\r\n

\r\n\r\n \r\n
\r\n
\r\n );\r\n};","import {Library, library} from '@fortawesome/fontawesome-svg-core';\r\nimport {\r\n faBusinessTime,\r\n faCalendarWeek,\r\n faCaretDown,\r\n faCaretLeft,\r\n faCaretRight,\r\n faCaretUp,\r\n faCircle,\r\n faCogs,\r\n faComment,\r\n faDownload,\r\n faEdit,\r\n faEllipsisV,\r\n faExclamation,\r\n faExclamationCircle,\r\n faEye,\r\n faEyeSlash,\r\n faLock,\r\n faMinus,\r\n faPencilAlt,\r\n faPlus,\r\n faProjectDiagram,\r\n faSave,\r\n faSearch,\r\n faSpinner,\r\n faStop,\r\n faStopwatch,\r\n faTimes,\r\n faTimesCircle,\r\n faTrash,\r\n faUndo,\r\n faUser,\r\n faUserClock,\r\n faUsers,\r\n faCheckCircle,\r\n} from '@fortawesome/free-solid-svg-icons';\r\nimport {faFrown as farFrown, faFrownOpen as farFrownOpen, faHourglass} from '@fortawesome/free-regular-svg-icons';\r\n\r\n// Import the fontawsome icons we actually want to use.\r\nexport const initializeIcons = () => {\r\n configureIcons(library);\r\n};\r\n\r\nexport const configureIcons = (library: Library) => {\r\n library.add(\r\n // solid\r\n faBusinessTime,\r\n faCalendarWeek,\r\n faCaretUp,\r\n faCaretDown,\r\n faEye,\r\n faEyeSlash,\r\n faEllipsisV,\r\n faExclamation,\r\n faCaretLeft,\r\n faCaretRight,\r\n faDownload,\r\n faCogs,\r\n faEdit,\r\n faExclamationCircle,\r\n faLock,\r\n faMinus,\r\n faPlus,\r\n faProjectDiagram,\r\n faPencilAlt,\r\n faSave,\r\n faSearch,\r\n faSpinner,\r\n faStop,\r\n faStopwatch,\r\n faTimes,\r\n faTimesCircle,\r\n faTrash,\r\n faUndo,\r\n faUser,\r\n faUserClock,\r\n faUsers,\r\n faComment,\r\n faCircle,\r\n faCheckCircle,\r\n\r\n // regular\r\n farFrown,\r\n farFrownOpen,\r\n faHourglass,\r\n );\r\n};\r\n","import { InMemoryCache } from \"apollo-cache-inmemory\";\r\nimport { HttpLink } from \"apollo-link-http\";\r\nimport { mainApiConfig } from \"./mainApiConfig\";\r\nimport ApolloClient from \"apollo-client\";\r\nimport { CachePersistor } from 'apollo-cache-persist';\r\n\r\nconst cache = new InMemoryCache();\r\n\r\n// Load cache from the persisited storage.\r\nexport const apolloCachePersistor = new CachePersistor({\r\n cache,\r\n storage: (window.localStorage as any),\r\n});\r\napolloCachePersistor.persist();\r\n\r\nconst link = new HttpLink({\r\n uri: mainApiConfig.endpoint,\r\n credentials: 'same-origin',\r\n});\r\n\r\nexport const apolloClient = new ApolloClient({\r\n cache,\r\n link\r\n});","// Import the required localization files for momentjs.\r\n//import 'moment/locale/en-us'; // Built in.\r\nimport 'moment/locale/en-gb';\r\n//import 'moment/locale/fr';\r\n//import 'moment/locale/pt';\r\n//import 'moment/locale/es';\r\n\r\n// Import the required localization files for numeraljs.\r\n//import 'numeral/locale/en-us'; // Built in.\r\nimport 'numeral/locales/en-gb';\r\n//import 'numeral/locales/fr';\r\n//import 'numeral/locales/pt-pt';\r\n//import 'numeral/locales/es';\r\n\r\n\r\n/**\r\n * Languages available in the application. \r\n */\r\nexport const availableLanguages = [\r\n { code: 'en-US', name: 'English (American)', flagCountryCode: 'us', momentLocale: 'en', numeralLocale: 'en' },\r\n { code: 'en-GB', name: 'English (British)', flagCountryCode: 'gb', momentLocale: 'en-gb', numeralLocale: 'en-gb' },\r\n //{ code: 'fr', name: 'Français', flagCountryCode: 'fr', momentLocale: 'fr', numeralLocale: 'fr' },\r\n //{ code: 'pt', name: 'Português', flagCountryCode: 'pt', momentLocale: 'pt', numeralLocale: 'pt-pt' },\r\n //{ code: 'es', name: 'Español', flagCountryCode: 'fr', momentLocale: 'fr', numeralLocale: 'fr' }\r\n];\r\n","import storage from 'redux-persist/lib/storage';\r\n\r\nexport const persistConfig = {\r\n key: 'root',\r\n storage,\r\n // List of things we do want persisting, to avoid unexpected side effects we use a whitelist rather than a blacklist here.\r\n whitelist: ['cache']\r\n};\r\n","import { combineReducers, configureStore } from \"@reduxjs/toolkit\";\r\nimport { persistStore, persistReducer } from 'redux-persist';\r\nimport { CacheState, cacheReducer } from './cache';\r\nimport { persistConfig } from \"./persistConfig\";\r\n\r\nexport interface AppReduxStore {\r\n cache: CacheState,\r\n}\r\n\r\nexport const rootReducer = combineReducers({\r\n cache: cacheReducer\r\n});\r\n\r\nexport const persistedRootReducer = persistReducer(\r\n persistConfig,\r\n rootReducer\r\n);\r\n\r\n/**\r\n * Create and configure a redux store for the app.\r\n */\r\nexport const createAppReduxStore = () => {\r\n var windowAny = window as any;\r\n const preloadedState = windowAny.initialReduxState;\r\n\r\n const store = configureStore({\r\n reducer: persistedRootReducer,\r\n preloadedState: preloadedState ?? {},\r\n middleware: []\r\n });\r\n\r\n // Persist to locaal storage if needed.\r\n const persistor = persistStore(store);\r\n\r\n //if (process.env.NODE_ENV !== 'production' && module.hot) {\r\n // module.hot.accept('./reducers', () => store.replaceReducer(rootReducer))\r\n //}\r\n\r\n return { store, persistor };\r\n};\r\n","import * as React from 'react';\r\nimport {Layout} from './components/layout/Layout';\r\nimport {ServiceProviderContext} from 'inject-typesafe-react';\r\nimport {createServiceProvider} from './configure/configureServices';\r\nimport {AppRoutes} from './components/shared/AppRoutes';\r\nimport {appRoutes} from './configure/routeConfig';\r\nimport {initializeIcons} from './configure/iconsConfig';\r\nimport {Helmet, HelmetProvider} from 'react-helmet-async';\r\nimport {ApolloProvider} from '@apollo/react-hooks';\r\nimport {apolloCachePersistor, apolloClient} from './configure/configureApollo';\r\nimport {configurei18n} from './configure/i18n';\r\nimport {LoadingIndicator} from './components/shared/LoadingIndicator';\r\nimport {I18nextProvider} from 'react-i18next';\r\nimport {createAppReduxStore} from './reduxStore/store';\r\nimport {Provider as ReduxProvider} from 'react-redux';\r\nimport {PersistGate} from 'redux-persist/integration/react';\r\nimport authService from './api/api-authorization/AuthorizeService';\r\nimport {configureErrorMessages} from './configure/errorMessageConfig';\r\n\r\n// Configure redux.\r\nconst { store: reduxStore, persistor: reduxStorePersistor } = createAppReduxStore();\r\n\r\n// Configure services.\r\nconst serviceProvider = createServiceProvider(reduxStore);\r\n\r\n// When the authorization state changes, clear the right parts of our caches.\r\nauthService.subscribe(() => {\r\n reduxStorePersistor.purge();\r\n apolloCachePersistor.purge();\r\n});\r\n\r\n// Configure icons.\r\ninitializeIcons();\r\n\r\n// Configure i18n\r\nconst i18n = configurei18n();\r\n\r\n// Configure server and 3rd party error messages to make them friendly and translatable.\r\nconfigureErrorMessages();\r\n\r\n// App component.\r\nexport const App = () => {\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 \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","import i18n from 'i18next';\r\nimport { initReactI18next } from 'react-i18next';\r\nimport Backend from 'i18next-xhr-backend';\r\nimport LanguageDetector from 'i18next-browser-languagedetector';\r\nimport moment, { isMoment } from 'moment';\r\nimport numeral from 'numeral';\r\nimport { isNumber } from 'util';\r\nimport { availableLanguages } from './languageConfig';\r\n\r\n// not like to use this?\r\n// have a look at the Quick start guide \r\n// for passing in lng and translations on init\r\nexport function configurei18n() {\r\n i18n\r\n // load translation using xhr -> see /public/locales\r\n // learn more: https://github.com/i18next/i18next-xhr-backend\r\n .use(Backend)\r\n // detect user language\r\n // learn more: https://github.com/i18next/i18next-browser-languageDetector\r\n .use(LanguageDetector)\r\n // pass the i18n instance to react-i18next.\r\n .use(initReactI18next)\r\n // init i18next\r\n // for all options read: https://www.i18next.com/overview/configuration-options\r\n .init({\r\n fallbackLng: 'en',\r\n //debug: true,\r\n\r\n interpolation: {\r\n escapeValue: false, // not needed for react as it escapes by default\r\n\r\n format: function (value, format, lang) {\r\n // Handle dates with moment.\r\n if (value instanceof Date) {\r\n return moment(value).format(format);\r\n } else if (isMoment(value)) {\r\n return moment(value).format(format);\r\n }\r\n\r\n // Handle numbers with numeral.\r\n if (value instanceof Number) {\r\n return numeral(value).format(format);\r\n } else if (isNumber(value)) {\r\n return numeral(value).format(format);\r\n }\r\n\r\n return value;\r\n }\r\n }\r\n });\r\n\r\n // Keep the moment and numeral formats in sync with the i18n formats.\r\n i18n.on('languageChanged', (lng) => {\r\n const thisLanguage = availableLanguages.find(item => item.code === lng);\r\n\r\n moment.locale(thisLanguage?.momentLocale ?? lng);\r\n numeral.locale(thisLanguage?.numeralLocale ?? lng);\r\n });\r\n\r\n return i18n;\r\n}\r\n","import { registerErrorMessageConverters } from \"../shared/userFriendlyErrorMessage\";\r\nimport i18next from \"i18next\";\r\n\r\n// Register the converters to make friendly versions of error messages.\r\n// This is primarily used to make friendly versions of message from 3rd party libraries, or the server.\r\n// By convention tranlsation keys for returned errors should start \"error.\" rather than \"errorMessageConfig.\".\r\nexport function configureErrorMessages() {\r\n registerErrorMessageConverters([\r\n // Convert the apollo graphql errors message to something more friendly.\r\n (error) => {\r\n let shouldHandle = false;\r\n let message = error?.message ?? error?.toString() ?? ''; /* Sometimes we get an Error sometimes we get a String */\r\n let graphQLErrors: Array = [];\r\n switch (message) {\r\n // Network errors get a friendly message that is nicer given the use of cache for offline support.\r\n case 'Network error: Failed to fetch':\r\n message = i18next.t('error.apollo.networkErrorFailedToFetch', 'Could not synchronize information with the cloud.');\r\n shouldHandle = true;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n // Handle graphQL errors as they all start with GraphQL error: in their message.\r\n if (message.indexOf('GraphQL error: ') === 0) {\r\n if (message.indexOf('GraphQL error: GraphQL.Validation.ValidationError: ') === 0) {\r\n message = i18next.t('error.apollo.graphQLValidationError', 'GraphQL error: request is not not a valid GraphQL query or mutaton.');\r\n } else if (message.indexOf('GraphQL error: GraphQL.ExecutionError: ') === 0) {\r\n message = i18next.t('error.apollo.graphQLExecutionError', 'GraphQL error: query or mutation could not be executed.');\r\n }\r\n\r\n shouldHandle = true;\r\n }\r\n\r\n // If we have a graphQL errors, then lets handle those as seperate errors for the purpose of showing them.\r\n if (error?.graphQLErrors) {\r\n graphQLErrors = error?.graphQLErrors;\r\n shouldHandle = true;\r\n }\r\n\r\n // If we haven't decided we should handle this error by this point then just skip it.\r\n if (!shouldHandle) {\r\n console.log(error);\r\n return null;\r\n }\r\n\r\n // If we have multiple graphQLErrors in one Error object, lets return one error for each GraphQL error.\r\n if (graphQLErrors.length) {\r\n return graphQLErrors.map(item => ({\r\n message: message,\r\n details: i18next.t('errors.apollo.graphQLErrors.detail', '{{message}} location: {{location}}', { message: item.message, location: item.location }),\r\n error: error,\r\n }));\r\n }\r\n\r\n // Return the error.\r\n return { message, error };\r\n },\r\n\r\n // Convert error messages from the Account REST API to make them translatable.\r\n // Note that the original messages are friendly enough so we just use those for English but pass them for translation.\r\n (error) => {\r\n switch (error?.message) {\r\n // General messages used by multiple actions in the API.\r\n case 'This email does not have an account here.':\r\n return i18next.t('error.accountApi.common.NoAccountHere', 'This email does not have an account here.');\r\n case 'This account is not allowed to use this site.':\r\n return i18next.t('error.accountApi.common.notAllowed', 'This account is not allowed to use this site.');\r\n case '\"This account has been locked out, please try again later.':\r\n return i18next.t('error.accountApi.common.lockedOut', '\"This account has been locked out, please try again later.');\r\n case 'This email is already registered.':\r\n return i18next.t('error.accountApi.common.alreadyRegistered', 'This email is already registered.');\r\n case 'Unknown user':\r\n return i18next.t('error.accountApi.common.unknownUser', 'Unknown user');\r\n\r\n // Specific messages that are only used by individual actions.\r\n // Login\r\n case 'Invalid password':\r\n return i18next.t('error.accountApi.login.invalidPassword', 'Invalid password');\r\n // CreateAccountForExternalLogin\r\n case 'Error loading external login information during confirmation.':\r\n return i18next.t('error.accountApi.createAccountForExternalLogin', 'Error loading external login information during confirmation.');\r\n // CompleteExternalLogin\r\n case 'Error loading external login information.':\r\n return i18next.t('error.accountApi.completeExternalLogin.errorLoadingExternalLoginInformation', 'Error loading external login information.');\r\n // SendPasswordResetModel\r\n case 'This email has not been confirmed, so we can\\'t send a password reset until it has been confirmed.':\r\n return i18next.t('error.accountApi.', 'This email has not been confirmed, so we can\\'t send a password reset until it has been confirmed.');\r\n // ConfirmEmail\r\n case 'Error confirming your email.':\r\n return i18next.t('error.accountApi.confirmEmail.errorConfirmingEmail', 'Error confirming your email.');\r\n // ConfirmEmailChange\r\n case 'Error changing email.':\r\n return i18next.t('error.accountApi.errorChangingEmail', 'Error changing email.');\r\n // ConfirmInvite\r\n case 'This email has not been invited.':\r\n return i18next.t('error.accountApi.confirmInvite.notInvited', 'This email has not been invited.');\r\n case 'This invite has already been accepted.':\r\n return i18next.t('error.accountApi.confirmInvite.alreadyAccepted', 'This invite has already been accepted.');\r\n // Lockout\r\n case 'Error setting lockout for user':\r\n return i18next.t('error.accountApi.lockout.errorSettingLockout', 'Error setting lockout for user');\r\n default:\r\n break;\r\n }\r\n\r\n // Handle external authentication provider errors (from CompleteExternalLogin) by passing on the error with a chance to translate the prefix.\r\n if (error?.message?.indexOf('Error from external provider: ') === 0) {\r\n const externalProviderError = error.message.subStr(30);\r\n return i18next.t('error.accountApi.completeExternalLogin.externalProviderError', 'Error from external provider: {{error}}', { error: externalProviderError });\r\n }\r\n\r\n return null;\r\n },\r\n\r\n //(error) => {\r\n // // If we are in debug mode, log any error messages we get that were not made friendly.\r\n // console.debug(error);\r\n //}\r\n ]);\r\n}\r\n","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\n//let window: any;\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register() {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl: any) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker: any = registration.installing;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: any) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then((response: any) => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type').indexOf('javascript') === -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import './configure/polyfill';\r\n\r\nimport * as React from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport { App } from './App';\r\nimport registerServiceWorker from './registerServiceWorker';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href') || undefined;\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n rootElement);\r\n\r\nregisterServiceWorker();\r\n\r\n","export * from './ModelArrayChanges';\r\nexport * from './ModelChanges';\r\nexport * from './useChanges';\r\nexport * from './useChangesArray';","\"use strict\";\r\nfunction __export(m) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n__export(require(\"./useCache\"));\r\n//# sourceMappingURL=index.js.map","import { createSlice } from '@reduxjs/toolkit';\r\n\r\nexport interface CacheState {\r\n items: { [key: string]: CacheItem },\r\n}\r\n\r\nexport interface CacheItem {\r\n data: any,\r\n expireAt?: Date,\r\n expireOnEvents: Array\r\n}\r\n\r\nexport interface StoreInCacheAction {\r\n type: string,\r\n payload: {\r\n id: string,\r\n data: any,\r\n expireAt?: Date,\r\n expireOnEvents: Array\r\n }\r\n}\r\n\r\nexport interface RemoveFromCacheAction {\r\n type: string,\r\n payload: {\r\n id: string\r\n }\r\n}\r\n\r\nexport interface RaiseExpireEventsAction {\r\n type: string,\r\n payload: {\r\n events: Array\r\n }\r\n}\r\n\r\n/**\r\n * General cache for storing name value pairs in redux that don't need their own slices or actions. \r\n */\r\nconst cacheSlice = createSlice({\r\n name: 'currentUserRoles',\r\n initialState: { items: {} } as CacheState,\r\n reducers: {\r\n /**\r\n * Store an item in the cache.\r\n * @param state\r\n * @param action\r\n */\r\n storeInCache(state, action: StoreInCacheAction) {\r\n const { id, data, expireAt, expireOnEvents } = action.payload;\r\n state.items = {\r\n ...state.items,\r\n [id]: { data, expireAt, expireOnEvents }\r\n };\r\n },\r\n\r\n /**\r\n * Remove an item from the cache.\r\n * @param state\r\n * @param action\r\n */\r\n removeFromCache(state, action: RemoveFromCacheAction) {\r\n const { id } = action.payload;\r\n delete state.items[id];\r\n },\r\n\r\n /**\r\n * Clear the entire cache.\r\n * @param state\r\n * @param action\r\n */\r\n clearCache(state) {\r\n state.items = {};\r\n },\r\n\r\n /**\r\n * Remove an item from the cache.\r\n * @param state\r\n * @param action\r\n */\r\n raiseExpireEvents(state, action: RaiseExpireEventsAction) {\r\n const { events } = action.payload;\r\n for (const id in state.items) {\r\n const item = state.items[id];\r\n if (!item.expireOnEvents) {\r\n continue;\r\n }\r\n // If any of the events being raised effect this item then exclude it from the results so it gets removed from the cache.\r\n const hasEvent = (item: CacheItem, event: string) => item.expireOnEvents.filter(it => it === event).length ? true : false;\r\n for (let i = 0; i < events.length; ++i) {\r\n var event = events[i];\r\n if (hasEvent(item, event)) {\r\n delete state.items[id];\r\n }\r\n }\r\n }\r\n },\r\n }\r\n});\r\n\r\nexport const { storeInCache, removeFromCache, clearCache, raiseExpireEvents } = cacheSlice.actions;\r\nexport const cacheReducer = cacheSlice.reducer;\r\n","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar React = require(\"react\");\r\nvar useAuthorizeService_1 = require(\"./useAuthorizeService\");\r\n/**\r\n * Hook to return the authenticated state of the user. The hook subscribes to authenticate changes by authService and will update the state in components whenever that changes.\r\n * @param onStateChanged\r\n */\r\nfunction useAuthenticatedState(options) {\r\n var _this = this;\r\n if (options === void 0) { options = {}; }\r\n var authService = useAuthorizeService_1.useAuthorizeService();\r\n var _a = React.useState(null), isAuthenticated = _a[0], setIsAuthenticated = _a[1];\r\n var _b = React.useState(null), user = _b[0], setUser = _b[1];\r\n var stateChanged = React.useCallback(function () { return __awaiter(_this, void 0, void 0, function () {\r\n var authenticated, userResult;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, authService.isAuthenticated()];\r\n case 1:\r\n authenticated = _a.sent();\r\n userResult = null;\r\n if (!options.includeUser) return [3 /*break*/, 3];\r\n return [4 /*yield*/, authService.getUser()];\r\n case 2:\r\n userResult = _a.sent();\r\n setUser(userResult);\r\n _a.label = 3;\r\n case 3:\r\n setIsAuthenticated(authenticated);\r\n return [2 /*return*/];\r\n }\r\n });\r\n }); }, [authService, options.includeUser]);\r\n // Subscribe to changes to the authService state.\r\n React.useEffect(function () {\r\n var subscription = authService.subscribe(function () { stateChanged(); });\r\n stateChanged();\r\n return function () { authService.unsubscribe(subscription); };\r\n }, [authService, stateChanged]);\r\n return { isAuthenticated: isAuthenticated, user: user };\r\n}\r\nexports.useAuthenticatedState = useAuthenticatedState;\r\n//# sourceMappingURL=useAuthenticatedState.js.map","import { ErrorMessageConverter } from \"./ErrorMessageConverter\";\r\n\r\n/**\r\n * Register all converters to use for error messages when calling userFriendlyErrorMessage().\r\n * \r\n * Convters will be run in array order, with the first non-null/undefined result being returned as the error message.\r\n * \r\n * @param converters\r\n */\r\nexport function registerErrorMessageConverters(converters: Array): void {\r\n configuredErrorMessageConverters = converters;\r\n}\r\n\r\n/**\r\n * Currently registered ErrorMessageConvters set by registerErrorMessageConverters().\r\n */\r\nexport let configuredErrorMessageConverters: Array = [];","export * from './ErrorMessageConverter';\r\nexport * from './FriendlyErrorMessage';\r\nexport * from './registerErrorMessageConverters';\r\nexport * from './userFriendlyErrorMessage';\r\n","import { CacheState, storeInCache, removeFromCache, raiseExpireEvents } from '../../reduxStore/cache';\r\nimport { AnyAction, Dispatch } from \"redux\";\r\nimport { CacheOptions } from './CacheOptions';\r\n\r\n/**\r\n * Cache service that uses the actions redux store and actions to store the cache in redux.\r\n */\r\nexport class CacheService {\r\n private getCacheState: () => CacheState;\r\n private dispatch: Dispatch;\r\n\r\n constructor(getCacheState: () => CacheState, dispatch: Dispatch) {\r\n this.getCacheState = getCacheState;\r\n this.dispatch = dispatch;\r\n }\r\n\r\n readFromCache(id: string): T | null {\r\n const cachedItem = this.getCacheState().items[id];\r\n if (!cachedItem) {\r\n return null;\r\n }\r\n\r\n // If this item has expired, remove it and return null.\r\n if (cachedItem.expireAt && cachedItem.expireAt < new Date()) {\r\n this.removeFromCache(id);\r\n }\r\n\r\n return cachedItem.data;\r\n }\r\n\r\n storeInCache(id: string, data: any, options?: CacheOptions): void {\r\n const expireAt = options ? options.expireAt : undefined;\r\n const expireOnEvents = options ? options.expireOnEvents ? options.expireOnEvents : [] : [];\r\n this.dispatch(storeInCache({ id, data, expireAt, expireOnEvents }));\r\n }\r\n\r\n removeFromCache(id: string): void {\r\n this.dispatch(removeFromCache({ id }));\r\n }\r\n\r\n raiseExpireEvents(...events: Array): void {\r\n this.dispatch(raiseExpireEvents({ events }));\r\n }\r\n}\r\n","import { isNullOrUndefined } from \"util\";\r\nimport { configuredErrorMessageConverters } from \"./registerErrorMessageConverters\";\r\nimport { FriendlyErrorMessage } from \"./FriendlyErrorMessage\";\r\n\r\n/**\r\n * Translate an error message into a user friendly message, also giving the option for wrapping the message for translation if required\r\n * and seperating out additional details from the core error message.\r\n *\r\n * @param error the original error.\r\n */\r\nexport function userFriendlyErrorMessage(error: any): FriendlyErrorMessage | Array {\r\n // Give each converter in order a chance to handle the error until one does.\r\n for (const converter of configuredErrorMessageConverters) {\r\n const friendly = converter(error);\r\n if (!isNullOrUndefined(friendly)) {\r\n if (Array.isArray(friendly)) {\r\n return friendly as Array;\r\n } else if ((friendly as FriendlyErrorMessage)?.error) {\r\n return friendly as FriendlyErrorMessage;\r\n } else {\r\n return { message: friendly as string, error: error };\r\n }\r\n }\r\n }\r\n\r\n // Give up and return the error with a basic wrapper.\r\n return {\r\n message: error?.message ?? error?.toString(),\r\n error: error\r\n };\r\n}\r\n","import * as React from 'react';\r\nimport { ModelChanges } from './ModelChanges';\r\n\r\n/**\r\n * Hook that makes it easy to apply changes ontop of original data.\r\n */\r\nexport function useChanges(unchanged: T | undefined | null, initialChanges: Partial = {}): ModelChanges {\r\n // Store changes in the state.\r\n const [changes, setChanges] = React.useState>(initialChanges);\r\n\r\n // Provide a method to apply a change or set of changes.\r\n const change = React.useCallback((changes: Partial) => {\r\n setChanges(prevState =>({\r\n ...prevState,\r\n ...changes\r\n }));\r\n }, [setChanges]);\r\n\r\n // Provide a method to reset all changes.\r\n const reset = React.useCallback(() => {\r\n setChanges({});\r\n }, [setChanges]);\r\n\r\n // Combine the initial model with the changes to produce model with its current state.\r\n const model = React.useMemo((): T => {\r\n return {\r\n ...(unchanged ?? {} as T), ...changes\r\n };\r\n }, [unchanged, changes]);\r\n\r\n // Combine everything into a return value and return it (caching it with useMemo()).\r\n const ret = React.useMemo(() => ({\r\n change: change,\r\n changes: changes,\r\n reset: reset,\r\n model: model\r\n }), [changes, change, reset, model]);\r\n\r\n return ret;\r\n}","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar inject_typesafe_1 = require(\"inject-typesafe\");\r\nvar account_1 = require(\"../api/account\");\r\nvar apifetch_json_1 = require(\"apifetch-json\");\r\nvar cacheInRedux_1 = require(\"../shared/cacheInRedux\");\r\n/**\r\n * Returns a configured service provider.\r\n */\r\nfunction createServiceProvider(reduxStore) {\r\n return new inject_typesafe_1.ServiceProvider(function (builder) { return ({\r\n accountService: builder.singleton(function (services) { return new account_1.AccountService(); }),\r\n apiFetch: builder.singleton(function (services) { return new apifetch_json_1.ApiFetch(); }),\r\n cacheService: builder.singleton(function (services) { return new cacheInRedux_1.CacheService(function () { return services.reduxStore().getState().cache; }, services.reduxStore().dispatch); }),\r\n reduxStore: builder.singleton(function () { return reduxStore; }),\r\n }); });\r\n}\r\nexports.createServiceProvider = createServiceProvider;\r\n//# sourceMappingURL=configureServices.js.map","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar oidc_client_1 = require(\"oidc-client\");\r\nvar apiAuthorizationConfig_1 = require(\"../../configure/apiAuthorizationConfig\");\r\nvar AuthorizeService = /** @class */ (function () {\r\n function AuthorizeService() {\r\n // By default pop ups are disabled because they don't work properly on Edge.\r\n // If you want to enable pop up authentication simply set this flag to false.\r\n this._popUpDisabled = true;\r\n this._isAuthenticated = false;\r\n this._callbacks = [];\r\n this._nextSubscriptionId = 0;\r\n this._user = null;\r\n this._isAuthenticated = false;\r\n this._userManager = undefined;\r\n }\r\n AuthorizeService.prototype.isAuthenticated = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var user;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.getUser()];\r\n case 1:\r\n user = _a.sent();\r\n return [2 /*return*/, !!user];\r\n }\r\n });\r\n });\r\n };\r\n AuthorizeService.prototype.getUser = function () {\r\n var _a;\r\n return __awaiter(this, void 0, void 0, function () {\r\n var user, userManager;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n user = this._user;\r\n if (user && user.profile) {\r\n return [2 /*return*/, user.profile];\r\n }\r\n return [4 /*yield*/, this.ensureUserManagerInitialized()];\r\n case 1:\r\n userManager = _b.sent();\r\n return [4 /*yield*/, userManager.getUser()];\r\n case 2:\r\n user = _b.sent();\r\n return [2 /*return*/, (_a = user === null || user === void 0 ? void 0 : user.profile) !== null && _a !== void 0 ? _a : null];\r\n }\r\n });\r\n });\r\n };\r\n AuthorizeService.prototype.getAccessToken = function () {\r\n var _a;\r\n return __awaiter(this, void 0, void 0, function () {\r\n var userManager, user;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0: return [4 /*yield*/, this.ensureUserManagerInitialized()];\r\n case 1:\r\n userManager = _b.sent();\r\n return [4 /*yield*/, userManager.getUser()];\r\n case 2:\r\n user = _b.sent();\r\n return [2 /*return*/, (_a = user === null || user === void 0 ? void 0 : user.access_token) !== null && _a !== void 0 ? _a : null];\r\n }\r\n });\r\n });\r\n };\r\n // We try to authenticate the user in three different ways:\r\n // 1) We try to see if we can authenticate the user silently. This happens\r\n // when the user is already logged in on the IdP and is done using a hidden iframe\r\n // on the client.\r\n // 2) We try to authenticate the user using a PopUp Window. This might fail if there is a\r\n // Pop-Up blocker or the user has disabled PopUps.\r\n // 3) If the two methods above fail, we redirect the browser to the IdP to perform a traditional\r\n // redirect flow.\r\n AuthorizeService.prototype.signIn = function (state) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var userManager, silentUser, silentError_1, popUpUser, popUpError_1, redirectError_1;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.ensureUserManagerInitialized()];\r\n case 1:\r\n userManager = _a.sent();\r\n _a.label = 2;\r\n case 2:\r\n _a.trys.push([2, 4, , 13]);\r\n return [4 /*yield*/, userManager.signinSilent(this.createArguments())];\r\n case 3:\r\n silentUser = _a.sent();\r\n this.updateState(silentUser);\r\n return [2 /*return*/, this.success(state)];\r\n case 4:\r\n silentError_1 = _a.sent();\r\n // User might not be authenticated, fallback to popup authentication\r\n console.log(\"Silent authentication error: \", silentError_1);\r\n _a.label = 5;\r\n case 5:\r\n _a.trys.push([5, 7, , 12]);\r\n if (this._popUpDisabled) {\r\n throw new Error('Popup disabled. Change \\'AuthorizeService.js:AuthorizeService._popupDisabled\\' to false to enable it.');\r\n }\r\n return [4 /*yield*/, userManager.signinPopup(this.createArguments())];\r\n case 6:\r\n popUpUser = _a.sent();\r\n this.updateState(popUpUser);\r\n return [2 /*return*/, this.success(state)];\r\n case 7:\r\n popUpError_1 = _a.sent();\r\n if (popUpError_1.message === \"Popup window closed\") {\r\n // The user explicitly cancelled the login action by closing an opened popup.\r\n return [2 /*return*/, this.error(\"The user closed the window.\")];\r\n }\r\n else if (!this._popUpDisabled) {\r\n console.log(\"Popup authentication error: \", popUpError_1);\r\n }\r\n _a.label = 8;\r\n case 8:\r\n _a.trys.push([8, 10, , 11]);\r\n return [4 /*yield*/, userManager.signinRedirect(this.createArguments(state))];\r\n case 9:\r\n _a.sent();\r\n return [2 /*return*/, this.redirect()];\r\n case 10:\r\n redirectError_1 = _a.sent();\r\n console.log(\"Redirect authentication error: \", redirectError_1);\r\n return [2 /*return*/, this.error(redirectError_1)];\r\n case 11: return [3 /*break*/, 12];\r\n case 12: return [3 /*break*/, 13];\r\n case 13: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n AuthorizeService.prototype.completeSignIn = function (url) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var userManager, user, error_1;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n _a.trys.push([0, 3, , 4]);\r\n return [4 /*yield*/, this.ensureUserManagerInitialized()];\r\n case 1:\r\n userManager = _a.sent();\r\n return [4 /*yield*/, userManager.signinCallback(url)];\r\n case 2:\r\n user = _a.sent();\r\n this.updateState(user);\r\n return [2 /*return*/, this.success(user && user.state)];\r\n case 3:\r\n error_1 = _a.sent();\r\n console.log('There was an error signing in: ', error_1);\r\n return [2 /*return*/, this.error('There was an error signing in.')];\r\n case 4: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n // We try to sign out the user in two different ways:\r\n // 1) We try to do a sign-out using a PopUp Window. This might fail if there is a\r\n // Pop-Up blocker or the user has disabled PopUps.\r\n // 2) If the method above fails, we redirect the browser to the IdP to perform a traditional\r\n // post logout redirect flow.\r\n AuthorizeService.prototype.signOut = function (state) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var userManager, popupSignOutError_1, redirectSignOutError_1;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.ensureUserManagerInitialized()];\r\n case 1:\r\n userManager = _a.sent();\r\n _a.label = 2;\r\n case 2:\r\n _a.trys.push([2, 4, , 9]);\r\n if (this._popUpDisabled) {\r\n throw new Error('Popup disabled. Change \\'AuthorizeService.ts:AuthorizeService._popupDisabled\\' to false to enable it.');\r\n }\r\n return [4 /*yield*/, userManager.signoutPopup(this.createArguments())];\r\n case 3:\r\n _a.sent();\r\n this.updateState(null);\r\n return [2 /*return*/, this.success(state)];\r\n case 4:\r\n popupSignOutError_1 = _a.sent();\r\n console.log(\"Popup signout error: \", popupSignOutError_1);\r\n _a.label = 5;\r\n case 5:\r\n _a.trys.push([5, 7, , 8]);\r\n return [4 /*yield*/, userManager.signoutRedirect(this.createArguments(state))];\r\n case 6:\r\n _a.sent();\r\n return [2 /*return*/, this.redirect()];\r\n case 7:\r\n redirectSignOutError_1 = _a.sent();\r\n console.log(\"Redirect signout error: \", redirectSignOutError_1);\r\n return [2 /*return*/, this.error(redirectSignOutError_1)];\r\n case 8: return [3 /*break*/, 9];\r\n case 9: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n AuthorizeService.prototype.completeSignOut = function (url) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var userManager, response, error_2;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.ensureUserManagerInitialized()];\r\n case 1:\r\n userManager = _a.sent();\r\n _a.label = 2;\r\n case 2:\r\n _a.trys.push([2, 4, , 5]);\r\n return [4 /*yield*/, userManager.signoutCallback(url)];\r\n case 3:\r\n response = _a.sent();\r\n this.updateState(null);\r\n return [2 /*return*/, this.success(response && response.state)];\r\n case 4:\r\n error_2 = _a.sent();\r\n console.log(\"There was an error trying to log out '\" + error_2 + \"'.\");\r\n return [2 /*return*/, this.error(error_2)];\r\n case 5: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n AuthorizeService.prototype.updateState = function (user) {\r\n this._user = user;\r\n this._isAuthenticated = !!this._user;\r\n this.notifySubscribers();\r\n };\r\n AuthorizeService.prototype.subscribe = function (callback) {\r\n this._callbacks.push({ callback: callback, subscription: this._nextSubscriptionId++ });\r\n return this._nextSubscriptionId - 1;\r\n };\r\n AuthorizeService.prototype.unsubscribe = function (subscriptionId) {\r\n var subscriptionIndex = this._callbacks\r\n .map(function (element, index) { return element.subscription === subscriptionId ? { found: true, index: index } : { found: false }; })\r\n .filter(function (element) { return element.found === true; });\r\n if (subscriptionIndex.length === 1) {\r\n this._callbacks = this._callbacks.splice(subscriptionIndex[0].index, 1);\r\n }\r\n else {\r\n //throw new Error(`Found an invalid number of subscriptions ${subscriptionIndex.length}`);\r\n }\r\n };\r\n AuthorizeService.prototype.notifySubscribers = function () {\r\n for (var i = 0; i < this._callbacks.length; i++) {\r\n var callback = this._callbacks[i].callback;\r\n callback();\r\n }\r\n };\r\n AuthorizeService.prototype.createArguments = function (state) {\r\n return { useReplaceToNavigate: true, data: state };\r\n };\r\n AuthorizeService.prototype.error = function (message) {\r\n return { status: exports.AuthenticationResultStatus.Fail, message: message };\r\n };\r\n AuthorizeService.prototype.success = function (state) {\r\n return { status: exports.AuthenticationResultStatus.Success, state: state };\r\n };\r\n AuthorizeService.prototype.redirect = function () {\r\n return { status: exports.AuthenticationResultStatus.Redirect };\r\n };\r\n AuthorizeService.prototype.ensureUserManagerInitialized = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var response, settings;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (this._userManager !== undefined) {\r\n return [2 /*return*/, this._userManager];\r\n }\r\n return [4 /*yield*/, fetch(apiAuthorizationConfig_1.apiAuthorizationConfig.endpoint + \"_configuration/\" + apiAuthorizationConfig_1.apiAuthorizationConfig.applicationName)];\r\n case 1:\r\n response = _a.sent();\r\n if (!response.ok) {\r\n throw new Error(\"Could not load settings for '\" + apiAuthorizationConfig_1.apiAuthorizationConfig.applicationName + \"'\");\r\n }\r\n return [4 /*yield*/, response.json()];\r\n case 2:\r\n settings = _a.sent();\r\n settings.automaticSilentRenew = true;\r\n settings.includeIdTokenInSilentRenew = true;\r\n settings.userStore = new oidc_client_1.WebStorageStateStore({\r\n prefix: apiAuthorizationConfig_1.apiAuthorizationConfig.applicationName\r\n });\r\n this._userManager = new oidc_client_1.UserManager(settings);\r\n this._userManager.events.addUserSignedOut(function () { return __awaiter(_this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this._userManager.removeUser()];\r\n case 1:\r\n _a.sent();\r\n this.updateState(null);\r\n return [2 /*return*/];\r\n }\r\n });\r\n }); });\r\n return [2 /*return*/, this._userManager];\r\n }\r\n });\r\n });\r\n };\r\n Object.defineProperty(AuthorizeService, \"instance\", {\r\n get: function () { return authService; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return AuthorizeService;\r\n}());\r\nexports.AuthorizeService = AuthorizeService;\r\nvar authService = new AuthorizeService();\r\nexports.default = authService;\r\nexports.AuthenticationResultStatus = {\r\n Redirect: 'redirect',\r\n Success: 'success',\r\n Fail: 'fail'\r\n};\r\n//# sourceMappingURL=AuthorizeService.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar inject_typesafe_react_1 = require(\"inject-typesafe-react\");\r\n/**\r\n * Hook to return the AccountService from the context (via useService).\r\n */\r\nfunction useAccountService() {\r\n return inject_typesafe_react_1.useServices(function (services) { return services.accountService(); });\r\n}\r\nexports.useAccountService = useAccountService;\r\n//# sourceMappingURL=useAccountService.js.map","import { ApiFetch } from \"apifetch-json\";\r\n\r\n/**\r\n * Class that provides a service for managing an account on the server.\r\n * \r\n * NOTE: not to be confused with AuthoriazationService which manages the authorised state of the current user.\r\n * \r\n * The login() and logout() method here are usually invoked through components used by AuthorizationService's routing to share the authorisation state with the server.\r\n */\r\nexport class AccountService {\r\n api: ApiFetch;\r\n\r\n constructor(api?: ApiFetch) {\r\n this.api = api ?? new ApiFetch();\r\n }\r\n\r\n /**\r\n * Attempt to login to the account with an email and password.\r\n */\r\n loginWithPassword = async (request: LoginWithPasswordRequest, returnUrl: string = ''): Promise => {\r\n const result = await this.api.post(\r\n `/api/account/login?returnUrl=${encodeURIComponent(returnUrl ?? '')}`,\r\n request,\r\n {\r\n credentials: 'include',\r\n });\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Register the user with a new password based account.\r\n */\r\n register = async (request: RegisterRequest, returnUrl: string = ''): Promise => {\r\n const result = await this.api.post(\r\n `/api/account/register?returnUrl=${encodeURIComponent(returnUrl || defaultRegisterReturnUrl)}`,\r\n request,\r\n {\r\n credentials: 'include'\r\n });\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Get a list of all external authentication schemes registered for use with accounts on this server.\r\n */\r\n getExternalAuthenticationSchemes = async (): Promise> => {\r\n const result = await this.api.get>('/api/account/getExternalAuthenticationSchemes');\r\n return result;\r\n }\r\n\r\n /**\r\n * Start the process of logging in with an external provider.\r\n */\r\n startExternalLogin = (provider: string, returnUrl: string = '') => {\r\n // We want to post the whole page to the action as it needs to return a redirect. To acheive this we create and post a form.\r\n let form = document.createElement('form');\r\n form.action = `/api/account/startExternalLogin?provider=${encodeURIComponent(provider)}&returnUrl=${encodeURIComponent(returnUrl ?? '')}`;\r\n form.method = 'post';\r\n document.body.append(form);\r\n form.submit();\r\n }\r\n\r\n /**\r\n * Complete the external login process.\r\n */\r\n completeExternalLogin = async (returnUrl: string = '', remoteError: string = '') => {\r\n const result = await this.api.get(`/api/account/completeExternalLogin?returnUrl=${encodeURIComponent(returnUrl ?? '')}&remoteError=${encodeURIComponent(remoteError ?? '')}`);\r\n return result;\r\n }\r\n\r\n /**\r\n * Creates an account linked to the current external login with the additional details passed in.\r\n */\r\n createAccountForExternalLogin = async (model: CreateExternalLoginAccountDetails, returnUrl: string = ''): Promise => {\r\n const result = await this.api.post(\r\n `/api/account/createAccountForExternalLogin?returnUrl=${encodeURIComponent(returnUrl ?? '')}`,\r\n model,\r\n {\r\n credentials: 'include'\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * Send a password reset email.\r\n */\r\n sendPasswordResetEmail = async (email: string) => {\r\n const result = await this.api.post(`/api/account/sendPasswordResetEmail`, { email: email });\r\n return result;\r\n }\r\n\r\n /**\r\n * Reset password (using an emailed code as varification).\r\n */\r\n resetPassword = async (model: ResetPasswordRequest) => {\r\n const result = await this.api.post(`/api/account/resetPassword`, model);\r\n return result;\r\n }\r\n\r\n /**\r\n * Confirm email (using an emailed code as varification).\r\n */\r\n confirmEmail = async (model: ConfirmEmailRequest) => {\r\n const result = await this.api.post(`/api/account/confirmEmail`, model);\r\n return result;\r\n }\r\n\r\n /**\r\n * Confirm email change (using an emailed code as varification).\r\n */\r\n confirmEmailChange = async (model: ConfirmEmailChangeRequest) => {\r\n const result = await this.api.post(\r\n `/api/account/confirmEmailChange`,\r\n model,\r\n {\r\n credentials: 'include'\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * Returns the IdentityRoles names of the current user.\r\n */\r\n currentUserRoles = async (): Promise => {\r\n const result = await this.api.get(\r\n '/api/account/currentUserRoles',\r\n {\r\n credentials: 'include'\r\n });\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Change password of the logged in user.\r\n */\r\n changePassword = async (model: ChangePasswordRequest) => {\r\n const result = await this.api.post(\r\n `/api/account/changePassword`,\r\n model,\r\n {\r\n credentials: 'include'\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * Change email of the logged in user.\r\n */\r\n changeEmail = async (model: ChangeEmailRequest) => {\r\n const result = await this.api.post(\r\n `/api/account/changeEmail`,\r\n model,\r\n {\r\n credentials: 'include'\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * Resent the email verification email.\r\n */\r\n resendConfirmEmail = async (email: string) => {\r\n const result = await this.api.post(\r\n `/api/account/resendConfirmEmail`,\r\n { email: email }\r\n );\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * Change email of the logged in user.\r\n */\r\n invite = async (model: InviteRequest) => {\r\n const result = await this.api.post(\r\n `/api/account/invite`,\r\n model,\r\n {\r\n credentials: 'include'\r\n }\r\n );\r\n return result;\r\n }\r\n\r\n /**\r\n * Resent the invite email.\r\n */\r\n resendInviteEmail = async (email: string) => {\r\n const result = await this.api.post(\r\n `/api/account/resendInviteEmail`,\r\n { email: email }\r\n );\r\n return result;\r\n }\r\n\r\n /**\r\n * Confirm an invite and set a password (will also perform a login).\r\n */\r\n confirmInvite = async (model: ConfirmInviteRequest, returnUrl: string = '') => {\r\n const result = await this.api.post(\r\n `/api/account/confirmInvite?returnUrl=${encodeURIComponent(returnUrl || defaultRegisterReturnUrl)}`,\r\n model\r\n );\r\n return result;\r\n }\r\n\r\n /**\r\n * Change email of another user (as an administrator)\r\n */\r\n changeAccountEmail = async (model: ChangeAccountEmailRequest) => {\r\n const result = await this.api.post(\r\n `/api/account/changeAccountEmail`,\r\n model,\r\n {\r\n credentials: 'include'\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * Lockout a user.\r\n */\r\n lockout = async (model: LockoutRequest) => {\r\n const result = await this.api.post(\r\n `/api/account/lockout`,\r\n model,\r\n {\r\n credentials: 'include'\r\n }\r\n );\r\n return result;\r\n }\r\n}\r\n\r\nconst defaultRegisterReturnUrl = `/authentication/login?returnUrl=${encodeURIComponent(window.origin + '/')}`;\r\n\r\nexport interface LoginWithPasswordRequest\r\n{\r\n email: string,\r\n password: string,\r\n rememberMe: boolean,\r\n}\r\n\r\nexport interface LoginResult {\r\n succeeded: boolean,\r\n requiresTwoFactor: boolean,\r\n requiresEmailConfirmation: boolean,\r\n returnUrl: string\r\n}\r\n\r\nexport interface RegisterResult extends LoginResult {\r\n userId: string,\r\n}\r\n\r\nexport interface ExternalAuthenticationScheme {\r\n name: string,\r\n displayName: string\r\n}\r\n\r\nexport interface Claim {\r\n type: string,\r\n properties: { [id: string]: string },\r\n originalIssuer: string,\r\n issuer: string,\r\n valueType: string,\r\n value: string,\r\n}\r\n\r\nexport interface CompleteExternalLoginResult {\r\n isNewUser: boolean,\r\n returnUrl: string,\r\n loginProvider: string,\r\n claims: Array,\r\n}\r\n\r\nexport interface CreateExternalLoginAccountDetails {\r\n email: string\r\n}\r\n\r\nexport interface RegisterRequest {\r\n email: string,\r\n password: string,\r\n}\r\n\r\nexport interface ResetPasswordRequest {\r\n userId: string,\r\n code: string,\r\n password: string,\r\n}\r\n\r\nexport interface ConfirmEmailRequest {\r\n userId: string,\r\n code: string,\r\n}\r\n\r\nexport interface CurrentUserRolesResult {\r\n userId: string,\r\n roles: Array,\r\n}\r\n\r\nexport interface ChangePasswordRequest {\r\n currentPassword: string,\r\n newPassword: string,\r\n}\r\n\r\nexport interface ChangeEmailRequest {\r\n newEmail: string,\r\n}\r\n\r\nexport interface ConfirmEmailChangeRequest {\r\n userId: string,\r\n code: string,\r\n email: string,\r\n}\r\n\r\nexport interface InviteRequest {\r\n email: string,\r\n sendEmail: boolean,\r\n}\r\n\r\nexport interface InviteResult {\r\n userId: string,\r\n}\r\n\r\n\r\nexport interface ChangeAccountEmailRequest {\r\n currentEmail: string,\r\n newEmail: string,\r\n}\r\n\r\nexport interface ConfirmInviteRequest {\r\n userId: string,\r\n code: string,\r\n password: string,\r\n}\r\n\r\nexport interface LockoutRequest {\r\n email: string,\r\n endDate?: string,\r\n}\r\n","/**\r\n * URIs of common claim types.\r\n */\r\nexport const ClaimTypes = {\r\n /**\r\n * The URI for a claim that specifies the actor.\r\n */\r\n actor: 'http://schemas.xmlsoap.org/ws/2009/09/identity/claims/actor',\r\n /**\r\n * The URI for a claim that specifies the postal code of an entity.\r\n */\r\n postalCode: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/postalcode',\r\n /**\r\n * The URI for a claim that specifies an RSA key.\r\n */\r\n rsa: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/rsa',\r\n /**\r\n * The URI for a claim that specifies a security identifier (SID).\r\n */\r\n sid: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/sid',\r\n /**\r\n * The URI for a claim that specifies a service principal name (SPN) track.\r\n */\r\n spn: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/spn',\r\n /**\r\n * The URI for a claim that specifies the state or province in which an entity resides.\r\n */\r\n stateOrProvince: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/stateorprovince',\r\n /**\r\n * The URI for a claim that specifies the street address of an entity.\r\n */\r\n streetAddress: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/streetaddress',\r\n /**\r\n * The URI for a claim that specifies the surname of an entity.\r\n */\r\n surname: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname',\r\n /**\r\n * The URI for a claim that identifies the system entity.\r\n */\r\n system: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/system',\r\n /**\r\n * The URI for a claim that specifies a thumbprint. A thumbprint is a globally unique SHA-1 hash of an X.509 certificate.\r\n */\r\n thumbprint: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/thumbprint',\r\n /**\r\n * The URI for a claim that specifies a user principal name (UPN).\r\n */\r\n upn: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn',\r\n /**\r\n * The URI for a claim that specifies a URI.\r\n */\r\n uri: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/uri',\r\n /**\r\n * The URI for a claim that specifies the webpage of an entity.\r\n */\r\n webpage: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/webpage',\r\n /**\r\n * The URI for a claim that specifies the alternative phone number of an entity.\r\n */\r\n otherPhone: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/otherphone',\r\n /**\r\n * The URI for a claim that specifies the name of an entity.\r\n */\r\n nameIdentifier: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier',\r\n /**\r\n * The URI for a claim that specifies the name of an entity.\r\n */\r\n name: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name',\r\n /**\r\n * The URI for a claim that specifies the mobile phone number of an entity.\r\n */\r\n mobilePhone: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/mobilephone',\r\n /**\r\n * The URI for a claim that specifies the anonymous user.\r\n */\r\n anonymous: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/anonymous',\r\n /**\r\n * The URI for a claim that specifies details about whether an identity is authenticated.\r\n */\r\n authentication: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/authentication',\r\n /**\r\n * The URI for a claim that specifies an authorization decision on an entity.\r\n */\r\n authorizationDecision: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/authorizationdecision',\r\n /**\r\n * The URI for a claim that specifies the country/region in which an entity resides,\r\n */\r\n country: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/country',\r\n /**\r\n * The URI for a claim that specifies the date of birth of an entity.\r\n */\r\n dateOfBirth: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/dateofbirth',\r\n /**\r\n * The URI for a claim that specifies a deny-only security identifier (SID) for\r\n * an entity. A deny-only SID denies the specified entity to a securable object.\r\n */\r\n denyOnlySid: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/denyonlysid',\r\n /**\r\n * The URI for a claim that specifies the email address of an entity.\r\n */\r\n email: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress',\r\n /**\r\n * The URI for a claim that specifies the gender of an entity.\r\n */\r\n gender: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/gender', \r\n /**\r\n * The URI for a claim that specifies the given name of an entity.\r\n */\r\n givenName: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname',\r\n /**\r\n * The URI for a claim that specifies a hash value.\r\n */\r\n hash: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/hash',\r\n /**\r\n * The URI for a claim that specifies the home phone number of an entity.\r\n */\r\n homePhone: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/homephone',\r\n /**\r\n * The URI for a claim that specifies the locale in which an entity resides.\r\n */\r\n locality: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/locality',\r\n /**\r\n * The URI for a claim that specifies the DNS name associated with the computer\r\n * name or with the alternative name of either the subject or issuer of an X.509\r\n * certificate.\r\n */\r\n dns: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/dns',\r\n /**\r\n * The URI for an X.500 distinguished name track, such as the subject of an X.509\r\n * Public Key Certificate or an entry identifier in a directory services Directory\r\n * Information Tree.\r\n */\r\n x500DistinguishedName: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/x500distinguishedname',\r\n}\r\n\r\n/**\r\n * URIs of common Microsoft specific track types.\r\n */\r\nexport const MicrosoftClaimTypes = {\r\n /**\r\n * The URI for a claim that specifies the primary group SID of an entity.\r\n */\r\n primaryGroupSid: 'http://schemas.microsoft.com/ws/2008/06/identity/claims/primarygroupsid',\r\n /**\r\n * The URI for a claim that specifies the primary SID of an entity.\r\n */\r\n primarySid: 'http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid',\r\n /**\r\n * The URI for a claim that specifies the role of an entity.\r\n */\r\n role: 'http://schemas.microsoft.com/ws/2008/06/identity/claims/role',\r\n /**\r\n * The URI for a claim that specifies a serial number.\r\n */\r\n serialNumber: 'http://schemas.microsoft.com/ws/2008/06/identity/claims/serialnumber',\r\n /**\r\n * The URI for a claim that specifies the user data.\r\n */\r\n userData: 'http://schemas.microsoft.com/ws/2008/06/identity/claims/userdata',\r\n /**\r\n * The URI for a claim that specifies the version.\r\n */\r\n version: 'http://schemas.microsoft.com/ws/2008/06/identity/claims/version',\r\n /**\r\n * The URI for a claim that specifies the Windows domain account name of an entity.\r\n */\r\n windowsAccountName: 'http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname',\r\n /**\r\n * The URI for a claim that specifies the Windows device.\r\n */\r\n windowsDeviceClaim: 'http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsdeviceclaim',\r\n /**\r\n * The URI for a claim that specifies the Windows group SID of the device.\r\n */\r\n windowsDeviceGroup: 'http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsdevicegroup',\r\n /**\r\n * \r\n */\r\n windowsFqbnVersion: 'http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsfqbnversion',\r\n /**\r\n * \r\n */\r\n windowsSubAuthority: 'http://schemas.microsoft.com/ws/2008/06/identity/claims/windowssubauthority',\r\n /**\r\n * The URI for a claim that specifies the instant at which an entity was authenticated,\r\n */\r\n authenticationInstant: 'http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationinstant',\r\n /**\r\n * The URI for a claim that specifies the method with which an entity was authenticated,\r\n */\r\n authenticationMethod: 'http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod',\r\n /**\r\n * The URI for a claim that specifies the cookie path.\r\n */\r\n cookiePath: 'http://schemas.microsoft.com/ws/2008/06/identity/claims/cookiepath',\r\n /**\r\n * The URI for a claim that specifies the deny-only primary group SID on an entity,\r\n * A deny-only SID denies the specified entity to a securable object.\r\n */\r\n denyOnlyPrimaryGroupSid: 'http://schemas.microsoft.com/ws/2008/06/identity/claims/denyonlyprimarygroupsid',\r\n /**\r\n * The URI for a claim that specifies the deny-only primary SID on an entity.\r\n * A deny-only SID denies the specified entity to a securable object.\r\n */\r\n denyOnlyPrimarySid: 'http://schemas.microsoft.com/ws/2008/06/identity/claims/denyonlyprimarysid',\r\n /**\r\n * \r\n */\r\n windowsUserClaim: 'http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsuserclaim',\r\n /**\r\n * The URI for a claim that specifies the Windows deny-only group SID of the device,\r\n */\r\n denyOnlyWindowsDeviceGroup: 'http://schemas.microsoft.com/ws/2008/06/identity/claims/denyonlywindowsdevicegroup',\r\n /**\r\n */\r\n dsa: 'http://schemas.microsoft.com/ws/2008/06/identity/claims/dsa',\r\n /**\r\n * \r\n */\r\n expiration: 'http://schemas.microsoft.com/ws/2008/06/identity/claims/expiration',\r\n /**\r\n * \r\n */\r\n expired: 'http://schemas.microsoft.com/ws/2008/06/identity/claims/expired',\r\n /**\r\n * The URI for a claim that specifies the SID for the group of an entity.\r\n */\r\n groupSid: 'http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid',\r\n /**\r\n * \r\n */\r\n isPersistent: 'http://schemas.microsoft.com/ws/2008/06/identity/claims/ispersistent',\r\n}\r\n","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar react_use_async_callback_1 = require(\"react-use-async-callback\");\r\nvar useAccountService_1 = require(\"./useAccountService\");\r\n/**\r\n * Callback to change the email of another user as an administrator.\r\n */\r\nfunction useChangeAccountEmailCallback() {\r\n var _this = this;\r\n var accountService = useAccountService_1.useAccountService();\r\n var _a = react_use_async_callback_1.useAsyncCallback(function (currentEmail, newEmail) { return __awaiter(_this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, accountService.changeAccountEmail({ currentEmail: currentEmail, newEmail: newEmail })];\r\n case 1: return [2 /*return*/, _a.sent()];\r\n }\r\n });\r\n }); }, [accountService]), action = _a[0], _b = _a[1], isExecuting = _b.isExecuting, errors = _b.errors;\r\n return [action, { isExecuting: isExecuting, errors: errors }];\r\n}\r\nexports.useChangeAccountEmailCallback = useChangeAccountEmailCallback;\r\n//# sourceMappingURL=useChangeAccountEmailCallback.js.map","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar react_use_async_callback_1 = require(\"react-use-async-callback\");\r\nvar useAccountService_1 = require(\"./useAccountService\");\r\n/**\r\n * Callback to change the email of the current user..\r\n */\r\nfunction useChangeEmailCallback() {\r\n var _this = this;\r\n var accountService = useAccountService_1.useAccountService();\r\n var _a = react_use_async_callback_1.useAsyncCallback(function (newEmail) { return __awaiter(_this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, accountService.changeEmail({ newEmail: newEmail })];\r\n case 1: return [2 /*return*/, _a.sent()];\r\n }\r\n });\r\n }); }, [accountService]), action = _a[0], _b = _a[1], isExecuting = _b.isExecuting, errors = _b.errors;\r\n return [action, { isExecuting: isExecuting, errors: errors }];\r\n}\r\nexports.useChangeEmailCallback = useChangeEmailCallback;\r\n//# sourceMappingURL=useChangeEmailCallback.js.map","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar react_use_async_callback_1 = require(\"react-use-async-callback\");\r\nvar useAccountService_1 = require(\"./useAccountService\");\r\n/**\r\n * Callback to change the password of the current user..\r\n */\r\nfunction useChangePasswordCallback() {\r\n var _this = this;\r\n var accountService = useAccountService_1.useAccountService();\r\n var _a = react_use_async_callback_1.useAsyncCallback(function (currentPassword, newPassword) { return __awaiter(_this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, accountService.changePassword({ currentPassword: currentPassword, newPassword: newPassword })];\r\n case 1: return [2 /*return*/, _a.sent()];\r\n }\r\n });\r\n }); }, [accountService]), action = _a[0], _b = _a[1], isExecuting = _b.isExecuting, errors = _b.errors;\r\n return [action, { isExecuting: isExecuting, errors: errors }];\r\n}\r\nexports.useChangePasswordCallback = useChangePasswordCallback;\r\n//# sourceMappingURL=useChangePasswordCallback.js.map","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar React = require(\"react\");\r\nvar react_use_async_callback_1 = require(\"react-use-async-callback\");\r\nvar useAccountService_1 = require(\"./useAccountService\");\r\n/**\r\n * Details of the external login that has just completed and invoked our callback.\r\n */\r\nfunction useCompletedExternalLoginDetails(options) {\r\n var _this = this;\r\n if (options === void 0) { options = {}; }\r\n var _a = React.useState({ claims: [], isNewUser: false, loginProvider: '', returnUrl: '' }), data = _a[0], setData = _a[1];\r\n var accountService = useAccountService_1.useAccountService();\r\n // Get the details from the external login off the query string.\r\n var _b = React.useMemo(function () {\r\n var _a, _b, _c, _d;\r\n var params = new URLSearchParams(window.location.search);\r\n var returnUrl = (_b = (_a = params.get('returnUrl')) !== null && _a !== void 0 ? _a : params.get('ReturnUrl')) !== null && _b !== void 0 ? _b : '';\r\n var remoteError = (_d = (_c = params.get('remoteError')) !== null && _c !== void 0 ? _c : params.get('RemoteError')) !== null && _d !== void 0 ? _d : '';\r\n return { returnUrl: returnUrl, remoteError: remoteError };\r\n }, []), returnUrl = _b.returnUrl, remoteError = _b.remoteError;\r\n var _c = react_use_async_callback_1.useAsyncCallback(function () { return __awaiter(_this, void 0, void 0, function () {\r\n var result;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, accountService.completeExternalLogin(returnUrl, remoteError)];\r\n case 1:\r\n result = _a.sent();\r\n setData(result);\r\n return [2 /*return*/];\r\n }\r\n });\r\n }); }, [accountService, returnUrl, remoteError, setData]), refresh = _c[0], _d = _c[1], isLoading = _d.isExecuting, errors = _d.errors;\r\n React.useEffect(function () {\r\n if (!options.lazy) {\r\n refresh();\r\n }\r\n }, [refresh, options.lazy]);\r\n // TODO handle options.pollInterval.\r\n return {\r\n data: data,\r\n refresh: refresh,\r\n isLoading: isLoading,\r\n errors: errors\r\n };\r\n}\r\nexports.useCompletedExternalLoginDetails = useCompletedExternalLoginDetails;\r\n//# sourceMappingURL=useCompletedExternalLoginDetails.js.map","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar React = require(\"react\");\r\nvar react_use_async_callback_1 = require(\"react-use-async-callback\");\r\nvar useAccountService_1 = require(\"./useAccountService\");\r\n/**\r\n * Confirm an email address.\r\n */\r\nfunction useConfirmEmailCallback() {\r\n var _this = this;\r\n var accountService = useAccountService_1.useAccountService();\r\n // Get the return url from the query string.\r\n var _a = React.useMemo(function () {\r\n var _a, _b, _c, _d;\r\n var params = new URLSearchParams(window.location.search);\r\n var userId = (_b = (_a = params.get('userId')) !== null && _a !== void 0 ? _a : params.get('UserId')) !== null && _b !== void 0 ? _b : '';\r\n var code = (_d = (_c = params.get('code')) !== null && _c !== void 0 ? _c : params.get('Code')) !== null && _d !== void 0 ? _d : '';\r\n return { userId: userId, code: code };\r\n }, []), userId = _a.userId, code = _a.code;\r\n var _b = react_use_async_callback_1.useAsyncCallback(function () { return __awaiter(_this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, accountService.confirmEmail({ userId: userId, code: code })];\r\n case 1: return [2 /*return*/, _a.sent()];\r\n }\r\n });\r\n }); }, [accountService, userId, code]), action = _b[0], _c = _b[1], isExecuting = _c.isExecuting, errors = _c.errors;\r\n return [action, { isExecuting: isExecuting, errors: errors }];\r\n}\r\nexports.useConfirmEmailCallback = useConfirmEmailCallback;\r\n//# sourceMappingURL=useConfirmEmailCallback.js.map","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar React = require(\"react\");\r\nvar react_use_async_callback_1 = require(\"react-use-async-callback\");\r\nvar useAccountService_1 = require(\"./useAccountService\");\r\n/**\r\n * Confirm an email address.\r\n */\r\nfunction useConfirmEmailChangeCallback() {\r\n var _this = this;\r\n var accountService = useAccountService_1.useAccountService();\r\n // Get the return url from the query string.\r\n var _a = React.useMemo(function () {\r\n var _a, _b, _c, _d, _e, _f;\r\n var params = new URLSearchParams(window.location.search);\r\n var userId = (_b = (_a = params.get('userId')) !== null && _a !== void 0 ? _a : params.get('UserId')) !== null && _b !== void 0 ? _b : '';\r\n var code = (_d = (_c = params.get('code')) !== null && _c !== void 0 ? _c : params.get('Code')) !== null && _d !== void 0 ? _d : '';\r\n var email = (_f = (_e = params.get('email')) !== null && _e !== void 0 ? _e : params.get('Email')) !== null && _f !== void 0 ? _f : '';\r\n return { userId: userId, code: code, email: email };\r\n }, []), userId = _a.userId, code = _a.code, email = _a.email;\r\n var _b = react_use_async_callback_1.useAsyncCallback(function () { return __awaiter(_this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, accountService.confirmEmailChange({ userId: userId, code: code, email: email })];\r\n case 1: return [2 /*return*/, _a.sent()];\r\n }\r\n });\r\n }); }, [accountService, userId, code, email]), action = _b[0], _c = _b[1], isExecuting = _c.isExecuting, errors = _c.errors;\r\n return [action, { isExecuting: isExecuting, errors: errors }];\r\n}\r\nexports.useConfirmEmailChangeCallback = useConfirmEmailChangeCallback;\r\n//# sourceMappingURL=useConfirmEmailChangeCallback.js.map","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar React = require(\"react\");\r\nvar react_use_async_callback_1 = require(\"react-use-async-callback\");\r\nvar useAccountService_1 = require(\"./useAccountService\");\r\n/**\r\n * Confirm an invite and set a password.\r\n */\r\nfunction useConfirmInviteCallback() {\r\n var _this = this;\r\n var accountService = useAccountService_1.useAccountService();\r\n // Get the details from the query string.\r\n var _a = React.useMemo(function () {\r\n var _a, _b, _c, _d;\r\n var params = new URLSearchParams(window.location.search);\r\n var userId = (_b = (_a = params.get('userId')) !== null && _a !== void 0 ? _a : params.get('UserId')) !== null && _b !== void 0 ? _b : '';\r\n var code = (_d = (_c = params.get('code')) !== null && _c !== void 0 ? _c : params.get('Code')) !== null && _d !== void 0 ? _d : '';\r\n return { userId: userId, code: code };\r\n }, []), userId = _a.userId, code = _a.code;\r\n var _b = react_use_async_callback_1.useAsyncCallback(function (model) { return __awaiter(_this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, accountService.confirmInvite({ userId: userId, code: code, password: model.password })];\r\n case 1: return [2 /*return*/, _a.sent()];\r\n }\r\n });\r\n }); }, [accountService, userId, code]), action = _b[0], _c = _b[1], isExecuting = _c.isExecuting, errors = _c.errors;\r\n return [action, { isExecuting: isExecuting, errors: errors }];\r\n}\r\nexports.useConfirmInviteCallback = useConfirmInviteCallback;\r\n//# sourceMappingURL=useConfirmInviteCallback.js.map","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar React = require(\"react\");\r\nvar react_use_async_callback_1 = require(\"react-use-async-callback\");\r\nvar useAccountService_1 = require(\"./useAccountService\");\r\n/**\r\n * Register an account for an authenticated external login.\r\n */\r\nfunction useCreateAccountForExternalLoginCallback() {\r\n var _this = this;\r\n var accountService = useAccountService_1.useAccountService();\r\n // Get the return url from the query string.\r\n var returnUrl = React.useMemo(function () {\r\n var _a, _b;\r\n var params = new URLSearchParams(window.location.search);\r\n var returnUrl = (_b = (_a = params.get('returnUrl')) !== null && _a !== void 0 ? _a : params.get('ReturnUrl')) !== null && _b !== void 0 ? _b : '';\r\n return returnUrl;\r\n }, []);\r\n var _a = react_use_async_callback_1.useAsyncCallback(function (model) { return __awaiter(_this, void 0, void 0, function () {\r\n var result;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, accountService.createAccountForExternalLogin(model, returnUrl)];\r\n case 1:\r\n result = _a.sent();\r\n // If we get here everything went well so redirect to the returnUrl.\r\n // Redirect the whole page (not just the react app) as its likely the returnUrl is handled on the server.\r\n window.location.href = result.returnUrl;\r\n return [2 /*return*/, result];\r\n }\r\n });\r\n }); }, [accountService]), action = _a[0], _b = _a[1], isExecuting = _b.isExecuting, errors = _b.errors;\r\n return [action, { isExecuting: isExecuting, errors: errors }];\r\n}\r\nexports.useCreateAccountForExternalLoginCallback = useCreateAccountForExternalLoginCallback;\r\n//# sourceMappingURL=useCreateAccountForExternalLoginCallback.js.map","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar React = require(\"react\");\r\nvar react_use_async_callback_1 = require(\"react-use-async-callback\");\r\nvar useAccountService_1 = require(\"./useAccountService\");\r\nvar useAuthenticatedState_1 = require(\"../../api/api-authorization/useAuthenticatedState\");\r\nvar util_1 = require(\"util\");\r\nvar useCache_1 = require(\"../../shared/useCache\");\r\n/**\r\n * Refresh the current user state using the accountService.\r\n * @param isAuthenticated\r\n */\r\nvar refreshCurrentUserRoles = function (isAuthenticated, accountService, setRoles) { return __awaiter(void 0, void 0, void 0, function () {\r\n var result;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n // Do nothing if we don't know our authentication state.\r\n if (util_1.isNullOrUndefined(isAuthenticated)) {\r\n return [2 /*return*/];\r\n }\r\n // If we are not authenticated then we have no roles.\r\n if (!isAuthenticated) {\r\n setRoles({ isAuthenticated: false, roles: [] });\r\n return [2 /*return*/];\r\n }\r\n return [4 /*yield*/, accountService.currentUserRoles()];\r\n case 1:\r\n result = _a.sent();\r\n setRoles({ isAuthenticated: true, roles: result.roles });\r\n return [2 /*return*/];\r\n }\r\n });\r\n}); };\r\n/**\r\n * Returns the list of roles for the current user.\r\n */\r\nfunction useCurrentUserRoles(options) {\r\n var _this = this;\r\n if (options === void 0) { options = {}; }\r\n var _a;\r\n var isAuthenticated = useAuthenticatedState_1.useAuthenticatedState().isAuthenticated;\r\n var _b = useCache_1.useCache('currentUserRoles'), roles = _b[0], setRoles = _b[1];\r\n var accountService = useAccountService_1.useAccountService();\r\n var _c = react_use_async_callback_1.useAsyncCallback(function () { return __awaiter(_this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, refreshCurrentUserRoles(isAuthenticated, accountService, setRoles)];\r\n case 1:\r\n _a.sent();\r\n return [2 /*return*/];\r\n }\r\n });\r\n }); }, [accountService, isAuthenticated]), refresh = _c[0], _d = _c[1], isLoading = _d.isExecuting, errors = _d.errors;\r\n React.useEffect(function () {\r\n if (options.lazy) {\r\n return;\r\n }\r\n // Refresh from the store if we need to.\r\n if (util_1.isNullOrUndefined(isAuthenticated)) {\r\n return;\r\n }\r\n if (!roles || roles.isAuthenticated !== isAuthenticated) {\r\n refresh();\r\n }\r\n }, [refresh, options.lazy, isAuthenticated, roles]);\r\n // TODO handle options.pollInterval.\r\n return {\r\n data: { roles: (_a = roles === null || roles === void 0 ? void 0 : roles.roles) !== null && _a !== void 0 ? _a : null },\r\n refresh: refresh,\r\n isLoading: isLoading,\r\n errors: errors\r\n };\r\n}\r\nexports.useCurrentUserRoles = useCurrentUserRoles;\r\n/**\r\n * Clear the cached user roles.\r\n */\r\nfunction useResetCurrentUserRolesCallback() {\r\n var _this = this;\r\n var isAuthenticated = useAuthenticatedState_1.useAuthenticatedState().isAuthenticated;\r\n var _a = useCache_1.useCache('currentUserRoles'), setRoles = _a[1];\r\n var accountService = useAccountService_1.useAccountService();\r\n var refresh = react_use_async_callback_1.useAsyncCallback(function () { return __awaiter(_this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, refreshCurrentUserRoles(isAuthenticated, accountService, setRoles)];\r\n case 1:\r\n _a.sent();\r\n return [2 /*return*/];\r\n }\r\n });\r\n }); }, [accountService, isAuthenticated])[0];\r\n return React.useCallback(function () {\r\n refresh();\r\n }, [refresh]);\r\n}\r\nexports.useResetCurrentUserRolesCallback = useResetCurrentUserRolesCallback;\r\n//# sourceMappingURL=useCurrentUserRoles.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar AuthorizeService_1 = require(\"./AuthorizeService\");\r\n/**\r\n * Hook to return the authentication service.\r\n */\r\nfunction useAuthorizeService() {\r\n return AuthorizeService_1.default;\r\n}\r\nexports.useAuthorizeService = useAuthorizeService;\r\n//# sourceMappingURL=useAuthorizeService.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.apiAuthorizationConfig = {\r\n endpoint: '/',\r\n applicationName: 'EndUserPortal',\r\n};\r\n//# sourceMappingURL=apiAuthorizationConfig.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar React = require(\"react\");\r\nvar inject_typesafe_react_1 = require(\"inject-typesafe-react\");\r\n/**\r\n * Use state stored in the redux cache via CacheService.\r\n * @param id\r\n */\r\nfunction useCache(key) {\r\n var cacheService = inject_typesafe_react_1.useServices(function (services) { return services.cacheService(); });\r\n var setState = React.useCallback(function (value, options) {\r\n cacheService.storeInCache(key, value, options);\r\n }, [cacheService, key]);\r\n return [cacheService.readFromCache(key), setState];\r\n}\r\nexports.useCache = useCache;\r\n//# sourceMappingURL=useCache.js.map","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar react_use_async_callback_1 = require(\"react-use-async-callback\");\r\nvar useAccountService_1 = require(\"./useAccountService\");\r\n/**\r\n * Callback to Invite an account to register.\r\n */\r\nfunction useInviteCallback() {\r\n var _this = this;\r\n var accountService = useAccountService_1.useAccountService();\r\n var _a = react_use_async_callback_1.useAsyncCallback(function (model) { return __awaiter(_this, void 0, void 0, function () {\r\n var result;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, accountService.invite(model)];\r\n case 1:\r\n result = _a.sent();\r\n return [2 /*return*/, result];\r\n }\r\n });\r\n }); }, [accountService]), action = _a[0], _b = _a[1], isExecuting = _b.isExecuting, errors = _b.errors;\r\n return [action, { isExecuting: isExecuting, errors: errors }];\r\n}\r\nexports.useInviteCallback = useInviteCallback;\r\n//# sourceMappingURL=useInviteCallback.js.map","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar React = require(\"react\");\r\nvar react_use_async_callback_1 = require(\"react-use-async-callback\");\r\nvar useAccountService_1 = require(\"./useAccountService\");\r\n/**\r\n * Use the store to return a list of external authentication schemes for the app.\r\n */\r\nfunction useExternalAuthenticationSchemes(options) {\r\n var _this = this;\r\n if (options === void 0) { options = {}; }\r\n var _a = React.useState([]), externalAuthenticationSchemes = _a[0], setExternalAuthenticationSchemes = _a[1];\r\n var accountService = useAccountService_1.useAccountService();\r\n var _b = react_use_async_callback_1.useAsyncCallback(function () { return __awaiter(_this, void 0, void 0, function () {\r\n var result;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, accountService.getExternalAuthenticationSchemes()];\r\n case 1:\r\n result = _a.sent();\r\n setExternalAuthenticationSchemes(result);\r\n return [2 /*return*/];\r\n }\r\n });\r\n }); }, [accountService, setExternalAuthenticationSchemes]), refresh = _b[0], _c = _b[1], isLoading = _c.isExecuting, errors = _c.errors;\r\n React.useEffect(function () {\r\n if (!options.lazy) {\r\n refresh();\r\n }\r\n }, [refresh, options.lazy]);\r\n // TODO handle options.pollInterval.\r\n return {\r\n data: { externalAuthenticationSchemes: externalAuthenticationSchemes },\r\n refresh: refresh,\r\n isLoading: isLoading,\r\n errors: errors\r\n };\r\n}\r\nexports.useExternalAuthenticationSchemes = useExternalAuthenticationSchemes;\r\n//# sourceMappingURL=useExternalAuthenticationSchemes.js.map","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar react_use_async_callback_1 = require(\"react-use-async-callback\");\r\nvar useAccountService_1 = require(\"./useAccountService\");\r\n/**\r\n * Callback to lockout an account.\r\n */\r\nfunction useLockoutCallback() {\r\n var _this = this;\r\n var accountService = useAccountService_1.useAccountService();\r\n var _a = react_use_async_callback_1.useAsyncCallback(function (model) { return __awaiter(_this, void 0, void 0, function () {\r\n var result;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, accountService.lockout(model)];\r\n case 1:\r\n result = _a.sent();\r\n return [2 /*return*/, result];\r\n }\r\n });\r\n }); }, [accountService]), action = _a[0], _b = _a[1], isExecuting = _b.isExecuting, errors = _b.errors;\r\n return [action, { isExecuting: isExecuting, errors: errors }];\r\n}\r\nexports.useLockoutCallback = useLockoutCallback;\r\n//# sourceMappingURL=useLockoutCallback.js.map","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar React = require(\"react\");\r\nvar react_use_async_callback_1 = require(\"react-use-async-callback\");\r\nvar useAccountService_1 = require(\"./useAccountService\");\r\n/**\r\n * Callback to Login using a password.\r\n */\r\nfunction useLoginWithPasswordCallback() {\r\n var _this = this;\r\n var accountService = useAccountService_1.useAccountService();\r\n // Get the return url from the query string.\r\n var returnUrl = React.useMemo(function () {\r\n var _a, _b;\r\n var params = new URLSearchParams(window.location.search);\r\n var returnUrl = (_b = (_a = params.get('returnUrl')) !== null && _a !== void 0 ? _a : params.get('ReturnUrl')) !== null && _b !== void 0 ? _b : '';\r\n return returnUrl;\r\n }, []);\r\n var _a = react_use_async_callback_1.useAsyncCallback(function (model) { return __awaiter(_this, void 0, void 0, function () {\r\n var result;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, accountService.loginWithPassword(model, returnUrl)];\r\n case 1:\r\n result = _a.sent();\r\n // If we have additional steps to take before we are completely signed in, handle those now.\r\n if (result.requiresTwoFactor || result.requiresEmailConfirmation) {\r\n // Don't want to redirect to returnUrl.\r\n return [2 /*return*/, result];\r\n }\r\n // If we get here we have a successful login\r\n return [2 /*return*/, result];\r\n }\r\n });\r\n }); }, [accountService]), action = _a[0], _b = _a[1], isExecuting = _b.isExecuting, errors = _b.errors;\r\n return [action, { isExecuting: isExecuting, errors: errors }];\r\n}\r\nexports.useLoginWithPasswordCallback = useLoginWithPasswordCallback;\r\n//# sourceMappingURL=useLoginWithPasswordCallback.js.map","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar React = require(\"react\");\r\nvar react_use_async_callback_1 = require(\"react-use-async-callback\");\r\nvar useAccountService_1 = require(\"./useAccountService\");\r\n/**\r\n * Callback to Register an account.\r\n */\r\nfunction useRegisterAccountCallback() {\r\n var _this = this;\r\n var accountService = useAccountService_1.useAccountService();\r\n // Get the return url from the query string.\r\n var returnUrl = React.useMemo(function () {\r\n var _a, _b;\r\n var params = new URLSearchParams(window.location.search);\r\n var returnUrl = (_b = (_a = params.get('returnUrl')) !== null && _a !== void 0 ? _a : params.get('ReturnUrl')) !== null && _b !== void 0 ? _b : '';\r\n return returnUrl;\r\n }, []);\r\n var _a = react_use_async_callback_1.useAsyncCallback(function (model) { return __awaiter(_this, void 0, void 0, function () {\r\n var result;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, accountService.register(model, returnUrl)];\r\n case 1:\r\n result = _a.sent();\r\n // If we have additional steps to take before we are completely signed in, handle those now.\r\n if (result.requiresTwoFactor || result.requiresEmailConfirmation) {\r\n // Don't want to redirect to returnUrl.\r\n return [2 /*return*/, result];\r\n }\r\n // If we get here we have a successful login\r\n return [2 /*return*/, result];\r\n }\r\n });\r\n }); }, [accountService]), action = _a[0], _b = _a[1], isExecuting = _b.isExecuting, errors = _b.errors;\r\n return [action, { isExecuting: isExecuting, errors: errors }];\r\n}\r\nexports.useRegisterAccountCallback = useRegisterAccountCallback;\r\n//# sourceMappingURL=useRegisterAccountCallback.js.map","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar react_use_async_callback_1 = require(\"react-use-async-callback\");\r\nvar useAccountService_1 = require(\"./useAccountService\");\r\n/**\r\n * Callback to resend the email confirmation email.\r\n */\r\nfunction useResendConfirmationEmailCallback() {\r\n var _this = this;\r\n var accountService = useAccountService_1.useAccountService();\r\n var _a = react_use_async_callback_1.useAsyncCallback(function (email) { return __awaiter(_this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, accountService.resendConfirmEmail(email)];\r\n case 1: return [2 /*return*/, _a.sent()];\r\n }\r\n });\r\n }); }, [accountService]), action = _a[0], _b = _a[1], isExecuting = _b.isExecuting, errors = _b.errors;\r\n return [action, { isExecuting: isExecuting, errors: errors }];\r\n}\r\nexports.useResendConfirmationEmailCallback = useResendConfirmationEmailCallback;\r\n//# sourceMappingURL=useResendConfirmationEmailCallback.js.map","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar react_use_async_callback_1 = require(\"react-use-async-callback\");\r\nvar useAccountService_1 = require(\"./useAccountService\");\r\n/**\r\n * Callback to resend the inviten email.\r\n */\r\nfunction useResendInviteEmailCallback() {\r\n var _this = this;\r\n var accountService = useAccountService_1.useAccountService();\r\n var _a = react_use_async_callback_1.useAsyncCallback(function (email) { return __awaiter(_this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, accountService.resendInviteEmail(email)];\r\n case 1: return [2 /*return*/, _a.sent()];\r\n }\r\n });\r\n }); }, [accountService]), action = _a[0], _b = _a[1], isExecuting = _b.isExecuting, errors = _b.errors;\r\n return [action, { isExecuting: isExecuting, errors: errors }];\r\n}\r\nexports.useResendInviteEmailCallback = useResendInviteEmailCallback;\r\n//# sourceMappingURL=useResendInviteEmailCallback.js.map","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar React = require(\"react\");\r\nvar react_use_async_callback_1 = require(\"react-use-async-callback\");\r\nvar useAccountService_1 = require(\"./useAccountService\");\r\n/**\r\n * Callback to reset the password of an account using a unique URL from an email as authorization.\r\n */\r\nfunction useResetPasswordCallback() {\r\n var _this = this;\r\n var accountService = useAccountService_1.useAccountService();\r\n // Get the code from the query string.\r\n var _a = React.useMemo(function () {\r\n var _a, _b, _c, _d;\r\n var params = new URLSearchParams(window.location.search);\r\n var userId = (_b = (_a = params.get('userId')) !== null && _a !== void 0 ? _a : params.get('UserId')) !== null && _b !== void 0 ? _b : '';\r\n var code = (_d = (_c = params.get('code')) !== null && _c !== void 0 ? _c : params.get('Code')) !== null && _d !== void 0 ? _d : '';\r\n return { userId: userId, code: code };\r\n }, []), userId = _a.userId, code = _a.code;\r\n var _b = react_use_async_callback_1.useAsyncCallback(function (password) { return __awaiter(_this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, accountService.resetPassword({ userId: userId, code: code, password: password })];\r\n case 1: return [2 /*return*/, _a.sent()];\r\n }\r\n });\r\n }); }, [accountService]), action = _b[0], _c = _b[1], isExecuting = _c.isExecuting, errors = _c.errors;\r\n return [action, { isExecuting: isExecuting, errors: errors }];\r\n}\r\nexports.useResetPasswordCallback = useResetPasswordCallback;\r\n//# sourceMappingURL=useResetPasswordCallback.js.map","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar react_use_async_callback_1 = require(\"react-use-async-callback\");\r\nvar useAccountService_1 = require(\"./useAccountService\");\r\n/**\r\n * Callback to Send a password reset email.\r\n */\r\nfunction useSendPasswordResetEmailCallback() {\r\n var _this = this;\r\n var accountService = useAccountService_1.useAccountService();\r\n var _a = react_use_async_callback_1.useAsyncCallback(function (email) { return __awaiter(_this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, accountService.sendPasswordResetEmail(email)];\r\n case 1: return [2 /*return*/, _a.sent()];\r\n }\r\n });\r\n }); }, [accountService]), action = _a[0], _b = _a[1], isExecuting = _b.isExecuting, errors = _b.errors;\r\n return [action, { isExecuting: isExecuting, errors: errors }];\r\n}\r\nexports.useSendPasswordResetEmailCallback = useSendPasswordResetEmailCallback;\r\n//# sourceMappingURL=useSendPasswordResetEmailCallback.js.map","\"use strict\";\r\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar react_use_async_callback_1 = require(\"react-use-async-callback\");\r\nvar useAccountService_1 = require(\"./useAccountService\");\r\n/**\r\n * Callback to Start the external login process for a provider.\r\n */\r\nfunction useStartExternalLoginCallback() {\r\n var _this = this;\r\n var accountService = useAccountService_1.useAccountService();\r\n var _a = react_use_async_callback_1.useAsyncCallback(function (provider, returnUrl) { return __awaiter(_this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n accountService.startExternalLogin(provider, returnUrl);\r\n return [2 /*return*/];\r\n });\r\n }); }, [accountService]), action = _a[0], _b = _a[1], isExecuting = _b.isExecuting, errors = _b.errors;\r\n return [action, { isExecuting: isExecuting, errors: errors }];\r\n}\r\nexports.useStartExternalLoginCallback = useStartExternalLoginCallback;\r\n//# sourceMappingURL=useStartExternalLoginCallback.js.map","export * from './CacheOptions';\r\nexport * from './CacheService';\r\n"],"sourceRoot":""}