{"version":3,"sources":["images/str-group-white.svg","images/K0006-03_V01-Straumann Surgical - Implants_RGB_Transparent.png","components/Layout/Layout.tsx","components/Welcome/Welcome.tsx","Models/Constant.ts","components/RequesterData/RequesterData.tsx","components/RequestCaptchaAndSubmitAction/RequestCaptchaAndSubmitAction.tsx","components/AskAccess/AskAccess.tsx","dataprovider/HttpService.ts","components/LoginComponent/Common.ts","dataprovider/DataProvider.ts","components/LoginComponent/MicrosoftComponent.tsx","components/LoginComponent/GoogleComponent.tsx","components/LoginComponent/LoginHelper.ts","components/LoginComponent/CustomAuthComponent.tsx","components/LoginComponent/LoginComponent.tsx","components/LoginComponent/ConfirmPage.tsx","components/LoginComponent/ResetPWPage.tsx","components/LoginComponent/ExternalConsent.tsx","components/AttachmentComponent/AttachmentComponent.tsx","components/SubmitAgreement/SubmitAgreement.tsx","components/DocumentSearchAndDownload/DocumentSearchAndDownloadService.ts","components/DocumentSearchAndDownload/DocumentsListView/Constant.ts","components/DocumentSearchAndDownload/DocumentSearchFilters/DocumentSearchFilters.tsx","components/DocumentSearchAndDownload/DocumentsListView/FilterPanel/FilterPanel.tsx","components/DocumentSearchAndDownload/DocumentsListView/VersionHistory/Constant.ts","components/DocumentSearchAndDownload/DocumentsListView/VersionHistory/VersionHistory.tsx","components/DocumentSearchAndDownload/DocumentsListView/DocumentsListView.tsx","components/DocumentSearchAndDownload/DocumentSearchAndDownload.tsx","components/LoginComponent/CookieList.tsx","App.js","registerServiceWorker.js","index.js"],"names":["module","exports","logo","require","Layout","props","year","Date","getFullYear","Stack","className","horizontal","horizontalAlign","verticalAlign","onClick","window","location","href","origin","src","alt","this","children","id","style","height","fontSize","marginRight","target","React","displayName","name","sectionStackTokens","childrenGap","WelcomePage","state","isLoggedIn","myItems","isLoading","isDeleteConfirmationOpen","selectedItem","isDeleting","currentRequestStatus","canCreateNewRequest","showInReviewMessage","setLoggedInInformation","newProps","setState","currentUser","dataProvider","getUserData","userId","response","history","push","PageURL","Download","SubmitAgreement","verticalFill","tokens","css","stepSizeClass","paddingRight","width","PrimaryButton","text","styles","root","AskAccess","fontWeight","AccessRequestSchema","Name","value","required","valid","Id","AccessRequestId","EMail","Company","Reason","IsAgreed","errorLabelStyles","fontFamily","color","margin","paddingTop","display","alignItems","RequesterData","data","onTextFieldChange","onCheckBoxChange","readonly","TextField","label","disabled","onChange","e","v","errorMessage","multiline","rows","Checkbox","checked","checkbox","borderColor","Label","CaptchaAndSubmitAction","onRecaptchaToken","isCaptchaValid","onButtonClicked","isSubmitProcessing","refReCaptchaRegister","buttonTitle","textAlign","paddingLeft","sitekey","token","ref","onExpired","onErrored","setData","reCaptchaToken","setReCaptchaToken","setIsCaptchaValid","isProcessing","setIsProcessing","setCanCreateNewRequest","showInReviewMsg","setShowInReviewMsg","showSpinner","setShowSpinner","showInSubmissionMessage","setShowInSubmissionMessage","a","dataClone","cloneDeep","firstName","lastName","email","Dialog","hidden","dialogContentProps","type","DialogType","normal","modalProps","isBlocking","Spinner","size","SpinnerSize","large","ariaLive","fieldName","formValid","captchaValid","Object","keys","forEach","field","hasOwnProperty","validateFormFields","accessRequestData","UserId","createAccessRequest","then","result","catch","error","console","log","HttpService","url","body","headers","Promise","resolve","reject","baseHeaders","Accept","sessionStorage","authToken","JSON","parse","fetch","method","cache","stringify","ok","json","status","removeItem","err","title","ierr","dir","message","length","detail","ex","indexOf","Common","key","rtn","split","params_arr","queryString","i","splice","join","endsWith","substr","pushState","newUrl","port","protocol","hostname","toLowerCase","DataProvider","apiEndpointSP","userAccountEndpointSP","post","accessRequest","get","encodeURIComponent","brand","product","query","filesDownloaded","formData","uniqueId","camlQuery","errorArea","errorObj","logError","stack","msg","toString","substring","trim","param","sourceURL","user","isRSMToken","Account","Token","IsRSMToken","BaseUrl","getCurrentServerUrl","activationGuid","activateParameter","activate","pw","password","baseUrl","base64File","applicantName","accessRequestId","loginRequest","scopes","handleLogin","instance","callback","setAuthenticated","showError","setAuthStatus","setRedirect","setShowWaitingSpinner","loginPopup","idToken","idTokenClaims","given_name","family_name","accountType","AccountType","Microsoft","activateGuid","parseMicrosoftUser","account","spUser","isNewUser","rsmConsentTarget","logoutRedirect","onRedirectNavigate","MicrosoftComponent","useMsal","accounts","useState","authenticated","redirect","showWaitingSpinner","userName","setUserName","useEffect","signedIn","to","Button","variant","marginTop","logoutPopup","handleLogout","CLIENT_ID","GoogleLoginComponent","responseGoogleSuccess","profileObj","givenName","familyName","Google","tokenId","redirectConsent","forceLogout","responseGoogleError","showGoogleError","googleErrorMessage","logout","loadGapiInsideDOM","gapi","load","auth2","getAuthInstance","signOut","Boolean","clientId","buttonText","onLogoutSuccess","onSuccess","onFailure","isSignedIn","cookiePolicy","onDismiss","Component","GeneralHelper","content","mandatoryValidation","emailValidation","confirmationPasswordInvalid","resetPWMail","activateUserMail","ICustomAuthComponent","refReCaptchaLogin","_onRegisterBtnCLicked","time","inputsAreaValid","registerUser","setInformationMessage","MessageBarType","alert","_onLoginBtnClicked","loginUser","_onLogoutBtnClicked","Custom","registered","loggedIn","resendActivationCode","sendingConfirmation","updatedMessage","success","finally","informationMessage","loginInternalUserAccount","setItem","bearerToken","onPanelStatusChange","autoDismissError","errormessage","current","reset","registerInternalUserAccount","parseError","onReCaptchaChange","register","firstNameErrorMessage","lastNameErrorMessage","emailErrorMessage","passwordErrorMessage","confirmPasswordErrorMessage","legalNoticeErrorMessage","privacyNoticeErrorMessage","reCaptchaError","invalid","confirmationPassword","checkPasswordStrength","legalNoticeChecked","privacyNoticeChecked","getValue","isValidated","resetValidation","pwdBadgeVariant","pwdBadgeLabel","prevState","autoDismiss","informationType","warning","setTimeout","onCustomLoginButton_Clicked","showCustomLoginPanel","onCustomLoginPanel_Dismiss","onLegalNoticeClicked","ev","onPrivacyNoticeClicked","pwd","strongPassword","RegExp","mediumPassword","badgeVariant","badgeLabel","test","userData","styleError","mergeStyles","MessageBar","messageBarType","isMultiline","dismissIconProps","iconName","dismissButtonAriaLabel","border","backgroundColor","padding","position","borderRadius","boxShadow","IconButton","top","right","iconProps","onSelect","autoComplete","placeholder","event","newValue","defaultValue","canRevealPassword","gap","DefaultButton","Badge","maxWidth","htmlFor","LoginComponent","refPersonIcon","ensureSPUser","userInformation","ensureExternalUserAccount","stlUser","showAuthenticationError","provider","error_provider","isErrorOpen","loggedInWithGoogle","loggedInWithMicrosoft","loggedInWithCustomAccount","isCalloutOpen","isCustomPanelOpen","curUrl","hideLoginComponent","includes","signedInStyles","flexDirection","isOpen","Icon","cursor","componentRef","imageProps","Callout","ConfirmPage","getTheme","activationInProgress","accountActivated","search","code","URLSearchParams","getUserByActivateParam","ResetPWPage","_resetBtnClicked","resetPw","_getResetLink","confirmMode","activationCode","emailWasSent","getNewActivationCode","resetPWByActivateParam","resetSuccessful","info","keepMessage","userReadyForPWReset","urlParams","removeUrlParam","ExternalConsent","onConfirmClicked","context","loginComponent","finalUser","redirectWelcome","onNoConsentClicked","that","justifyContent","contextType","MsalContext","AttachmentComponent","fileInputRef","triggerFileUpload","files","mode","categorizedFiles","categorizeValidInvalidFiles","correctFiles","badFilesDialogCallback","onFilesAdded","isAddingFile","isExchangingFile","badFiles","invalidExtensionFiles","invalidNameFiles","onFileReplaced","isBadFilesDialogOpen","onFileDrop","enableDropZone","preventDefault","stopPropagation","fileMode","draggingOver","dataTransfer","isExchange","attachment","onDraggingOver","onDragEnd","onDragExit","onDelete","File","deleteConfirmationAttachment","onDownload","open","onDeleteConfirmationDismiss","action","isDeletingFile","onFileDeleted","onAddFileClicked","click","onInputFileChanged","filterAllowedFiles","file","item","extensionFilters","extension","toLocaleLowerCase","replace","some","filter","invalidFileNameCharacters","isFileNameInvalid","match","attachments","deletePermissions","attachmentClickBehaviour","maxHeightFileList","linkStyle","deleteButtonStyle","addButtonStyle","spinnerStyle","borderStyle","displayStyle","placeholderWidth","deletePlaceholder","makeAttachmentHyperlink","data-interception","serverRelativeUrl","bind","userHasDeletePermissions","dropZoneTooltip","spinnerIcon","isExchangeMode","onDrop","onDragEnter","paddingBottom","maxHeight","overflowY","minHeight","map","isDeleted","maxFileNameWidth","overflowX","textOverflow","whiteSpace","ActionButton","icon","multiple","accept","onDragOver","onDragLeave","left","zIndex","subText","DialogFooter","ext","badFile","defaultProps","useFileIdToDownloadFile","useParams","requestId","noAttachmentError","canSubmitAgreement","showSuccessMessage","showInitialLoader","showNoRequestFound","noRequestFound","getUserDataForAgreementSubmission","getAccessRequestForAgreementSubmission","onSubmitButtonClicked","toBase64","submitAgreement","reader","FileReader","readAsDataURL","onload","onerror","cellStyle","cellTitle","cellName","wordBreak","detailsListStyle","headerWrapper","_onColumnContextMenu","minWidth","columnActionsMode","ColumnActionsMode","hasDropdown","onColumnClick","column","onColumnContextMenu","isSortedDescending","isSorted","_onColumnClick","_onFilterClick","items","canCheck","isFiltered","filterValues","values","searchTerm","filteredItems","initialItems","filterItemsClone","filterItemsArr","found","term","re","prop","filterBy","element","refColumns","refItems","newColumns","slice","currColumn","currCol","newCol","copyAndSort","results","d","undefined","Array","from","Set","columnKey","sort","b","alreadyDownloadedFiles","isVip","approvedFileTypes","approvedProducts","viewItems","downloadedFiles","sortedData","resultNew","parsedData","Material","localeCompare","FileVersion","el","find","it","isVaildEntry","ft","pr","Brand","Product","Type","LastUpdatedDate","moment","format","Downloaded","dFile","ServerRelativeUrl","LaunchDate","IsVIP","DocType","Title","UniqueId","FileDescription","HasOlderVersion","val","ViewItems","AllItems","material","camlBuilder","CamlBuilder","Query","Where","NumberField","GreaterThan","ToString","FromXml","ModifyWhere","AppendAnd","DateField","LessThanOrEqualTo","BooleanField","IsFalse","LookupField","ValueAsText","EqualTo","Contains","DocumentsSearchAndDownloadService","brands","products","materials","types","selectedBrand","selectedProduct","selectedType","selectedMaterial","onBrandChange","onProductChange","onTypeChange","onMaterialChange","marginLeft","Dropdown","options","selectedKey","op","filterStackTokens","buttonStackTokens","FilterPanel","filterByValues","setFilterByValues","selectedFilterValues","setSelectedFilterValues","isApplyButtonEnabled","setIsApplyButtonEnabled","isApplyButtonEnabledonLoad","enableApplyButton","getValuesForFilterByOption","prevFilterValues","selectedFilterOptions","option","f","selectedFilterValuesClone","index","handleCheckBoxChange","onApply","cancelIcon","iconButtonStyles","contentStyles","mergeStyleSets","container","flexFlow","header","flex","borderTop","FontWeights","semibold","selectors","p","marginBottom","VersionHistory","versionHistory","setVersionHistory","isModalOpen","relatedItems","allItems","currentItem","historyRecord","downloadedItems","findIndex","dItem","Modal","onDismissModal","scrollableContent","overflow","ariaLabel","DetailsList","columns","viewColumnsSchema","layoutMode","DetailsListLayoutMode","justified","selectionMode","SelectionMode","none","disableSelectionZone","constrainMode","ConstrainMode","unconstrained","isHeaderVisible","selectionPreservedOnEmptyClick","DocumentListView","contextualMenuProps","currentSortedColumn","panelProps","show","filterOptions","showVersionHistory","selectedItems","setSelectedItems","selection","Selection","onSelectionChanged","getSelection","getColumnSchema","currentSortedCol","col","newItems","getContextualMenuProps","getContextualSchema","currentTarget","directionalHint","DirectionalHint","bottomLeftEdge","gapSpace","isBeakVisible","_onContextualMenuDismissed","dismissPanel","onHistoryButtonClick","handleFilterSelection","objFilterOption","obj","filterDataByColumn","Link","onNewestDocumentClick","onSearchClick","filteredItemsClone","getFilteredItemsForSearchTerm","data-is-scrollable","fixedColumns","onRenderDetailsHeader","defaultRender","onRenderColumnHeaderTooltip","tooltipHostProps","TooltipHost","onRenderItemColumn","Panel","PanelType","smallFixedFar","closeButtonAriaLabel","headerText","onCancel","ContextualMenu","onDownloadClick","DocumentSearchAndDownload","productValues","isProductsDisabled","isTypeDisabled","brandsLoaded","isVIP","allViewItems","hasAccess","showAccessDeniedMessage","showRequestInProgressMessage","initialLoader","showAccessRequestRejectedMessage","freeSearch","brandOptions","productOptions","typeOptions","isUserVIP","userDetailsResponse","requestStatus","getCamlQueryForSearchFilters","all","getSTLFilesWithoutAnyFilters","getAlreadyDownloadedFiles","getFilters","documentsResponse","responseFilters","generateListViewItems","parsedResponse","handleNewestDocumentClick","productsClone","handleBrandChange","today","dd","String","getDate","padStart","mm","getMonth","yyyy","fileName","zip","JSZip","tempDownloadedData","downloadFile","FileUniqueId","FileDownloadName","FileContents","base64","updateFilesDownloadedReportList","itemClone","sItem","generateAsync","saveAs","downloadedFilesClone","getSTLFilesWithFilters","onFreeSearchChange","CookieList","ConfirmationPage","Consent","msalInstance","PublicClientApplication","returnURI","auth","authority","redirectUri","cacheLocation","storeAuthStateInCookie","getMSALConfig","App","refLoginComponent","host","sessionExpired","path","redirectHome","createRef","expirationUTC","exact","render","isLocalhost","registerValidSW","swUrl","navigator","serviceWorker","registration","onupdatefound","installingWorker","installing","onstatechange","controller","initializeIcons","document","getElementsByTagName","getAttribute","rootElement","getElementById","ReactDOM","basename","URL","process","addEventListener","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.5877e3bf.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/str-group-white.c517c0ca.svg\";","module.exports = __webpack_public_path__ + \"static/media/K0006-03_V01-Straumann Surgical - Implants_RGB_Transparent.d53ddad1.png\";","import * as React from \"react\";\r\nimport \"./Layout.scss\";\r\n//import logo from '../../images/str-group-color.svg';\r\nimport { Link } from \"react-router-dom\";\r\nimport { Stack } from \"office-ui-fabric-react\";\r\n\r\nconst logo = require(\"../../images/str-group-white.svg\");\r\n\r\nexport class Layout extends React.Component {\r\n\tstatic displayName = Layout.name;\r\n\tprivate year = new Date().getFullYear();\r\n\r\n\tconstructor(props: any) {\r\n\t\tsuper(props);\r\n\t}\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\twindow.location.href = window.location.origin;\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tStraumann STL Library\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\"Straumann\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t{/* */}\r\n\t\t\t\t\t{/*

Service Agreement

*/}\r\n\t\t\t\t\t
{this.props.children}
\r\n\t\t\t\t\t{/*
*/}\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t
© {this.year} Institute Straumann AG
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tLegal notice\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t|\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tPrivacy notice\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t|\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tImprint\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n","import * as React from \"react\";\r\nimport { css, Stack, PrimaryButton, IStackTokens } from \"office-ui-fabric-react\";\r\nimport { PageURL } from \"../../App\";\r\nimport \"./Welcome.scss\";\r\nimport { IUserAccount } from \"../LoginComponent/LoginComponent\";\r\nimport DataProvider from \"../../dataprovider/DataProvider\";\r\n\r\nconst sectionStackTokens: IStackTokens = { childrenGap: 10 };\r\nexport interface IWelcomePageProps {\r\n\tlocation: Location;\r\n\thistory: any;\r\n\tstepSizeClass: string;\r\n\tisLoggedIn: boolean;\r\n\tdataProvider: DataProvider;\r\n\tcurrentUser?: IUserAccount;\r\n}\r\n\r\nexport interface IWelcomePageState {\r\n\tisLoggedIn: boolean;\r\n\tmyItems?: any[];\r\n\tisLoading: boolean;\r\n\tisDeleteConfirmationOpen: boolean;\r\n\tselectedItem: any;\r\n\tisDeleting: boolean;\r\n\tcurrentRequestStatus: string;\r\n\tcanCreateNewRequest: boolean;\r\n\tshowInReviewMessage: boolean;\r\n}\r\n\r\nexport class WelcomePage extends React.Component {\r\n\tconstructor(props: IWelcomePageProps) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tisLoggedIn: props.isLoggedIn,\r\n\t\t\tmyItems: [],\r\n\t\t\tisLoading: false,\r\n\t\t\tisDeleteConfirmationOpen: false,\r\n\t\t\tselectedItem: null,\r\n\t\t\tisDeleting: false,\r\n\t\t\tcurrentRequestStatus: \"\",\r\n\t\t\tcanCreateNewRequest: false,\r\n\t\t\tshowInReviewMessage: false,\r\n\t\t};\r\n\t\t//this.setLoggedInInformation();\r\n\t}\r\n\tpublic componentDidMount() {\r\n\t\tthis.setLoggedInInformation();\r\n\t}\r\n\r\n\tpublic componentWillReceiveProps(newProps: IWelcomePageProps) {\r\n\t\tif (this.state.isLoggedIn != newProps.isLoggedIn) {\r\n\t\t\tthis.setState({ isLoggedIn: newProps.isLoggedIn }, () => {\r\n\t\t\t\tthis.setLoggedInInformation();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tprivate async setLoggedInInformation() {\r\n\t\tif (this.state.isLoggedIn && this.props.currentUser) {\r\n\t\t\tlet canCreateNewRequest = false;\r\n\t\t\tlet currentRequestStatus = \"\";\r\n\t\t\tthis.setState({ isLoading: true });\r\n\t\t\tconst response: any = await this.props.dataProvider.getUserData(this.props.currentUser.userId);\r\n\r\n\t\t\tif (response) {\r\n\t\t\t\tcurrentRequestStatus = response[\"currentRequestStatus\"] ? response[\"currentRequestStatus\"] : \"\";\r\n\t\t\t\tcanCreateNewRequest = response[\"canCreateNewRequest\"] ? response[\"canCreateNewRequest\"] : false;\r\n\r\n\t\t\t\t// if (response[\"currentRequestStatus\"] == \"AskForAccess\") {\r\n\t\t\t\t// \tthis.props.history.push(PageURL.AskAccess);\r\n\t\t\t\t// }\r\n\t\t\t\tif (currentRequestStatus == \"AccessApproved\") {\r\n\t\t\t\t\tthis.props.history.push(PageURL.Download);\r\n\t\t\t\t} else if (currentRequestStatus == \"AccessDenied\") {\r\n\t\t\t\t\tthis.setState({\r\n\t\t\t\t\t\tcurrentRequestStatus: response[\"currentRequestStatus\"],\r\n\t\t\t\t\t\tcanCreateNewRequest: true,\r\n\t\t\t\t\t\tshowInReviewMessage: false,\r\n\t\t\t\t\t});\r\n\t\t\t\t} else if (!canCreateNewRequest && currentRequestStatus == \"DocumentSubmitted\") {\r\n\t\t\t\t\tthis.setState({\r\n\t\t\t\t\t\tcurrentRequestStatus: response[\"currentRequestStatus\"],\r\n\t\t\t\t\t\tcanCreateNewRequest: response[\"canCreateNewRequest\"],\r\n\t\t\t\t\t\tshowInReviewMessage: true,\r\n\t\t\t\t\t});\r\n\t\t\t\t} else if (!canCreateNewRequest && currentRequestStatus == \"AskForAccess\") {\r\n\t\t\t\t\tthis.props.history.push(PageURL.SubmitAgreement + \"/\" + this.props.currentUser.userId);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.setState({\r\n\t\t\t\t\t\tcurrentRequestStatus: response[\"currentRequestStatus\"],\r\n\t\t\t\t\t\tcanCreateNewRequest: response[\"canCreateNewRequest\"],\r\n\t\t\t\t\t\tshowInReviewMessage: false,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.setState({ myItems: [] });\r\n\t\t}\r\n\t}\r\n\r\n\tpublic render(): React.ReactElement {\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t{!this.state.showInReviewMessage && (\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{/* \r\n\t\t\t\t\t\t\t

Software provider documents

\r\n\t\t\t\t\t\t
*/}\r\n\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t

Welcome to the Straumann STL Library!

\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\tThis library was created by the Straumann Group as a service for providers of third-party planning software to download STL files of Straumann\r\n\t\t\t\t\t\t\t\tgroup implants, guided sleeves and scanbodies to include in their planning software.\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\tKindly sign in or create a new account.\r\n\t\t\t\t\t\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t
  • If you are creating a new account, you will be sent an activation confirmation email (look for an email from app_azure@straumann.com)
  • \r\n\t\t\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t\t\t\tOnce you have confirmed your account creation, you will be instructed to request access by providing your contact details and downloading,\r\n\t\t\t\t\t\t\t\t\t\tcompleting, signing and then uploading the mandatory legal agreement form\r\n\t\t\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t\t\t\tYou will be notified by email once your request has been approved, after which you can freely download all required all available STL files.\r\n\t\t\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{!this.state.isLoggedIn ? (\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t
Please sign in to be able to create access request
\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\t{this.state.canCreateNewRequest && (\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.props.history.push(PageURL.AskAccess);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t)}\r\n\t\t\t\t{this.state.showInReviewMessage && (\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tYour request is currently in review state\r\n\t\t\t\t\t\r\n\t\t\t\t)}\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n","import { IStyle } from \"office-ui-fabric-react\";\r\nimport { IAccessRequest } from \"./IAccessRequest\";\r\nimport { IAskAccess } from \"./IAskAccess\";\r\n\r\nexport const AccessRequestSchema: IAskAccess = {\r\n\tName: {\r\n\t\tvalue: \"\",\r\n\t\trequired: true,\r\n\t\tvalid: true,\r\n\t},\r\n\tId: {\r\n\t\tvalue: null,\r\n\t\trequired: false,\r\n\t\tvalid: true,\r\n\t},\r\n\tAccessRequestId: {\r\n\t\tvalue: null,\r\n\t\trequired: false,\r\n\t\tvalid: true,\r\n\t},\r\n\tEMail: {\r\n\t\tvalue: \"\",\r\n\t\trequired: true,\r\n\t\tvalid: true,\r\n\t},\r\n\tCompany: {\r\n\t\tvalue: \"\",\r\n\t\trequired: true,\r\n\t\tvalid: true,\r\n\t},\r\n\tReason: {\r\n\t\tvalue: \"\",\r\n\t\trequired: true,\r\n\t\tvalid: true,\r\n\t},\r\n\tIsAgreed: {\r\n\t\tvalue: \"No\",\r\n\t\trequired: true,\r\n\t\tvalid: true,\r\n\t},\r\n};\r\n\r\nexport const errorLabelStyles: IStyle = {\r\n\tfontFamily: \"Segoe UI, Segoe UI Web (West European), Segoe UI, -apple-system, BlinkMacSystemFont, Roboto, Helvetica Neue, sans-serif\",\r\n\tfontSize: \"12px\",\r\n\tfontWeight: 400,\r\n\tcolor: \"rgb(164, 38, 44)\",\r\n\tmargin: \"0px\",\r\n\tpaddingTop: \"5px\",\r\n\tdisplay: \"flex\",\r\n\talignItems: \"center\",\r\n};\r\n","import * as React from \"react\";\r\nimport { Checkbox, css, TextField, Stack, PrimaryButton, Label } from \"office-ui-fabric-react\";\r\nimport \"./../../Styles/Access.scss\";\r\nimport { errorLabelStyles } from \"../../Models/Constant\";\r\nimport { IAskAccess } from \"../../Models/IAskAccess\";\r\n\r\ninterface IRequesterData {\r\n\tdata: IAskAccess;\r\n\tonTextFieldChange: (fieldName: string, value: any) => void;\r\n\tonCheckBoxChange: (fieldName: string, checked: boolean) => void;\r\n\treadonly: boolean;\r\n}\r\n\r\nexport const RequesterData = (props: IRequesterData) => {\r\n\tconst { data, onTextFieldChange, onCheckBoxChange, readonly } = props;\r\n\treturn (\r\n\t\t<>\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t onTextFieldChange(\"Company\", v)}\r\n\t\t\t\t\t\tvalue={data?.Company ? data.Company.value : \"\"}\r\n\t\t\t\t\t\terrorMessage={data?.Company.valid ? null : \"Company is required\"}\r\n\t\t\t\t\t\tdisabled={readonly}\r\n\t\t\t\t\t/>\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t onTextFieldChange(\"Reason\", v)}\r\n\t\t\t\t\t\tvalue={data?.Reason ? data.Reason.value : \"\"}\r\n\t\t\t\t\t\terrorMessage={data?.Reason.valid ? null : \"Reason is required\"}\r\n\t\t\t\t\t\tdisabled={readonly}\r\n\t\t\t\t\t/>\r\n\t\t\t\t
\r\n\t\t\t
\r\n\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t onCheckBoxChange(\"IsAgreed\", v)}\r\n\t\t\t\t\t\tstyles={data?.IsAgreed.valid ? null : { checkbox: { borderColor: \"rgb(164, 38, 44)\" } }}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t{!data?.IsAgreed.valid && (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tPlease click on \"I agree...\"\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\r\n\t);\r\n};\r\n","import * as React from \"react\";\r\nimport { css, PrimaryButton, Label } from \"office-ui-fabric-react\";\r\nimport \"./../../Styles/Access.scss\";\r\nimport ReCAPTCHA from \"react-google-recaptcha\";\r\nimport { errorLabelStyles } from \"../../Models/Constant\";\r\n\r\ninterface ICaptchaAndSubmitActionProps {\r\n\tisCaptchaValid: boolean;\r\n\tonRecaptchaToken: (token: string) => void;\r\n\tonButtonClicked: (event: any) => void;\r\n\tbuttonTitle: string;\r\n\tisSubmitProcessing: boolean;\r\n\trefReCaptchaRegister: any;\r\n}\r\n\r\nexport const CaptchaAndSubmitAction = (props: ICaptchaAndSubmitActionProps) => {\r\n\tconst { onRecaptchaToken, isCaptchaValid, onButtonClicked, isSubmitProcessing, refReCaptchaRegister, buttonTitle } = props;\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t {\r\n\t\t\t\t\t\tonRecaptchaToken(token);\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tref={refReCaptchaRegister}\r\n\t\t\t\t\tonExpired={() => onRecaptchaToken(\"\")}\r\n\t\t\t\t\tonErrored={() => onRecaptchaToken(\"\")}\r\n\t\t\t\t/>\r\n\t\t\t\t{!isCaptchaValid && (\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tPlease click on \"I'm not a robot\"\r\n\t\t\t\t\t\r\n\t\t\t\t)}\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n};\r\n","import * as React from \"react\";\r\nimport { css, Stack, Dialog, DialogType, Spinner, SpinnerSize } from \"office-ui-fabric-react\";\r\nimport { IUserAccount } from \"../LoginComponent/LoginComponent\";\r\nimport { IAccessRequest } from \"../../Models/IAccessRequest\";\r\nimport \"./../../Styles/Access.scss\";\r\n\r\nimport ReCAPTCHA from \"react-google-recaptcha\";\r\n\r\nimport { cloneDeep } from \"lodash\";\r\nimport { AccessRequestSchema } from \"../../Models/Constant\";\r\nimport { IDataProvider } from \"../../dataprovider/IDataProvider\";\r\nimport { IAskAccess } from \"../../Models/IAskAccess\";\r\nimport { RequesterData } from \"../RequesterData/RequesterData\";\r\nimport { CaptchaAndSubmitAction } from \"../RequestCaptchaAndSubmitAction/RequestCaptchaAndSubmitAction\";\r\nimport { PageURL } from \"../../App\";\r\nexport interface IAskAccessProps {\r\n\tlocation: Location;\r\n\thistory: any;\r\n\tstepSizeClass: string;\r\n\tisLoggedIn: boolean;\r\n\tdataProvider: IDataProvider;\r\n\tcurrentUser?: IUserAccount;\r\n}\r\n\r\nexport interface IAskAccessState {\r\n\tisLoggedIn: boolean;\r\n\tdata: any;\r\n}\r\n\r\nexport const AskAccess = (props: IAskAccessProps) => {\r\n\tconst [data, setData] = React.useState(AccessRequestSchema);\r\n\tconst [reCaptchaToken, setReCaptchaToken] = React.useState(\"\");\r\n\tconst [isCaptchaValid, setIsCaptchaValid] = React.useState(true);\r\n\tconst [isProcessing, setIsProcessing] = React.useState(false);\r\n\tconst [canCreateNewRequest, setCanCreateNewRequest] = React.useState(false);\r\n\tconst [showInReviewMsg, setShowInReviewMsg] = React.useState(false);\r\n\tconst refReCaptchaRegister = React.createRef();\r\n\tconst [showSpinner, setShowSpinner] = React.useState(false);\r\n\tconst [showInSubmissionMessage, setShowInSubmissionMessage] = React.useState(false);\r\n\tReact.useEffect(() => {\r\n\t\t(async () => {\r\n\t\t\tconst dataClone: IAskAccess = cloneDeep(data);\r\n\t\t\tconst firstName = props.currentUser.firstName || \"\";\r\n\t\t\tconst lastName = props.currentUser.lastName || \"\";\r\n\t\t\tdataClone.Name.value = firstName + \" \" + lastName;\r\n\t\t\tdataClone.EMail.value = props.currentUser.email || \"\";\r\n\t\t\tlet canCreateNewRequest = false;\r\n\t\t\tlet showInReviewMsg = false;\r\n\t\t\tlet currentRequestStatus = \"\";\r\n\t\t\tconst response: any = await props.dataProvider.getUserData(props.currentUser.userId);\r\n\r\n\t\t\tif (response) {\r\n\t\t\t\tcanCreateNewRequest = response[\"canCreateNewRequest\"] ? response[\"canCreateNewRequest\"] : false;\r\n\t\t\t\tcurrentRequestStatus = response[\"currentRequestStatus\"] ? response[\"currentRequestStatus\"] : \"\";\r\n\t\t\t}\r\n\r\n\t\t\tif (currentRequestStatus == \"AccessApproved\") {\r\n\t\t\t\tprops.history.push(PageURL.Download);\r\n\t\t\t}\r\n\r\n\t\t\tif (!canCreateNewRequest && currentRequestStatus == \"DocumentSubmitted\") {\r\n\t\t\t\tshowInReviewMsg = true;\r\n\t\t\t}\r\n\t\t\tif (!canCreateNewRequest && currentRequestStatus == \"AskForAccess\") {\r\n\t\t\t\tprops.history.push(PageURL.SubmitAgreement + \"/\" + props.currentUser.userId);\r\n\t\t\t}\r\n\t\t\tsetData(dataClone);\r\n\t\t\tsetCanCreateNewRequest(canCreateNewRequest);\r\n\t\t\tsetShowInReviewMsg(showInReviewMsg);\r\n\t\t})();\r\n\t}, []);\r\n\r\n\tconst handleTextFieldChange = (fieldName: string, value: string) => {\r\n\t\tconst dataClone: any = cloneDeep(data);\r\n\t\tdataClone[fieldName].value = value;\r\n\t\tsetData(dataClone);\r\n\t};\r\n\r\n\tconst handleCheckBoxChange = (fieldName: string, value: boolean) => {\r\n\t\tconst dataClone: any = cloneDeep(data);\r\n\t\tif (value) {\r\n\t\t\tdataClone[fieldName].value = \"Yes\";\r\n\t\t} else {\r\n\t\t\tdataClone[fieldName].value = \"\";\r\n\t\t}\r\n\t\tsetData(dataClone);\r\n\t};\r\n\r\n\tconst validateFormFields = () => {\r\n\t\tsetIsProcessing(true);\r\n\r\n\t\tlet formValid = true;\r\n\t\tlet captchaValid = true;\r\n\t\tconst dataClone: any = cloneDeep(data);\r\n\t\tObject.keys(dataClone).forEach((field) => {\r\n\t\t\tif (dataClone[field].required) {\r\n\t\t\t\tif (dataClone[field].hasOwnProperty(\"value\") && dataClone[field].value != null && dataClone[field].value != \"\") {\r\n\t\t\t\t\tdataClone[field].valid = true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdataClone[field].valid = false;\r\n\t\t\t\t\tformValid = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\tif (reCaptchaToken == \"\") {\r\n\t\t\tcaptchaValid = false;\r\n\t\t\tformValid = false;\r\n\t\t}\r\n\t\tsetData(dataClone);\r\n\t\tif (!formValid) {\r\n\t\t\tsetIsProcessing(false);\r\n\t\t}\r\n\r\n\t\tsetIsCaptchaValid(captchaValid);\r\n\t\treturn formValid;\r\n\t};\r\n\r\n\tconst onRegisterBtnCLicked = () => {\r\n\t\tsetShowSpinner(true);\r\n\t\tconst isFormValid = validateFormFields();\r\n\t\tif (isFormValid) {\r\n\t\t\tconst accessRequestData: Partial = {};\r\n\t\t\tconst dataClone: IAskAccess = cloneDeep(data);\r\n\t\t\tObject.keys(dataClone).forEach((field) => {\r\n\t\t\t\tif (field != \"FirstName\" && field != \"LastName\") {\r\n\t\t\t\t\t(accessRequestData as any)[field] = (dataClone as any)[field].value;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\taccessRequestData.Name = dataClone.Name.value;\r\n\t\t\taccessRequestData.UserId = props.currentUser.userId;\r\n\t\t\tprops.dataProvider\r\n\t\t\t\t.createAccessRequest(accessRequestData)\r\n\t\t\t\t.then(async (result: any) => {\r\n\t\t\t\t\tsetShowSpinner(false);\r\n\t\t\t\t\tsetCanCreateNewRequest(false);\r\n\t\t\t\t\tsetShowInReviewMsg(false);\r\n\t\t\t\t\tsetShowInSubmissionMessage(true);\r\n\t\t\t\t})\r\n\t\t\t\t.catch((error) => {\r\n\t\t\t\t\tconsole.log(error);\r\n\t\t\t\t\tsetCanCreateNewRequest(true);\r\n\t\t\t\t\tsetShowInReviewMsg(false);\r\n\t\t\t\t\tsetShowSpinner(false);\r\n\t\t\t\t});\r\n\t\t} else {\r\n\t\t\tsetShowSpinner(false);\r\n\t\t\tsetCanCreateNewRequest(true);\r\n\t\t}\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{canCreateNewRequest && (\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t)}\r\n\t\t\t<>\r\n\t\t\t\t{showInReviewMsg && (\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
Your current request is in review state
\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\t\t\t\r\n\t\t\t<>\r\n\t\t\t\t{showInSubmissionMessage && (\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\tRequest submitted successfully. It can take a moment untill you receive the email with the agreement attached.\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n","export default class HttpService {\r\n\tpublic static async get(url: string, body?: any, headers?: any): Promise {\r\n\t\treturn new Promise(async (resolve, reject) => {\r\n\t\t\tlet response: Response;\r\n\r\n\t\t\tlet baseHeaders = {\r\n\t\t\t\tAccept: \"application/json\",\r\n\t\t\t};\r\n\r\n\t\t\ttry {\r\n\t\t\t\t// add bearer if present\r\n\t\t\t\tif (window.sessionStorage.authToken) {\r\n\t\t\t\t\tlet authToken = JSON.parse(window.sessionStorage.authToken);\r\n\t\t\t\t\t(baseHeaders)[\"Authorization\"] = `Bearer ${authToken.token}`;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (headers) {\r\n\t\t\t\t\tbaseHeaders = { ...baseHeaders, ...headers };\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (body)\r\n\t\t\t\t\tresponse = await fetch(url, {\r\n\t\t\t\t\t\tmethod: \"GET\",\r\n\t\t\t\t\t\tcache: \"no-cache\",\r\n\t\t\t\t\t\theaders: baseHeaders,\r\n\t\t\t\t\t\tbody: JSON.stringify(body),\r\n\t\t\t\t\t});\r\n\t\t\t\telse\r\n\t\t\t\t\tresponse = await fetch(url, {\r\n\t\t\t\t\t\tmethod: \"GET\",\r\n\t\t\t\t\t\tcache: \"no-cache\",\r\n\t\t\t\t\t\theaders: baseHeaders,\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\tif (response.ok)\r\n\t\t\t\t\treturn response.json().then((result) => {\r\n\t\t\t\t\t\tresolve(result);\r\n\t\t\t\t\t});\r\n\t\t\t\telse if (response.status == 401) {\r\n\t\t\t\t\twindow.sessionStorage.removeItem(\"authToken\");\r\n\t\t\t\t\twindow.sessionStorage.removeItem(\"stlUser\");\r\n\t\t\t\t\treject(\"Authentication Token Expired. Please sign in again.\");\r\n\t\t\t\t} else if (response.status == 403) {\r\n\t\t\t\t\treject(\"Unauthorized\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\treturn response\r\n\t\t\t\t\t\t\t.json()\r\n\t\t\t\t\t\t\t.then((err) => {\r\n\t\t\t\t\t\t\t\treject(`Http Get Error: ${err?.title}`);\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.catch((ierr) => {\r\n\t\t\t\t\t\t\t\tconsole.dir(ierr);\r\n\t\t\t\t\t\t\t\treject(ierr);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t} catch (ex) {\r\n\t\t\t\t\t\treject(\"Unauthorized\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} catch (ex) {\r\n\t\t\t\treject((ex).message);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tpublic static async post(url: string, body?: any, headers?: any): Promise {\r\n\t\treturn new Promise(async (resolve, reject) => {\r\n\t\t\tlet baseHeaders = {\r\n\t\t\t\tAccept: \"application/json\",\r\n\t\t\t};\r\n\t\t\tif (headers) {\r\n\t\t\t\tbaseHeaders = { ...baseHeaders, ...headers };\r\n\t\t\t}\r\n\r\n\t\t\t// only add an authorization header if it doesn't exist already\r\n\t\t\tif (!(baseHeaders)[\"Authorization\"] || (baseHeaders)[\"Authorization\"].length == 0) {\r\n\t\t\t\t// add bearer if present\r\n\t\t\t\tif (window.sessionStorage.authToken) {\r\n\t\t\t\t\tlet authToken = JSON.parse(window.sessionStorage.authToken);\r\n\t\t\t\t\t(baseHeaders)[\"Authorization\"] = `Bearer ${authToken.token}`;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlet response: Response;\r\n\t\t\ttry {\r\n\t\t\t\tif (body) {\r\n\t\t\t\t\tresponse = await fetch(url, {\r\n\t\t\t\t\t\tmethod: \"POST\",\r\n\t\t\t\t\t\tcache: \"no-cache\",\r\n\t\t\t\t\t\theaders: {\r\n\t\t\t\t\t\t\t\"Content-Type\": \"application/json\",\r\n\t\t\t\t\t\t\t...baseHeaders,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tbody: JSON.stringify(body),\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tresponse = await fetch(url, {\r\n\t\t\t\t\t\tmethod: \"POST\",\r\n\t\t\t\t\t\tcache: \"no-cache\",\r\n\t\t\t\t\t\theaders: baseHeaders,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (response.ok)\r\n\t\t\t\t\treturn response.json().then((result) => {\r\n\t\t\t\t\t\tresolve(result);\r\n\t\t\t\t\t});\r\n\t\t\t\telse if (response.status == 401) {\r\n\t\t\t\t\twindow.sessionStorage.removeItem(\"authToken\");\r\n\t\t\t\t\twindow.sessionStorage.removeItem(\"stlUser\");\r\n\t\t\t\t\treject(\"Authentication Token Expired. Please sign in again.\");\r\n\t\t\t\t} else\r\n\t\t\t\t\treturn response.json().then((err) => {\r\n\t\t\t\t\t\tlet errorMessage = err;\r\n\t\t\t\t\t\tif (err?.detail) {\r\n\t\t\t\t\t\t\terrorMessage = err?.detail;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treject(errorMessage);\r\n\t\t\t\t\t});\r\n\t\t\t} catch (err) {\r\n\t\t\t\tlet ex = err as any;\r\n\t\t\t\tif (err && ex.message && ex.message.indexOf(\"Unauthorized\") !== -1) {\r\n\t\t\t\t\twindow.sessionStorage.removeItem(\"authToken\");\r\n\t\t\t\t\twindow.sessionStorage.removeItem(\"stlUser\");\r\n\t\t\t\t\treject(\"Authentication Token Expired. Please sign in again.\");\r\n\t\t\t\t} else {\r\n\t\t\t\t\treject(ex.message);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n","export class Common{\r\n public static removeUrlParam(key:string):void {\r\n let url = window.location.href;\r\n var rtn = url.split(\"?\")[0],\r\n param,\r\n params_arr = [],\r\n queryString = (url.indexOf(\"?\") !== -1) ? url.split(\"?\")[1] : \"\";\r\n if (queryString !== \"\") {\r\n params_arr = queryString.split(\"&\");\r\n for (var i = params_arr.length - 1; i >= 0; i -= 1) {\r\n param = params_arr[i].split(\"=\")[0];\r\n if (param === key) {\r\n params_arr.splice(i, 1);\r\n }\r\n }\r\n rtn = rtn + \"?\" + params_arr.join(\"&\");\r\n }\r\n\r\n if(rtn.endsWith(\"?\")){\r\n rtn = rtn.substr(0, rtn.length-1);\r\n }\r\n\r\n window.history.pushState(null, null, rtn); //remove request id in url\r\n }\r\n\r\n public static changeUrlWithoutReload(newUrl: string):void{\r\n window.history.pushState(null, null, newUrl);\r\n }\r\n\r\n public static getCurrentServerUrl(){\r\n let port = window.location.port && window.location.port!=\"0\" && window.location.port!=\"80\" && window.location.port!=\"443\" ? `:${window.location.port}` : \"\";\r\n return `${window.location.protocol}//${window.location.hostname}${port}`.toLowerCase();\r\n }\r\n}","import { IDataProvider } from \"./IDataProvider\";\r\nimport HttpService from \"./HttpService\";\r\nimport { IAuthenticatedUser, IUserAccount } from \"../components/LoginComponent/LoginComponent\";\r\nimport { Common } from \"../components/LoginComponent/Common\";\r\nimport { IAccessRequest } from \"../Models/IAccessRequest\";\r\nexport default class DataProvider implements IDataProvider {\r\n\tpublic apiEndpointSP = `/api/SPInterface`;\r\n\tpublic userAccountEndpointSP = `/api/UserAccountSPInterface`;\r\n\tpublic async getAccessRequest(userId: string): Promise {\r\n\t\tconst accessRequest = await HttpService.post(`${this.apiEndpointSP}/GetAccessRequest`, { userId: userId });\r\n\t\treturn accessRequest;\r\n\t}\r\n\tpublic async getAccessRequestForAgreementSubmission(userId: string): Promise {\r\n\t\tconst accessRequest = await HttpService.post(`${this.apiEndpointSP}/GetAccessRequestForAgreementSubmission`, { userId: userId });\r\n\t\treturn accessRequest;\r\n\t}\r\n\r\n\tpublic async createAccessRequest(accessRequest: IAccessRequest): Promise {\r\n\t\tconst response = await HttpService.post(`${this.apiEndpointSP}/CreateAccessRequest`, accessRequest);\r\n\t\treturn response;\r\n\t}\r\n\r\n\tpublic async getUserData(userId: string): Promise {\r\n\t\tconst response = await HttpService.get(`${this.apiEndpointSP}/GetUserData/${encodeURIComponent(userId)}`);\r\n\t\treturn response;\r\n\t}\r\n\r\n\tpublic async getUserDataForAgreementSubmission(userId: string): Promise {\r\n\t\tconst response = await HttpService.get(`${this.apiEndpointSP}/getUserDataForAgreementSubmission/${encodeURIComponent(userId)}`);\r\n\t\treturn response;\r\n\t}\r\n\r\n\tpublic getBrands(): Promise {\r\n\t\ttry {\r\n\t\t\treturn HttpService.get(`${this.apiEndpointSP}/Brands`);\r\n\t\t} catch (ex) {\r\n\t\t\treturn Promise.reject((ex).message);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic getFilters(): Promise {\r\n\t\ttry {\r\n\t\t\treturn HttpService.get(`${this.apiEndpointSP}/Filters`);\r\n\t\t} catch (ex) {\r\n\t\t\treturn Promise.reject((ex).message);\r\n\t\t}\r\n\t}\r\n\tpublic getProducts(brand: string): Promise {\r\n\t\ttry {\r\n\t\t\treturn HttpService.post(`${this.apiEndpointSP}/Products`, brand);\r\n\t\t} catch (ex) {\r\n\t\t\treturn Promise.reject((ex).message);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic getTypes(product: string): Promise {\r\n\t\ttry {\r\n\t\t\treturn HttpService.post(`${this.apiEndpointSP}/Types`, product);\r\n\t\t} catch (ex) {\r\n\t\t\treturn Promise.reject((ex).message);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic getSTLFilesWithoutAnyFilters(query: string): Promise {\r\n\t\ttry {\r\n\t\t\treturn HttpService.post(`${this.apiEndpointSP}/STLFilesWithoutFilter`, query);\r\n\t\t} catch (ex) {\r\n\t\t\treturn Promise.reject((ex).message);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic updateFilesDownloadedReportList(filesDownloaded: string[], userId: string): Promise {\r\n\t\tconst formData = {\r\n\t\t\tfilesDownloaded: filesDownloaded.join(\",\"),\r\n\t\t\tuserId: userId,\r\n\t\t};\r\n\t\ttry {\r\n\t\t\treturn HttpService.post(`${this.apiEndpointSP}/UpdateDownloadReport`, formData);\r\n\t\t} catch (ex) {\r\n\t\t\treturn Promise.reject((ex).message);\r\n\t\t}\r\n\t}\r\n\tpublic getAlreadyDownloadedFiles(userId: string): Promise {\r\n\t\ttry {\r\n\t\t\treturn HttpService.post(`${this.apiEndpointSP}/AlreadDownloadedFiles`, userId);\r\n\t\t} catch (ex) {\r\n\t\t\treturn Promise.reject((ex).message);\r\n\t\t}\r\n\t}\r\n\tpublic downloadFile(uniqueId: any): Promise {\r\n\t\ttry {\r\n\t\t\treturn HttpService.get(`${this.apiEndpointSP}/DownloadFile/${encodeURIComponent(uniqueId)}`);\r\n\t\t} catch (ex) {\r\n\t\t\treturn Promise.reject((ex).message);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic getSTLFilesWithFilters(camlQuery: string): Promise {\r\n\t\ttry {\r\n\t\t\treturn HttpService.post(`${this.apiEndpointSP}/STLFilesWithFilter`, camlQuery);\r\n\t\t} catch (ex) {\r\n\t\t\treturn Promise.reject((ex).message);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic logErrorInConsole(errorArea: string, errorObj: any) {\r\n\t\tthis.logError(errorObj.message);\r\n\t\tconsole.log(`Error message ${errorArea}: `, errorObj.message);\r\n\t\tconsole.log(`Error Stack Trace ${errorArea}: `, errorObj.stack);\r\n\t}\r\n\r\n\tprivate logError(msg: any) {\r\n\t\tif (console) {\r\n\t\t\tconsole.log(`%cERROR:`, \"color:red;font-weight:bold;font-size:16px\");\r\n\t\t\tconsole.log(msg);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic extractErrorMessageFromErrorObject(error: any): string {\r\n\t\tlet errorMessage = error.message ? (error.message as string) : error.title ? (error.title as string) : error.toString();\r\n\t\tconsole.dir(error);\r\n\t\tif (errorMessage && errorMessage.indexOf(\"::>\") >= 0) {\r\n\t\t\ttry {\r\n\t\t\t\tlet errorObj = JSON.parse(errorMessage.substring(errorMessage.indexOf(\"::>\") + 3).trim());\r\n\r\n\t\t\t\tif (errorObj[\"odata.error\"] && errorObj[\"odata.error\"].message && errorObj[\"odata.error\"].message.value)\r\n\t\t\t\t\terrorMessage = errorObj[\"odata.error\"].message.value;\r\n\t\t\t} catch (error) {\r\n\t\t\t\terrorMessage = errorMessage.substring(errorMessage.indexOf(\"::>\") + 3).trim();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn errorMessage;\r\n\t}\r\n\r\n\tpublic addParam(param: string, sourceURL: string): string {\r\n\t\tvar rtn = sourceURL.split(\"?\")[0],\r\n\t\t\tparams_arr = [],\r\n\t\t\tqueryString = sourceURL.indexOf(\"?\") !== -1 ? sourceURL.split(\"?\")[1] : \"\";\r\n\r\n\t\tif (queryString !== \"\") {\r\n\t\t\tparams_arr = queryString.split(\"&\");\r\n\t\t\tparams_arr.push(param);\r\n\t\t\tif (params_arr.length > 0) rtn = rtn + \"?\" + params_arr.join(\"&\");\r\n\t\t} else {\r\n\t\t\trtn = rtn + \"?\" + param;\r\n\t\t}\r\n\t\treturn rtn;\r\n\t}\r\n\r\n\tpublic ensureExternalUserAccount(user: IUserAccount, token: string, isRSMToken: boolean): Promise {\r\n\t\treturn HttpService.post(`${this.userAccountEndpointSP}/EnsureExternalUserAccounts`, { Account: user, Token: token, IsRSMToken: isRSMToken });\r\n\t}\r\n\tpublic registerInternalUserAccount(user: IUserAccount, reCaptchaToken: string): Promise {\r\n\t\treturn HttpService.post(`${this.userAccountEndpointSP}/RegisterUserAccount`, {\r\n\t\t\tAccount: user,\r\n\t\t\tBaseUrl: Common.getCurrentServerUrl(),\r\n\t\t\treCaptchaToken: reCaptchaToken,\r\n\t\t});\r\n\t}\r\n\tpublic loginInternalUserAccount(user: IUserAccount, reCaptchaToken: string): Promise {\r\n\t\treturn HttpService.post(`${this.userAccountEndpointSP}/CustomUserLogin`, { Account: user, reCaptchaToken: reCaptchaToken });\r\n\t}\r\n\tpublic getUserByActivateParam(activationGuid: string, a: boolean): Promise {\r\n\t\treturn HttpService.post(`${this.userAccountEndpointSP}/GetUserByActivateParam`, { activateParameter: activationGuid, activate: a });\r\n\t}\r\n\tpublic resetPWByActivateParam(activationGuid: string, pw: string): Promise {\r\n\t\treturn HttpService.post(`${this.userAccountEndpointSP}/ResetPWByActivateParam`, { activateParameter: activationGuid, password: pw });\r\n\t}\r\n\tpublic getNewActivationCode(email: string, baseUrl: string): Promise {\r\n\t\treturn HttpService.post(`${this.userAccountEndpointSP}/GetActivationCode`, { email: email, baseUrl: baseUrl });\r\n\t}\r\n\tpublic resendActivationCode(email: string, baseUrl: string): Promise {\r\n\t\treturn HttpService.post(`${this.userAccountEndpointSP}/ResendActivationCode`, { email: email, baseUrl: baseUrl });\r\n\t}\r\n\tpublic documentUpload(Id: string, base64File: string, applicantName: string): Promise {\r\n\t\treturn HttpService.post(`${this.apiEndpointSP}/UploadFileByBase64`, { id: Id, base64File: base64File, applicantName: applicantName });\r\n\t}\r\n\r\n\tpublic submitAgreement(accessRequest: IAccessRequest, base64File: string): Promise {\r\n\t\treturn HttpService.post(`${this.apiEndpointSP}/SubmitAgreement`, {\r\n\t\t\tid: accessRequest.Id,\r\n\t\t\taccessRequestId: accessRequest.AccessRequestId,\r\n\t\t\tbase64File: base64File,\r\n\t\t\tapplicantName: accessRequest.Name,\r\n\t\t\tuserId: accessRequest.UserId,\r\n\t\t\taccessRequest: accessRequest,\r\n\t\t});\r\n\t}\r\n}\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { useMsal } from \"@azure/msal-react\";\r\n//import { useIsAuthenticated } from \"@azure/msal-react\";\r\nimport Button from \"react-bootstrap/Button\";\r\nimport { AuthenticatedTemplate, UnauthenticatedTemplate } from \"@azure/msal-react\";\r\nimport { AccountType, IAuthenticatedUser, IUserAccount } from \"./LoginComponent\";\r\nimport { Redirect } from \"react-router\";\r\nimport { Dialog, DialogType, Spinner, SpinnerSize } from \"office-ui-fabric-react\";\r\n\r\n// Add scopes here for ID token to be used at Microsoft identity platform endpoints.\r\nexport const loginRequest = {\r\n\tscopes: [\"User.Read\"],\r\n\t//prompt: 'select_account',\r\n};\r\n\r\nfunction parseMicrosoftUser(idToken: any): IUserAccount {\r\n\treturn {\r\n\t\tfirstName: idToken.idTokenClaims?.given_name,\r\n\t\tlastName: idToken.idTokenClaims?.family_name,\r\n\t\temail: idToken.idTokenClaims?.email,\r\n\t\taccountType: AccountType.Microsoft,\r\n\t\tuserId: null,\r\n\t\tactivateGuid: null,\r\n\t\tid: null,\r\n\t\tpassword: null,\r\n\t} as IUserAccount;\r\n}\r\n\r\nfunction handleLogin(\r\n\tinstance: any,\r\n\tcallback: (userInformation: IUserAccount, token: string) => Promise,\r\n\tsetAuthenticated: (a: boolean) => void,\r\n\tshowError: (e: string) => void,\r\n\tsetAuthStatus: (loggedIn: boolean, user: IAuthenticatedUser) => Promise,\r\n\tsetRedirect: (a: boolean) => void,\r\n\tsetShowWaitingSpinner: (a: boolean) => void\r\n) {\r\n\treturn instance\r\n\t\t.loginPopup(loginRequest)\r\n\t\t.then((result: any) => {\r\n\t\t\tconsole.log(\"MICROSOFT ACCOUNT\", result);\r\n\r\n\t\t\tlet user = parseMicrosoftUser(result?.account);\r\n\r\n\t\t\tsetShowWaitingSpinner(true);\r\n\r\n\t\t\tcallback(user, result.idToken)\r\n\t\t\t\t.then((spUser: IAuthenticatedUser) => {\r\n\t\t\t\t\tif (spUser.isNewUser) {\r\n\t\t\t\t\t\twindow.sessionStorage.rsmConsentTarget = JSON.stringify(spUser);\r\n\r\n\t\t\t\t\t\tsetShowWaitingSpinner(false);\r\n\r\n\t\t\t\t\t\t// redirect user to consent page first\r\n\t\t\t\t\t\tsetRedirect(true);\r\n\r\n\t\t\t\t\t\t// for now, don't sign user in yet\r\n\t\t\t\t\t\twindow.sessionStorage.removeItem(\"authToken\");\r\n\t\t\t\t\t\twindow.sessionStorage.removeItem(\"stlUser\");\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsetShowWaitingSpinner(false);\r\n\t\t\t\t\t\tsetAuthStatus(true, spUser);\r\n\t\t\t\t\t\tsetAuthenticated(true);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tsetShowWaitingSpinner(false);\r\n\r\n\t\t\t\t\tconsole.log(\"EnsureUser: \" + err);\r\n\t\t\t\t\tinstance.logoutRedirect({\r\n\t\t\t\t\t\tonRedirectNavigate: (url: string) => {\r\n\t\t\t\t\t\t\t// Return false if you would like to stop navigation after local logout\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t});\r\n\t\t\t\t\tsetAuthStatus(false, null);\r\n\t\t\t\t\tsetAuthenticated(false);\r\n\r\n\t\t\t\t\twindow.sessionStorage.removeItem(\"authToken\");\r\n\t\t\t\t\twindow.sessionStorage.removeItem(\"stlUser\");\r\n\r\n\t\t\t\t\tshowError(\"Microsoft\");\r\n\t\t\t\t});\r\n\t\t})\r\n\t\t.catch((err: string) => {\r\n\t\t\tconsole.error(err);\r\n\t\t});\r\n}\r\n\r\nfunction handleLogout(instance: any, setAuthenticated: (a: boolean) => void, setAuthStatus: (loggedIn: boolean, user: IAuthenticatedUser) => Promise) {\r\n\tinstance\r\n\t\t.logoutPopup()\r\n\t\t.then((result: any) => {\r\n\t\t\tsetAuthenticated(false);\r\n\t\t\tsetAuthStatus(false, null);\r\n\t\t})\r\n\t\t.catch((err: string) => {\r\n\t\t\tconsole.error(err);\r\n\t\t});\r\n}\r\n\r\nexport interface IMicrosoftComponentProps {\r\n\tcurrentUser: IAuthenticatedUser;\r\n\tsignedIn: boolean;\r\n\tcallback: (userInformation: IUserAccount, token: string, isRSMToken: boolean) => Promise;\r\n\tshowError: (error: string) => void;\r\n\tsetAuthStatus: (loggedIn: boolean, user: IAuthenticatedUser) => Promise;\r\n}\r\n\r\nexport const MicrosoftComponent = (props: IMicrosoftComponentProps) => {\r\n\tconst { instance, accounts } = useMsal();\r\n\r\n\t//console.log(\"MS Accounts\", accounts);\r\n\r\n\tconst [authenticated, setAuthenticated] = useState(false);\r\n\tconst [redirect, setRedirect] = useState(false);\r\n\tconst [showWaitingSpinner, setShowWaitingSpinner] = useState(false);\r\n\r\n\tconst [userName, setUserName] = useState(props.currentUser ? `${props.currentUser.firstName} ${props.currentUser.lastName}` : \"\");\r\n\r\n\tuseEffect(() => {\r\n\t\tif (props.signedIn) {\r\n\t\t\tsetAuthenticated(true);\r\n\t\t} else {\r\n\t\t\tsetAuthenticated(false);\r\n\t\t}\r\n\r\n\t\tif (props.currentUser) {\r\n\t\t\tsetUserName(props.currentUser ? `${props.currentUser.firstName} ${props.currentUser.lastName}` : \"\");\r\n\t\t}\r\n\r\n\t\t//if (accounts.length > 0) {\r\n\t\t// console.log(\"MSAL Accounts\", accounts);\r\n\r\n\t\t// let user = parseUser(accounts[0]);\r\n\t\t// if (!props.currentUser || props.currentUser.email !== user.email) {\r\n\t\t// props.setAuthStatus(true, user);\r\n\t\t// }\r\n\t\t//} else {\r\n\t\t// if (props.currentUser) {\r\n\t\t// props.setAuthStatus(false, null);\r\n\t\t// }\r\n\t\t//}\r\n\t});\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{redirect && }\r\n\t\t\t{authenticated ? (\r\n\t\t\t\t<>\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\tSigned in as:\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t{`${userName}`}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t handleLogout(instance, setAuthenticated, props.setAuthStatus)}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tLogout\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t) : (\r\n\t\t\t\t\r\n\t\t\t\t\t\thandleLogin(\r\n\t\t\t\t\t\t\tinstance,\r\n\t\t\t\t\t\t\t(user: IUserAccount, token: string) => {\r\n\t\t\t\t\t\t\t\treturn props.callback(user, token, false);\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\tsetAuthenticated,\r\n\t\t\t\t\t\t\tprops.showError,\r\n\t\t\t\t\t\t\tprops.setAuthStatus,\r\n\t\t\t\t\t\t\tsetRedirect,\r\n\t\t\t\t\t\t\tsetShowWaitingSpinner\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t}\r\n\t\t\t\t>\r\n\t\t\t\t\tSign in with Microsoft\r\n\t\t\t\t\r\n\t\t\t)}\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n","import React, { Component } from \"react\";\r\nimport { GoogleLogin, GoogleLogout, useGoogleLogout } from \"react-google-login\";\r\nimport { AccountType, IAuthenticatedUser, IUserAccount } from \"./LoginComponent\";\r\nimport Button from \"react-bootstrap/Button\";\r\nimport \"./GoogleComponent.css\";\r\nimport { Redirect } from \"react-router\";\r\n\r\nimport { loadGapiInsideDOM, loadAuth2 } from \"gapi-script\";\r\nimport { Dialog, DialogType, Label, Spinner, SpinnerSize } from \"office-ui-fabric-react\";\r\n\r\nconst CLIENT_ID = \"313235099716-c5ttur4f2v0o001gd3vngd55kmhirihm.apps.googleusercontent.com\";\r\n\r\nexport interface IGoogleLoginComponentProps {\r\n\tcurrentUser: IAuthenticatedUser;\r\n\t//signedIn: boolean;\r\n\tcallback: (userInformation: IUserAccount, token: string, isRSMToken: boolean) => Promise;\r\n\tshowError: (error: string) => void;\r\n\tsetAuthStatus: (loggedIn: boolean, user: IAuthenticatedUser) => Promise;\r\n}\r\n\r\nexport interface IGoogleLoginComponentState {\r\n\tredirectConsent: boolean;\r\n\tshowWaitingSpinner: boolean;\r\n\tshowGoogleError: boolean;\r\n\tgoogleErrorMessage: string;\r\n}\r\n\r\nexport default class GoogleLoginComponent extends Component {\r\n\tconstructor(props: IGoogleLoginComponentProps) {\r\n\t\tsuper(props);\r\n\r\n\t\tconsole.log(\"GAPI\", (window as any).gapi);\r\n\t\tthis.state = {\r\n\t\t\tredirectConsent: false,\r\n\t\t\tshowWaitingSpinner: false,\r\n\t\t\tshowGoogleError: false,\r\n\t\t\tgoogleErrorMessage: null,\r\n\t\t};\r\n\t}\r\n\r\n\t// Success Handler\r\n\tprivate responseGoogleSuccess = (response: any) => {\r\n\t\tconsole.log(\"GOOGLE RESPONSE\", response);\r\n\t\tlet user: IUserAccount = {\r\n\t\t\tfirstName: response.profileObj.givenName,\r\n\t\t\tlastName: response.profileObj.familyName,\r\n\t\t\temail: response.profileObj.email,\r\n\t\t\taccountType: AccountType.Google,\r\n\t\t\tname: response.profileObj.name,\r\n\t\t\tuserId: null,\r\n\t\t\tactivateGuid: null,\r\n\t\t\tid: null,\r\n\t\t\tpassword: null,\r\n\t\t} as IUserAccount;\r\n\r\n\t\tthis.setState({ showWaitingSpinner: true });\r\n\r\n\t\tif (!this.props.currentUser || this.props.currentUser.email !== user.email) {\r\n\t\t\tthis.props\r\n\t\t\t\t.callback(user, response.tokenId, false)\r\n\t\t\t\t.then((spUser) => {\r\n\t\t\t\t\tif (spUser.isNewUser) {\r\n\t\t\t\t\t\t// keep user information for consent screen\r\n\t\t\t\t\t\twindow.sessionStorage.rsmConsentTarget = JSON.stringify(spUser);\r\n\r\n\t\t\t\t\t\t// redirect user to consent page first\r\n\t\t\t\t\t\tthis.setState({ showWaitingSpinner: false, redirectConsent: true });\r\n\r\n\t\t\t\t\t\t// for now, don't sign user in yet\r\n\t\t\t\t\t\twindow.sessionStorage.removeItem(\"authToken\");\r\n\t\t\t\t\t\twindow.sessionStorage.removeItem(\"stlUser\");\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// directly authenticate user\r\n\t\t\t\t\t\tthis.setState({ showWaitingSpinner: false });\r\n\t\t\t\t\t\tthis.props.setAuthStatus(true, spUser);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.catch(() => {\r\n\t\t\t\t\tthis.setState({ showWaitingSpinner: false });\r\n\t\t\t\t\tthis.props.showError(\"Google\");\r\n\t\t\t\t\tthis.forceLogout();\r\n\t\t\t\t});\r\n\t\t}\r\n\t\t// this.setState({ currentUser: user, isLoggedIn: true }, () => {\r\n\t\t// this.props.setAuthStatus(true, user);\r\n\t\t// });\r\n\t};\r\n\r\n\t// Error Handler\r\n\tprivate responseGoogleError = (response: any) => {\r\n\t\tconsole.log(response);\r\n\t\tif (response.error == \"popup_closed_by_user\") {\r\n\t\t\tconsole.log(\"Google login cancelled by user\");\r\n\t\t} else {\r\n\t\t\tthis.setState({\r\n\t\t\t\tshowGoogleError: true,\r\n\t\t\t\tgoogleErrorMessage: `Google SignIn error: ${response.error}`,\r\n\t\t\t});\r\n\t\t\t//alert(\"Error on Google login: \" + response.details)\r\n\t\t}\r\n\t};\r\n\r\n\t// Logout Session and Update State\r\n\tprivate logout = () => {\r\n\t\tif (this.props.currentUser) {\r\n\t\t\tthis.props.setAuthStatus(false, null);\r\n\t\t}\r\n\t};\r\n\r\n\tprivate forceLogout = () => {\r\n\t\tconsole.log(\"Forcing logout...\");\r\n\t\tloadGapiInsideDOM().then((gapi) => {\r\n\t\t\tconsole.log(\"Gapi loaded....\", gapi);\r\n\r\n\t\t\tgapi.load(\"auth2\", function () {\r\n\t\t\t\tconsole.log(\"auth2 loaded\", (window as any).gapi.auth2);\r\n\t\t\t\tgapi.auth2.getAuthInstance().then((auth2: any) => {\r\n\t\t\t\t\tauth2.signOut().then(() => {\r\n\t\t\t\t\t\tconsole.log(\"signed out.\");\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\twindow.sessionStorage.removeItem(\"authToken\");\r\n\t\twindow.sessionStorage.removeItem(\"stlUser\");\r\n\t};\r\n\r\n\tpublic render() {\r\n\t\tlet isLoggedIn = Boolean(this.props.currentUser);\r\n\t\tlet userName = this.props.currentUser ? `${this.props.currentUser.firstName} ${this.props.currentUser.lastName}` : \"\";\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{this.state.redirectConsent && }\r\n\t\t\t\t
\r\n\t\t\t\t\t{isLoggedIn ? (\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\tSigned in as:\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{userName}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t {\r\n\t\t\t\t\t\tthis.setState({ googleErrorMessage: null, showGoogleError: false });\r\n\t\t\t\t\t}}\r\n\t\t\t\t>\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n","import { IUserAccount } from \"./LoginComponent\";\r\n\r\nexport class LoginHelper {\r\n \r\n}\r\nexport class GeneralHelper {\r\n public static mandatoryValidation: string = \"this field is mandatory\";\r\n public static emailValidation: string = \"please enter a valid emailaddress\";\r\n public static confirmationPasswordInvalid: string = \"'Password' and 'Cofirm Password' must match\";\r\n public static parseError(error: any) {\r\n switch (error.status) {\r\n case 409:\r\n {\r\n //return \"A user with this emailaddress already exists\";\r\n return \r\n }\r\n case 400:\r\n case 404:\r\n default:\r\n return error.detail;\r\n\r\n }\r\n\r\n }\r\n\r\n public static replacePlaceholder(content: string, user: IUserAccount) {\r\n\r\n }\r\n\r\n public static resetPWMail: string = `

Hi {{Firstname}} {{Lastname}}

Please click on this {{resetLink}} to reset your Passwort

Best regards

`\r\n public static activateUserMail: string = `

Hi

Please click on this {{activateLink}} to activate your user.

`\r\n\r\n}","import { css, Checkbox, DefaultButton, IconButton, Label, mergeStyles, MessageBar, MessageBarType, Spinner, Stack, TextField } from \"office-ui-fabric-react\";\r\nimport * as React from \"react\";\r\nimport { IDataProvider } from \"../../dataprovider/IDataProvider\";\r\nimport { AccountType, IAuthenticatedUser, IUserAccount } from \"./LoginComponent\";\r\nimport { GeneralHelper } from \"./LoginHelper\";\r\nimport { Tabs, Tab, TabList, TabPanel } from \"react-tabs\";\r\nimport Button from \"react-bootstrap/Button\";\r\nimport \"react-tabs/style/react-tabs.css\";\r\nimport { Link } from \"react-router-dom\";\r\nimport ReCAPTCHA from \"react-google-recaptcha\";\r\nimport { Common } from \"./Common\";\r\nimport { Badge, BadgeProps } from \"react-bootstrap\";\r\n\r\nrequire(\"./LoginComponent.css\");\r\n\r\nexport interface ICustomAuthComponentProps {\r\n\tdataProvider: IDataProvider;\r\n\tsetAuthStatus: (loggin: boolean, user: IAuthenticatedUser) => Promise;\r\n\tonPanelStatusChange?: (isOpen: boolean) => void;\r\n\tcurrentUser: IAuthenticatedUser;\r\n}\r\n\r\nexport interface ICustomAuthComponentState {\r\n\tstate: \"login\" | \"registration\";\r\n\tcurrentUser: IUserAccount;\r\n\r\n\tfirstNameErrorMessage: string;\r\n\tlastNameErrorMessage: string;\r\n\temailErrorMessage: string;\r\n\tpasswordErrorMessage: string;\r\n\tconfirmPasswordErrorMessage: string;\r\n\tlegalNoticeErrorMessage: string;\r\n\tprivacyNoticeErrorMessage: string;\r\n\r\n\tpwdBadgeVariant: string;\r\n\tpwdBadgeLabel: string;\r\n\r\n\tinformationType?: MessageBarType;\r\n\tinformationMessage?: string;\r\n\tregistered: boolean;\r\n\tloggedIn: boolean;\r\n\tconfirmationPassword?: string;\r\n\r\n\tlegalNoticeChecked: boolean;\r\n\tprivacyNoticeChecked: boolean;\r\n\r\n\tisProcessing: boolean;\r\n\tshowCustomLoginPanel: boolean;\r\n\treCaptchaError: boolean;\r\n\treCaptchaToken: string;\r\n\tsendingConfirmation: boolean;\r\n\r\n\tisValidated: boolean;\r\n}\r\n\r\nexport class ICustomAuthComponent extends React.Component {\r\n\tprivate refReCaptchaRegister: React.RefObject = null;\r\n\tprivate refReCaptchaLogin: React.RefObject = null;\r\n\r\n\tconstructor(props: ICustomAuthComponentProps) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.refReCaptchaRegister = React.createRef();\r\n\t\tthis.refReCaptchaLogin = React.createRef();\r\n\r\n\t\t//let stringUser = sessionStorage.getItem(\"CurrentUser\");\r\n\r\n\t\tlet loggedIn = false;\r\n\t\tlet user: IUserAccount = {\r\n\t\t\tfirstName: \"\",\r\n\t\t\tlastName: \"\",\r\n\t\t\temail: \"\",\r\n\t\t\taccountType: AccountType.Custom,\r\n\t\t\tpassword: \"\",\r\n\t\t\tuserId: \"\",\r\n\t\t};\r\n\t\t//if (stringUser) {\r\n\t\t// user = JSON.parse(stringUser) as IUserAccount;\r\n\t\t// loggedIn = true;\r\n\t\t// this.props.setAuthStatus(true, user);\r\n\t\t//}\r\n\r\n\t\tif (props.currentUser) {\r\n\t\t\tuser = props.currentUser;\r\n\t\t\tloggedIn = true;\r\n\t\t}\r\n\r\n\t\tthis.state = {\r\n\t\t\tstate: \"login\",\r\n\t\t\tcurrentUser: user,\r\n\t\t\tfirstNameErrorMessage: \"\",\r\n\t\t\tlastNameErrorMessage: \"\",\r\n\t\t\temailErrorMessage: \"\",\r\n\t\t\tpasswordErrorMessage: \"\",\r\n\t\t\tconfirmPasswordErrorMessage: \"\",\r\n\t\t\tlegalNoticeErrorMessage: \"\",\r\n\t\t\tprivacyNoticeErrorMessage: \"\",\r\n\r\n\t\t\tpwdBadgeVariant: null,\r\n\t\t\tpwdBadgeLabel: null,\r\n\r\n\t\t\tregistered: false,\r\n\r\n\t\t\tloggedIn: loggedIn,\r\n\r\n\t\t\tlegalNoticeChecked: false,\r\n\t\t\tprivacyNoticeChecked: false,\r\n\r\n\t\t\tisProcessing: false,\r\n\t\t\tshowCustomLoginPanel: false,\r\n\t\t\treCaptchaError: false,\r\n\t\t\treCaptchaToken: null,\r\n\r\n\t\t\tsendingConfirmation: false,\r\n\t\t\tisValidated: false,\r\n\t\t};\r\n\t}\r\n\tpublic componentDidMount() {\r\n\t\t//console.log(\"LoginComponent componentDidMount\");\r\n\t}\r\n\r\n\tpublic componentWillReceiveProps(newProps: ICustomAuthComponentProps) {\r\n\t\tif (this.props.currentUser != newProps.currentUser) {\r\n\t\t\tlet user: IUserAccount = newProps.currentUser;\r\n\t\t\tif (!newProps.currentUser) {\r\n\t\t\t\tuser = {\r\n\t\t\t\t\tfirstName: \"\",\r\n\t\t\t\t\tlastName: \"\",\r\n\t\t\t\t\temail: \"\",\r\n\t\t\t\t\taccountType: AccountType.Custom,\r\n\t\t\t\t\tpassword: \"\",\r\n\t\t\t\t\tuserId: \"\",\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\tthis.setState({\r\n\t\t\t\tloggedIn: Boolean(newProps.currentUser),\r\n\t\t\t\tcurrentUser: user,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _onRegisterBtnCLicked = () => {\r\n\t\ttry {\r\n\t\t\tconsole.time(\"_onRegisterBtnCLicked\");\r\n\t\t\tif (this.inputsAreaValid(true)) {\r\n\t\t\t\t// check if email allready exist\r\n\t\t\t\tthis.registerUser();\r\n\t\t\t} else {\r\n\t\t\t\tthis.setInformationMessage(\"Please fix the validation issues\", MessageBarType.error);\r\n\t\t\t}\r\n\t\t} catch (err) {\r\n\t\t\talert(\"Error: \" + err);\r\n\t\t}\r\n\t};\r\n\tprivate _onLoginBtnClicked = () => {\r\n\t\ttry {\r\n\t\t\tconsole.time(\"_onLoginBtnClicked\");\r\n\t\t\tif (this.inputsAreaValid(false)) {\r\n\t\t\t\t// check if email allready exist\r\n\t\t\t\tthis.loginUser();\r\n\t\t\t} else {\r\n\t\t\t\tthis.setInformationMessage(\"Please fix the validation issues\", MessageBarType.error);\r\n\t\t\t}\r\n\t\t} catch (err) {\r\n\t\t\talert(\"Error: \" + err);\r\n\t\t}\r\n\t};\r\n\tprivate _onLogoutBtnClicked = () => {\r\n\t\ttry {\r\n\t\t\tconsole.time(\"_onLogoutBtnClicked\");\r\n\t\t\tthis.setState(\r\n\t\t\t\t{\r\n\t\t\t\t\tcurrentUser: {\r\n\t\t\t\t\t\tfirstName: \"\",\r\n\t\t\t\t\t\tlastName: \"\",\r\n\t\t\t\t\t\temail: \"\",\r\n\t\t\t\t\t\taccountType: AccountType.Custom,\r\n\t\t\t\t\t\tpassword: \"\",\r\n\t\t\t\t\t\tuserId: \"\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\tregistered: false,\r\n\t\t\t\t\tloggedIn: false,\r\n\t\t\t\t},\r\n\t\t\t\t() => {\r\n\t\t\t\t\tthis.props.setAuthStatus(false, null);\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t} catch (err) {\r\n\t\t\talert(\"Error: \" + err);\r\n\t\t} finally {\r\n\t\t\twindow.sessionStorage.removeItem(\"authToken\");\r\n\t\t\twindow.sessionStorage.removeItem(\"stlUser\");\r\n\t\t}\r\n\t};\r\n\r\n\tprivate resendActivationCode = () => {\r\n\t\tthis.setState({ sendingConfirmation: true });\r\n\t\tlet updatedMessage: any = (\r\n\t\t\t<>\r\n\t\t\t\tAccount is not active\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t {}}>\r\n\t\t\t\t\t\tResent Confirmation Email\r\n\t\t\t\t\t{\" \"}\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t\tthis.setInformationMessage(updatedMessage, MessageBarType.error, false);\r\n\t\tlet baseUrl = Common.getCurrentServerUrl();\r\n\t\tthis.props.dataProvider\r\n\t\t\t.resendActivationCode(this.state.currentUser.email, baseUrl)\r\n\t\t\t.then(() => {\r\n\t\t\t\tconsole.log(\"Resent activation code\");\r\n\t\t\t\tthis.setInformationMessage(\"Confirmation Mail was sent successfully\", MessageBarType.success);\r\n\t\t\t})\r\n\t\t\t.catch((err) => {})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tthis.setState({ sendingConfirmation: false });\r\n\t\t\t});\r\n\t};\r\n\r\n\tprivate loginUser = () => {\r\n\t\tthis.setState({ isProcessing: true, informationMessage: \"\" });\r\n\t\tthis.props.dataProvider\r\n\t\t\t.loginInternalUserAccount(this.state.currentUser, this.state.reCaptchaToken)\r\n\t\t\t.then((user) => {\r\n\t\t\t\tconsole.log(\"Custom User logged in\", user);\r\n\r\n\t\t\t\twindow.sessionStorage.setItem(\"authToken\", JSON.stringify(user.bearerToken));\r\n\t\t\t\twindow.sessionStorage.setItem(\"stlUser\", JSON.stringify(user));\r\n\r\n\t\t\t\tthis.setInformationMessage(\"Login Successful\", MessageBarType.success);\r\n\t\t\t\tthis.setState({ loggedIn: true });\r\n\t\t\t\t/*sessionStorage.setItem(\"CurrentUser\", JSON.stringify(user));*/\r\n\t\t\t\tthis.setState({ currentUser: user });\r\n\t\t\t\tthis.props.setAuthStatus(true, user);\r\n\r\n\t\t\t\tif (this.props.onPanelStatusChange) {\r\n\t\t\t\t\tthis.props.onPanelStatusChange(false);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconsole.dir(err);\r\n\r\n\t\t\t\twindow.sessionStorage.removeItem(\"authToken\");\r\n\t\t\t\twindow.sessionStorage.removeItem(\"stlUser\");\r\n\t\t\t\tlet autoDismissError = true;\r\n\t\t\t\tlet errormessage = err;\r\n\t\t\t\tif (err.detail) {\r\n\t\t\t\t\terrormessage = err.detail;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (errormessage == \"Account is not active\") {\r\n\t\t\t\t\t// augment error with confirmation hyperlink\r\n\t\t\t\t\terrormessage = (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\tAccount is not active\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tResent Confirmation Email\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t);\r\n\t\t\t\t\tautoDismissError = false;\r\n\t\t\t\t} else if (errormessage == \"reCaptcha Token expired or is invalid\") {\r\n\t\t\t\t\terrormessage = <>reCaptcha Token has expired. Please try again.;\r\n\t\t\t\t\tautoDismissError = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.setInformationMessage(errormessage, MessageBarType.error, autoDismissError);\r\n\r\n\t\t\t\t// reset reCaptcha, it's only valid for 1 serverVerify\r\n\t\t\t\tthis.refReCaptchaLogin.current.reset();\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tthis.setState({ isProcessing: false });\r\n\t\t\t});\r\n\t};\r\n\r\n\tprivate registerUser = () => {\r\n\t\tthis.setState({ isProcessing: true });\r\n\t\tthis.props.dataProvider\r\n\t\t\t.registerInternalUserAccount(this.state.currentUser, this.state.reCaptchaToken)\r\n\t\t\t.then((result) => {\r\n\t\t\t\t//this.setInformationMessage(\"New Account Register Successfully, please click on the link in the email to confirm the registration\", MessageBarType.success);\r\n\t\t\t\tthis.setState({ registered: true });\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconsole.dir(err);\r\n\t\t\t\tlet errormessage = err;\r\n\t\t\t\tif (err.detail) {\r\n\t\t\t\t\terrormessage = err.detail;\r\n\t\t\t\t} else if (err.status) {\r\n\t\t\t\t\tconsole.log(err.status);\r\n\t\t\t\t\terrormessage = GeneralHelper.parseError(err);\r\n\t\t\t\t}\r\n\t\t\t\tif (errormessage == \"reCaptcha Token expired or is invalid\") {\r\n\t\t\t\t\terrormessage = <>reCaptcha Token has expired. Please try again.;\r\n\t\t\t\t}\r\n\t\t\t\tthis.setInformationMessage(errormessage, MessageBarType.error);\r\n\r\n\t\t\t\t// reset reCaptcha, it's only valid for 1 serverVerify\r\n\t\t\t\tthis.refReCaptchaRegister.current.reset();\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tthis.setState({ isProcessing: false });\r\n\t\t\t});\r\n\t};\r\n\r\n\tprivate onReCaptchaChange = (value: string) => {\r\n\t\tconsole.log(\"ReCaptcha value: \" + value);\r\n\t};\r\n\r\n\tprivate inputsAreaValid = (register: boolean): boolean => {\r\n\t\tthis.setState({\r\n\t\t\tfirstNameErrorMessage: \"\",\r\n\t\t\tlastNameErrorMessage: \"\",\r\n\t\t\temailErrorMessage: \"\",\r\n\t\t\tpasswordErrorMessage: \"\",\r\n\t\t\tconfirmPasswordErrorMessage: \"\",\r\n\t\t\tlegalNoticeErrorMessage: \"\",\r\n\t\t\tprivacyNoticeErrorMessage: \"\",\r\n\t\t\treCaptchaError: false,\r\n\t\t});\r\n\t\tlet invalid = false;\r\n\r\n\t\tif (register) {\r\n\t\t\tif (!this.state?.currentUser?.firstName || this.state?.currentUser?.firstName?.trim().length === 0) {\r\n\t\t\t\tinvalid = true;\r\n\t\t\t\tthis.setState({ firstNameErrorMessage: GeneralHelper.mandatoryValidation });\r\n\t\t\t}\r\n\t\t\tif (!this.state?.currentUser?.lastName || this.state?.currentUser?.lastName?.trim().length === 0) {\r\n\t\t\t\tinvalid = true;\r\n\t\t\t\tthis.setState({ lastNameErrorMessage: GeneralHelper.mandatoryValidation });\r\n\t\t\t}\r\n\t\t\tif (!this.state?.currentUser?.password || this.state?.currentUser?.password?.trim().length === 0) {\r\n\t\t\t\tinvalid = true;\r\n\t\t\t\tthis.setState({ passwordErrorMessage: GeneralHelper.mandatoryValidation });\r\n\t\t\t} else {\r\n\t\t\t\tif (this.state?.confirmationPassword != this.state?.currentUser?.password) {\r\n\t\t\t\t\tinvalid = true;\r\n\t\t\t\t\tthis.setState({ confirmPasswordErrorMessage: GeneralHelper.confirmationPasswordInvalid });\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!this.checkPasswordStrength(this.state?.currentUser?.password)) {\r\n\t\t\t\tinvalid = true;\r\n\t\t\t\t// no errorMessage necessary, it's displayed already with the password strength badge\r\n\t\t\t}\r\n\t\t\tif (!this.state?.legalNoticeChecked) {\r\n\t\t\t\tinvalid = true;\r\n\t\t\t\tthis.setState({ legalNoticeErrorMessage: \"You must confirm to have read and agree to StraumannGroup's Legal Notice\" });\r\n\t\t\t}\r\n\t\t\tif (!this.state?.privacyNoticeChecked) {\r\n\t\t\t\tinvalid = true;\r\n\t\t\t\tthis.setState({ privacyNoticeErrorMessage: \"You must confirm to have read and agree to StraumannGroup's Privacy Notice\" });\r\n\t\t\t}\r\n\r\n\t\t\tif (!this.refReCaptchaRegister?.current?.getValue()) {\r\n\t\t\t\tinvalid = true;\r\n\t\t\t\tthis.setState({ reCaptchaError: true });\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (!this.refReCaptchaLogin?.current?.getValue()) {\r\n\t\t\t\tinvalid = true;\r\n\t\t\t\tthis.setState({ reCaptchaError: true });\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!this.state?.currentUser?.email || this.state?.currentUser?.email?.trim().length == 0) {\r\n\t\t\tinvalid = true;\r\n\t\t\tthis.setState({ emailErrorMessage: GeneralHelper.mandatoryValidation });\r\n\t\t} else if (this.state?.currentUser?.email?.indexOf(\"@\") == -1) {\r\n\t\t\tinvalid = true;\r\n\t\t\tthis.setState({ emailErrorMessage: GeneralHelper.emailValidation });\r\n\t\t}\r\n\t\tif (!this.state?.currentUser?.password || this.state?.currentUser?.password?.trim().length === 0) {\r\n\t\t\tinvalid = true;\r\n\t\t\tthis.setState({ passwordErrorMessage: GeneralHelper.mandatoryValidation });\r\n\t\t}\r\n\r\n\t\tthis.setState({ isValidated: true });\r\n\r\n\t\treturn !invalid;\r\n\t};\r\n\r\n\tprivate resetValidation = (): void => {\r\n\t\tthis.setState({\r\n\t\t\tfirstNameErrorMessage: \"\",\r\n\t\t\tlastNameErrorMessage: \"\",\r\n\t\t\temailErrorMessage: \"\",\r\n\t\t\tpasswordErrorMessage: \"\",\r\n\t\t\tconfirmPasswordErrorMessage: \"\",\r\n\t\t\tinformationMessage: \"\",\r\n\t\t\tlegalNoticeErrorMessage: \"\",\r\n\t\t\tprivacyNoticeErrorMessage: \"\",\r\n\t\t\tpwdBadgeVariant: null,\r\n\t\t\tpwdBadgeLabel: null,\r\n\t\t\treCaptchaError: false,\r\n\t\t\tisValidated: false,\r\n\t\t});\r\n\r\n\t\tthis.setState((prevState) => ({\r\n\t\t\tcurrentUser: {\r\n\t\t\t\t...prevState.currentUser,\r\n\t\t\t\temail: null,\r\n\t\t\t\tpassword: null,\r\n\t\t\t},\r\n\t\t}));\r\n\t};\r\n\r\n\tprivate setInformationMessage = (message: string, type?: MessageBarType, autoDismiss: boolean = true): void => {\r\n\t\tif (autoDismiss) {\r\n\t\t\tthis.setState({ informationMessage: message, informationType: type || MessageBarType.warning }, () => {\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tthis.setState({ informationMessage: \"\" });\r\n\t\t\t\t}, 4000);\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis.setState({ informationMessage: message, informationType: type || MessageBarType.warning });\r\n\t\t}\r\n\t};\r\n\r\n\tprivate onCustomLoginButton_Clicked = (): void => {\r\n\t\tthis.setState({ showCustomLoginPanel: true });\r\n\r\n\t\tif (this.props.onPanelStatusChange) {\r\n\t\t\tthis.props.onPanelStatusChange(true);\r\n\t\t}\r\n\t};\r\n\r\n\tprivate onCustomLoginPanel_Dismiss = (): void => {\r\n\t\tthis.setState({ showCustomLoginPanel: false });\r\n\r\n\t\tif (this.props.onPanelStatusChange) {\r\n\t\t\tthis.props.onPanelStatusChange(false);\r\n\t\t}\r\n\r\n\t\tthis.resetValidation();\r\n\t};\r\n\r\n\tprivate onLegalNoticeClicked = (ev?: any, checked?: boolean) => {\r\n\t\tthis.setState(\r\n\t\t\t{\r\n\t\t\t\tlegalNoticeChecked: checked,\r\n\t\t\t},\r\n\t\t\t() => {\r\n\t\t\t\tif (this.state.isValidated) {\r\n\t\t\t\t\tthis.inputsAreaValid(true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t);\r\n\t};\r\n\r\n\tprivate onPrivacyNoticeClicked = (ev?: any, checked?: boolean) => {\r\n\t\tthis.setState(\r\n\t\t\t{\r\n\t\t\t\tprivacyNoticeChecked: checked,\r\n\t\t\t},\r\n\t\t\t() => {\r\n\t\t\t\tif (this.state.isValidated) {\r\n\t\t\t\t\tthis.inputsAreaValid(true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t);\r\n\t};\r\n\r\n\tprivate checkPasswordStrength = (pwd: string): boolean => {\r\n\t\tlet strongPassword = new RegExp(\"(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^A-Za-z0-9])(?=.{8,})\");\r\n\t\tlet mediumPassword = new RegExp(\"((?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^A-Za-z0-9])(?=.{6,}))|((?=.*[a-z])(?=.*[A-Z])(?=.*[^A-Za-z0-9])(?=.{8,}))\");\r\n\t\tlet badgeVariant = null;\r\n\t\tlet badgeLabel = null;\r\n\t\tlet result: boolean = true;\r\n\t\tif (strongPassword.test(pwd)) {\r\n\t\t\tbadgeVariant = \"success\";\r\n\t\t\tbadgeLabel = \"Strong Password\";\r\n\t\t\tresult = true;\r\n\t\t} else if (mediumPassword.test(pwd)) {\r\n\t\t\tbadgeVariant = \"warning\";\r\n\t\t\tbadgeLabel = \"Too short\";\r\n\t\t\tresult = false;\r\n\t\t} else {\r\n\t\t\tbadgeVariant = \"danger\";\r\n\t\t\tbadgeLabel = \"Weak Password\";\r\n\t\t\tresult = false;\r\n\t\t}\r\n\t\tthis.setState({\r\n\t\t\tpwdBadgeVariant: badgeVariant,\r\n\t\t\tpwdBadgeLabel: badgeLabel,\r\n\t\t});\r\n\t\treturn result;\r\n\t};\r\n\r\n\tpublic render(): React.ReactElement {\r\n\t\tlet userData = this.state.currentUser as any;\r\n\r\n\t\tconst styleError: string = mergeStyles({\r\n\t\t\tfontFamily: \"Segoe UI, Segoe UI Web (West European), Segoe UI, -apple-system, BlinkMacSystemFont, Roboto, Helvetica Neue, sans-serif\",\r\n\t\t\tfontSize: \"12px\",\r\n\t\t\tfontWeight: 400,\r\n\t\t\tcolor: \"rgb(164, 38, 44)\",\r\n\t\t\tmargin: \"0px\",\r\n\t\t\tpaddingTop: \"5px\",\r\n\t\t\tdisplay: \"flex\",\r\n\t\t\talignItems: \"center\",\r\n\t\t});\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t{this.state.registered ? (\r\n\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\tthis.setState({ registered: false });\r\n\t\t\t\t\t\t\t\tif (this.props.onPanelStatusChange) {\r\n\t\t\t\t\t\t\t\t\tthis.props.onPanelStatusChange(false);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tYou have been registered successfully.\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\tE-Mail Validation is required to activate your account.\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\tPlease check your E-Mail for a validation E-Mail.\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t{\" \"}\r\n\t\t\t\t\t\t\t{this.state.loggedIn ? (\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\tSigned in as:\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t{`${userData.firstName} ${userData.lastName}`}\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t{!this.state.showCustomLoginPanel ? (\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\tSign in or create new account\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\tImplant Design Library\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tSign in\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tRegister\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.setState(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(prevState) => ({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentUser: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...prevState.currentUser,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\temail: newValue || \"\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\temailErrorMessage: \"\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t() => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (this.state.isValidated) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.inputsAreaValid(false);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdefaultValue={this.state?.currentUser?.email}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.setState(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(prevState) => ({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentUser: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...prevState.currentUser,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpassword: newValue || \"\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t() => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (this.state.isValidated) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.inputsAreaValid(false);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdefaultValue={this.state?.currentUser?.password}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.setState({ reCaptchaToken: token });\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (this.state.isValidated) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.inputsAreaValid(false);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.state.reCaptchaError && }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tLogin\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.state.isProcessing && }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\twindow.location.href = `${Common.getCurrentServerUrl()}/resetpw`;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tForgot my password\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.setState(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(prevState) => ({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentUser: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...prevState.currentUser,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfirstName: newValue || \"\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfirstNameErrorMessage: \"\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t() => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (this.state.isValidated) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.inputsAreaValid(true);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdefaultValue={this.state.currentUser.firstName}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.setState(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(prevState) => ({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentUser: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...prevState.currentUser,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlastName: newValue || \"\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlastNameErrorMessage: \"\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t() => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (this.state.isValidated) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.inputsAreaValid(true);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdefaultValue={this.state?.currentUser?.lastName}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.setState(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(prevState) => ({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentUser: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...prevState.currentUser,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\temail: newValue || \"\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\temailErrorMessage: \"\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t() => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (this.state.isValidated) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.inputsAreaValid(true);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdefaultValue={this.state?.currentUser?.email}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.setState(\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(prevState) => ({\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentUser: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...prevState.currentUser,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpassword: newValue || \"\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}),\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t() => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (this.state.isValidated) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.inputsAreaValid(true);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.checkPasswordStrength(newValue);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdefaultValue={this.state?.currentUser?.password}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t{this.state?.pwdBadgeVariant && this.state?.pwdBadgeLabel && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.state.pwdBadgeLabel}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{(this.state?.pwdBadgeVariant == \"danger\" || this.state?.pwdBadgeVariant == \"warning\") && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.setState({ confirmationPassword: newValue }, () => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (this.state.isValidated) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.inputsAreaValid(true);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdefaultValue={this.state?.confirmationPassword}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.state.legalNoticeErrorMessage && }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.state?.privacyNoticeErrorMessage && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.setState({ reCaptchaToken: token });\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (this.state.isValidated) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.inputsAreaValid(true);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.state.reCaptchaError && }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tRegister\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{this.state.isProcessing && }\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{this.state.informationMessage ? (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{this.state.informationMessage}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\"\"\r\n\t\t\t\t\t)}\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n","import * as React from \"react\";\r\nimport { Navbar } from \"react-bootstrap\";\r\nimport DataProvider from \"../../dataprovider/DataProvider\";\r\n\r\nimport { useIsAuthenticated } from \"@azure/msal-react\";\r\nimport { MicrosoftComponent } from \"./MicrosoftComponent\";\r\nimport \"bootstrap/dist/css/bootstrap.min.css\";\r\n\r\nimport \"./sLoginComponent.scss\";\r\nimport GoogleLoginComponent from \"./GoogleComponent\";\r\nimport { ICustomAuthComponent as CustomAuthComponent } from \"./CustomAuthComponent\";\r\nimport { mergeStyles } from \"@uifabric/merge-styles\";\r\nimport { Callout, Dialog, DialogType, IButton, Icon, IconButton, IRefObject, Target } from \"office-ui-fabric-react\";\r\nimport { Redirect } from \"react-router\";\r\n\r\nrequire(\"./LoginComponent.css\");\r\n\r\nexport enum AccountType {\r\n\tMicrosoft = \"Microsoft\",\r\n\tGoogle = \"Google\",\r\n\tCustom = \"Custom\",\r\n}\r\n\r\nexport interface ILoginComponentProps {\r\n\tsetAuthStatus: (signedIn: boolean, user: IUserAccount) => Promise;\r\n\tcurrentUser: IAuthenticatedUser;\r\n}\r\n\r\nexport interface ILoginComponentState {\r\n\tloggedInWithGoogle: boolean;\r\n\tloggedInWithMicrosoft: boolean;\r\n\tloggedInWithCustomAccount: boolean;\r\n\tcurrentUser: IAuthenticatedUser;\r\n\r\n\tisCalloutOpen: boolean;\r\n\tisLoggedIn: boolean;\r\n\tisCustomPanelOpen: boolean;\r\n\r\n\terror_provider: string;\r\n\tisErrorOpen: boolean;\r\n}\r\n\r\n// Add the endpoints here for Microsoft Graph API services you'd like to use.\r\nexport const graphConfig = {\r\n\tgraphMeEndpoint: \"https://graph.microsoft.com/v1.0/me\",\r\n};\r\n\r\nexport class LoginComponent extends React.Component {\r\n\tprivate dataProvider = new DataProvider();\r\n\tprivate refPersonIcon: React.RefObject = null;\r\n\r\n\tconstructor(props: ILoginComponentProps) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tisLoggedIn: Boolean(props.currentUser),\r\n\t\t\tcurrentUser: props.currentUser,\r\n\t\t\tloggedInWithGoogle: props.currentUser && props.currentUser.accountType == AccountType.Google,\r\n\t\t\tloggedInWithMicrosoft: props.currentUser && props.currentUser.accountType == AccountType.Microsoft,\r\n\t\t\tloggedInWithCustomAccount: props.currentUser && props.currentUser.accountType == AccountType.Custom,\r\n\r\n\t\t\tisCalloutOpen: false,\r\n\r\n\t\t\tisCustomPanelOpen: false,\r\n\r\n\t\t\terror_provider: null,\r\n\t\t\tisErrorOpen: false,\r\n\t\t};\r\n\r\n\t\tthis.refPersonIcon = React.createRef();\r\n\t}\r\n\tpublic componentDidMount() {}\r\n\r\n\tpublic ensureSPUser = (userInformation: IUserAccount, token: string, isRSMToken: boolean): Promise => {\r\n\t\treturn this.dataProvider\r\n\t\t\t.ensureExternalUserAccount(userInformation, token, isRSMToken)\r\n\t\t\t.then((result: IAuthenticatedUser) => {\r\n\t\t\t\tconsole.log(result);\r\n\t\t\t\twindow.sessionStorage.authToken = JSON.stringify(result.bearerToken);\r\n\t\t\t\twindow.sessionStorage.stlUser = JSON.stringify(result);\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tconsole.dir(err);\r\n\t\t\t\twindow.sessionStorage.removeItem(\"authToken\");\r\n\t\t\t\twindow.sessionStorage.removeItem(\"stlUser\");\r\n\t\t\t\treturn Promise.reject(err);\r\n\t\t\t});\r\n\t};\r\n\r\n\tprivate showAuthenticationError = (provider: string): void => {\r\n\t\tthis.setState({\r\n\t\t\terror_provider: provider,\r\n\t\t\tisErrorOpen: true,\r\n\t\t});\r\n\t};\r\n\r\n\tpublic componentWillReceiveProps(newProps: ILoginComponentProps) {\r\n\t\tif (this.state.currentUser != newProps.currentUser) {\r\n\t\t\tthis.setState({\r\n\t\t\t\tisLoggedIn: Boolean(newProps.currentUser),\r\n\t\t\t\tcurrentUser: newProps.currentUser,\r\n\t\t\t\tloggedInWithGoogle: newProps.currentUser && newProps.currentUser.accountType == AccountType.Google,\r\n\t\t\t\tloggedInWithMicrosoft: newProps.currentUser && newProps.currentUser.accountType == AccountType.Microsoft,\r\n\t\t\t\tloggedInWithCustomAccount: newProps.currentUser && newProps.currentUser.accountType == AccountType.Custom,\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tpublic render(): React.ReactElement {\r\n\t\t// hide the whole login component if the user is on the pages: 'confirmation', 'resetPW'\r\n\t\tlet curUrl = window.location.href.toLowerCase();\r\n\t\tlet hideLoginComponent = curUrl.includes(\"confirm\") || curUrl.includes(\"resetpw\") || curUrl.includes(\"consent\") || curUrl.includes(\"submitagreement\");\r\n\t\tconsole.log(hideLoginComponent);\r\n\t\tlet signedIn = this.state.loggedInWithCustomAccount || this.state.loggedInWithGoogle || this.state.loggedInWithMicrosoft;\r\n\r\n\t\t// Login component AND person symbol should be displayed on the right screen border\r\n\t\tlet signedInStyles = mergeStyles(\r\n\t\t\thideLoginComponent\r\n\t\t\t\t? [\r\n\t\t\t\t\t\t{ display: \"none\" },\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tposition: \"absolute\",\r\n\t\t\t\t\t\t\tright: \"20px\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t ]\r\n\t\t\t\t: [\r\n\t\t\t\t\t\t{ height: \"calc(100% - 100px)\" },\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tposition: \"absolute\",\r\n\t\t\t\t\t\t\tright: \"20px\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t ]\r\n\t\t);\r\n\r\n\t\tconst { loggedInWithCustomAccount, loggedInWithGoogle, loggedInWithMicrosoft, isCustomPanelOpen } = this.state;\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{!(this.state.loggedInWithCustomAccount || this.state.loggedInWithGoogle || this.state.loggedInWithMicrosoft) && (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{!this.state.loggedInWithMicrosoft && !this.state.loggedInWithCustomAccount && !isCustomPanelOpen ? (\r\n\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\t//console.log(\"GoogleLogin: \", loggedIn);\r\n\t\t\t\t\t\t\t\t\t\t//console.log(\"Google account\", user);\r\n\t\t\t\t\t\t\t\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\t\t\t\t\t\t\t\tthis.setState(\r\n\t\t\t\t\t\t\t\t\t\t\t\t(prevState) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tlet isLoggedIn = prevState.loggedInWithCustomAccount || loggedIn || prevState.loggedInWithMicrosoft;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tloggedInWithGoogle: loggedIn,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tloggedInWithCustomAccount: false,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tloggedInWithMicrosoft: false,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisLoggedIn: isLoggedIn,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentUser: user,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisCalloutOpen: prevState.isCalloutOpen && loggedIn,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t() => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.props.setAuthStatus(this.state.isLoggedIn, user).then(() => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\"\"\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{!this.state.loggedInWithGoogle && !this.state.loggedInWithCustomAccount && !isCustomPanelOpen ? (\r\n\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\t//console.log(\"%cMicrosoftLogin: \" + loggedIn, \"color:purple;font-size:14px;\");\r\n\t\t\t\t\t\t\t\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\t\t\t\t\t\t\t\tthis.setState(\r\n\t\t\t\t\t\t\t\t\t\t\t\t(prevState: ILoginComponentState, props: ILoginComponentProps) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tlet isLoggedIn = prevState.loggedInWithCustomAccount || prevState.loggedInWithGoogle || loggedIn;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tloggedInWithMicrosoft: loggedIn,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tloggedInWithCustomAccount: false,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tloggedInWithGoogle: false,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisLoggedIn: isLoggedIn,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentUser: user,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisCalloutOpen: prevState.isCalloutOpen && loggedIn,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t() => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.props.setAuthStatus(this.state.isLoggedIn, user).then(() => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\"\"\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{!this.state.loggedInWithGoogle && !this.state.loggedInWithMicrosoft ? (\r\n\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\t\t\t\t\t\t\t\tconsole.log(\"CustomLogin: \" + loggedIn);\r\n\t\t\t\t\t\t\t\t\t\t\tthis.setState(\r\n\t\t\t\t\t\t\t\t\t\t\t\t(prevState) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tlet isLoggedIn = loggedIn || prevState.loggedInWithGoogle || prevState.loggedInWithMicrosoft;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tloggedInWithCustomAccount: loggedIn,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisLoggedIn: isLoggedIn,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentUser: user,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisCalloutOpen: prevState.isCalloutOpen && loggedIn,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t\t\t\t() => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.props.setAuthStatus(this.state.isLoggedIn, user);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\tonPanelStatusChange={(isOpen: boolean) => {\r\n\t\t\t\t\t\t\t\t\t\tthis.setState({ isCustomPanelOpen: isOpen });\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\"\"\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\t\t\t\t{(this.state.loggedInWithCustomAccount || this.state.loggedInWithGoogle || this.state.loggedInWithMicrosoft) && (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\tthis.setState((state) => {\r\n\t\t\t\t\t\t\t\t\treturn { isCalloutOpen: !this.state.isCalloutOpen };\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tcomponentRef={this.refPersonIcon}\r\n\t\t\t\t\t\t\timageProps={{\r\n\t\t\t\t\t\t\t\tsrc: \"data:image/png;base64,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\",\r\n\t\t\t\t\t\t\t\tstyle: { width: \"50px\" },\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t{this.state.isCalloutOpen && (\r\n\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\tthis.setState({ isCalloutOpen: false });\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t{!loggedInWithMicrosoft && !loggedInWithCustomAccount ? (\r\n\t\t\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t//console.log(\"GoogleLogin: \" + loggedIn);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.setState((prevState) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t//let isLoggedIn = prevState.loggedInWithCustomAccount || prevState.loggedInWithGoogle || prevState.loggedInWithMicrosoft;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlet isLoggedIn = loggedIn;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tloggedInWithGoogle: loggedIn,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisLoggedIn: isLoggedIn,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentUser: user,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisCalloutOpen: prevState.isCalloutOpen && loggedIn,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.props.setAuthStatus(loggedIn, user);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\"\"\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t{!loggedInWithGoogle && !loggedInWithCustomAccount ? (\r\n\t\t\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.setState((prevState) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t//let isLoggedIn = prevState.loggedInWithCustomAccount || prevState.loggedInWithGoogle || prevState.loggedInWithMicrosoft;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlet isLoggedIn = loggedIn;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tloggedInWithMicrosoft: loggedIn,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisLoggedIn: isLoggedIn,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentUser: user,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisCalloutOpen: prevState.isCalloutOpen && loggedIn,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.props.setAuthStatus(loggedIn, user);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\"\"\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t{!loggedInWithGoogle && !loggedInWithMicrosoft ? (\r\n\t\t\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tconsole.log(\"CustomLogin: \" + loggedIn);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.setState((prevState) => {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlet isLoggedIn = loggedIn || prevState.loggedInWithGoogle || prevState.loggedInWithMicrosoft;\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tloggedInWithCustomAccount: loggedIn,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tloggedInWithGoogle: false,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tloggedInWithMicrosoft: false,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisLoggedIn: isLoggedIn,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcurrentUser: user,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisCalloutOpen: prevState.isCalloutOpen && loggedIn,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.props.setAuthStatus(this.state.isLoggedIn, user);\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t) : (\r\n\t\t\t\t\t\t\t\t\t\t\"\"\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\t\t\t\t {\r\n\t\t\t\t\t\t\tthis.setState({ isErrorOpen: false });\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tmodalProps={{ isBlocking: true, className: \"busyOverlay\" }}\r\n\t\t\t\t>\r\n\t\t\t\t\tAuthentication with {this.state.error_provider} was not possible. The Token provided by {this.state.error_provider} was invalid.\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport interface IBaseUserAccount {\r\n\tid?: number;\r\n\tfirstName: string;\r\n\tlastName: string;\r\n\temail: string;\r\n\taccountType: string;\r\n\tuserId: string;\r\n\tisNewUser?: boolean;\r\n}\r\n\r\nexport interface IUserAccount extends IBaseUserAccount {\r\n\tpassword?: string;\r\n\tactivateGuid?: string;\r\n}\r\n\r\nexport interface IAuthenticatedUser extends IBaseUserAccount {\r\n\tbearerToken: ITokenInformation;\r\n}\r\n\r\nexport interface ITokenInformation {\r\n\ttoken: string;\r\n\texpirationUTC: Date;\r\n}\r\n","import * as React from \"react\";\r\nimport { css, Stack, PrimaryButton, Text, getTheme, Link, Spinner } from \"office-ui-fabric-react\";\r\nimport { IDataProvider } from \"../../dataprovider/IDataProvider\";\r\nimport { GeneralHelper } from \"./LoginHelper\";\r\nimport { MessageBar, MessageBarType } from \"office-ui-fabric-react/lib-commonjs\";\r\nimport { Common } from \"./Common\";\r\nconst theme = getTheme();\r\n\r\nexport interface IConfirmPageProps {\r\n\tlocation: Location;\r\n\thistory: any;\r\n\tstepSizeClass: string;\r\n\tdataProvider: IDataProvider;\r\n}\r\n\r\nexport interface IConfirmPageState {\r\n\tactivationInProgress: boolean;\r\n\taccountActivated: boolean;\r\n\terrorMessage: string;\r\n\r\n\tsendingConfirmation: boolean;\r\n}\r\n\r\nexport class ConfirmPage extends React.Component {\r\n\tconstructor(props: IConfirmPageProps) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tactivationInProgress: true, // activation starts on page load\r\n\t\t\taccountActivated: false,\r\n\t\t\terrorMessage: \"\",\r\n\r\n\t\t\tsendingConfirmation: false,\r\n\t\t};\r\n\t}\r\n\tpublic componentDidMount() {\r\n\t\tconsole.log(\"ConfirmPage componentDidMount\");\r\n\t\tconst queryString = window.location.search;\r\n\t\tconst urlParams = new URLSearchParams(queryString);\r\n\t\tconst code = urlParams.get(\"activationGuid\");\r\n\t\tif (code) {\r\n\t\t\tthis.props.dataProvider\r\n\t\t\t\t.getUserByActivateParam(code, true)\r\n\t\t\t\t.then((result) => {\r\n\t\t\t\t\tthis.setState({ accountActivated: true, activationInProgress: false });\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => {\r\n\t\t\t\t\tconsole.dir(err);\r\n\t\t\t\t\tlet errormessage = err;\r\n\t\t\t\t\tif (err.detail) {\r\n\t\t\t\t\t\terrormessage = err.detail;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.setState({ activationInProgress: false, errorMessage: errormessage });\r\n\t\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis.setState({ errorMessage: \"No valid Activation url\", activationInProgress: false });\r\n\t\t}\r\n\t}\r\n\r\n\tpublic render(): React.ReactElement {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t

User Account Activation

\r\n\t\t\t\t\t{this.state.activationInProgress ? : null}\r\n\t\t\t\t\t{this.state.accountActivated ? (\r\n\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\twindow.location.href = `${Common.getCurrentServerUrl()}/`;\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tUser activated successfully! You can log in now\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\tthis.state.errorMessage && (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tActivation was not successful. This activation code might have expired.\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\tClick here to order a new activation code\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t)\r\n\t\t\t\t\t)}\r\n\t\t\t\t
\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n","import * as React from 'react';\r\nimport { css, Stack, PrimaryButton, Text, getTheme, Link, TextField, DefaultButton, MessageBarType, MessageBar, Alignment, Label } from 'office-ui-fabric-react';\r\nimport { IDataProvider } from '../../dataprovider/IDataProvider';\r\nimport { GeneralHelper } from './LoginHelper';\r\nimport { IUserAccount } from './LoginComponent';\r\nimport { Spinner } from 'office-ui-fabric-react';\r\nimport { Common } from './Common';\r\nimport { Redirect, Router } from 'react-router';\r\nimport { Badge } from 'react-bootstrap';\r\n\r\nrequire('./LoginComponent.css');\r\n\r\nexport interface IPWResetProps {\r\n location: Location;\r\n history: any;\r\n stepSizeClass: string;\r\n dataProvider: IDataProvider;\r\n}\r\n\r\nexport interface IPWResetState {\r\n userReadyForPWReset: boolean;\r\n informationMessage: string;\r\n informationType?: MessageBarType;\r\n password: string;\r\n email?: string;\r\n activationCode: string;\r\n confirmationPassword?: string;\r\n passwordErrorMessage?: string;\r\n emailErrorMessage?: string;\r\n\r\n emailWasSent: boolean;\r\n isProcessing: boolean;\r\n resetSuccessful: boolean;\r\n // redirectToLogin: boolean;\r\n\r\n pwdBadgeVariant: string;\r\n pwdBadgeLabel: string;\r\n\r\n confirmMode: boolean;\r\n}\r\n\r\nexport class ResetPWPage extends React.Component {\r\n\r\n\r\n\r\n constructor(props: IPWResetProps) {\r\n super(props);\r\n\r\n this.state = {\r\n userReadyForPWReset: false,\r\n informationMessage: \"\",\r\n activationCode: \"\",\r\n password: \"\",\r\n\r\n emailWasSent: false,\r\n isProcessing: false,\r\n resetSuccessful: false,\r\n\r\n pwdBadgeVariant: null,\r\n pwdBadgeLabel: null,\r\n\r\n confirmMode: false\r\n // redirectToLogin: false\r\n };\r\n\r\n }\r\n public componentDidMount() { \r\n console.log(\"Reset PW componentDidMount\");\r\n const queryString = window.location.search;\r\n const urlParams = new URLSearchParams(queryString);\r\n\r\n // switch mode for confirmation\r\n let confirmMode = false;\r\n if (urlParams.get('confirmOnly') === \"true\") {\r\n this.setState({ confirmMode: true });\r\n confirmMode = true;\r\n }\r\n\r\n const code = urlParams.get('activationGuid');\r\n if (code) {\r\n this.setState({ activationCode: code });\r\n\r\n if (!confirmMode) {\r\n this.props.dataProvider.getUserByActivateParam(code, false).then(userReadyForPWReset => {\r\n if (userReadyForPWReset) {\r\n this.setState({ userReadyForPWReset: userReadyForPWReset })\r\n }\r\n }).catch(err => {\r\n console.dir(err);\r\n let errormessage = err;\r\n if (err.detail) {\r\n errormessage = err.detail;\r\n }\r\n Common.removeUrlParam(\"activationGuid\");\r\n this.setInformationMessage(`${errormessage} Your link might have expired. Please do another Password Reset.`, MessageBarType.error, true);\r\n //let errormessage = GeneralHelper.parseError(err);\r\n //alert(\"Error on getUserByActivateParam: \" + errormessage);\r\n });\r\n }\r\n } else {\r\n // this.setState({ informationMessage: \"No valid reset PW link. Please click again on the reset PW link\"})\r\n }\r\n }\r\n\r\n private _resetBtnClicked = () => {\r\n try {\r\n console.time(\"_resetBtnClicked\");\r\n if (this.inputsAreaValid(true)) {\r\n // check if email allready exist\r\n this.resetPw();\r\n\r\n } else {\r\n this.setInformationMessage(\"Please fix the validation issues\", MessageBarType.error);\r\n }\r\n } catch (err) {\r\n alert(\"Error: \" + err);\r\n }\r\n }\r\n\r\n private _getResetLink = () => {\r\n let validEmail = Boolean(this.state.email) && this.state.email.search(/(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])/) !== -1;\r\n \r\n if (!validEmail) {\r\n this.setState({ emailErrorMessage: `please enter a valid E-Mail address` });\r\n } else {\r\n this.setState({ isProcessing: true });\r\n let baseUrl = Common.getCurrentServerUrl();\r\n\r\n if (this.state.confirmMode) {\r\n this.props.dataProvider.resendActivationCode(this.state.email, baseUrl).then(activationCode => {\r\n this.setState({\r\n emailWasSent: true,\r\n isProcessing: false\r\n }, () => {\r\n this.setInformationMessage(\"Confirmation E-mail was sent to you. Please check your E-mail.\", MessageBarType.success, true);\r\n })\r\n }).catch(err => {\r\n let errormessage = err;\r\n if (err.detail) {\r\n errormessage = err.detail;\r\n }\r\n //let errormessage = GeneralHelper.parseError(err);\r\n this.setInformationMessage(errormessage, MessageBarType.error);\r\n }).finally(() => {\r\n this.setState({ isProcessing: false });\r\n });\r\n } else {\r\n this.props.dataProvider.getNewActivationCode(this.state.email, baseUrl).then(activationCode => {\r\n\r\n this.setState({\r\n emailWasSent: true,\r\n isProcessing: false\r\n }, () => {\r\n this.setInformationMessage(\"Password Reset Email was sent to you. Please check your E-mail.\", MessageBarType.success, true);\r\n })\r\n }).catch(err => {\r\n let errormessage = err;\r\n if (err.detail) {\r\n errormessage = err.detail;\r\n }\r\n //let errormessage = GeneralHelper.parseError(err);\r\n this.setInformationMessage(errormessage, MessageBarType.error);\r\n }).finally(() => {\r\n this.setState({ isProcessing: false });\r\n });\r\n }\r\n }\r\n }\r\n\r\n private resetPw = () => {\r\n this.setState({ isProcessing: true });\r\n this.props.dataProvider.resetPWByActivateParam(this.state.activationCode, this.state.password).then(result => {\r\n this.setInformationMessage(\"Reset Password successfully\", MessageBarType.success, true);\r\n this.setState({ password: \"\", confirmationPassword: \"\", isProcessing: false, resetSuccessful: true });\r\n }).catch(err => {\r\n console.dir(err);\r\n let errormessage = err;\r\n if(err.detail){\r\n errormessage = err.detail;\r\n }\r\n //let errormessage = GeneralHelper.parseError(err);\r\n this.setInformationMessage(errormessage, MessageBarType.info);\r\n\r\n });\r\n }\r\n private inputsAreaValid = (register: boolean): boolean => {\r\n\r\n this.setState({ passwordErrorMessage: \"\" });\r\n let invalid = false;\r\n if (this.state.password == \"\") {\r\n invalid = true;\r\n this.setState({ passwordErrorMessage: GeneralHelper.mandatoryValidation });\r\n }\r\n if (this.state.confirmationPassword == \"\") {\r\n invalid = true;\r\n this.setState({ passwordErrorMessage: GeneralHelper.mandatoryValidation });\r\n } else if (this.state.confirmationPassword != this.state.password) {\r\n invalid = true;\r\n this.setState({ passwordErrorMessage: GeneralHelper.confirmationPasswordInvalid });\r\n }\r\n if (!this.checkPasswordStrength(this.state?.password)) {\r\n invalid = true;\r\n // no errorMessage necessary, it's displayed already with the password strength badge\r\n }\r\n return !invalid;\r\n\r\n\r\n }\r\n\r\n private setInformationMessage = (message: string, type?: MessageBarType, keepMessage = false): void => {\r\n this.setState({ informationMessage: message, informationType: type || MessageBarType.warning },\r\n () => {\r\n if (!keepMessage) {\r\n setTimeout(() => { this.setState({ informationMessage: \"\" }); }, 4000);\r\n }\r\n });\r\n }\r\n\r\n private checkPasswordStrength = (pwd: string): boolean => {\r\n let strongPassword = new RegExp('(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^A-Za-z0-9])(?=.{8,})');\r\n let mediumPassword = new RegExp('((?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^A-Za-z0-9])(?=.{6,}))|((?=.*[a-z])(?=.*[A-Z])(?=.*[^A-Za-z0-9])(?=.{8,}))');\r\n let badgeVariant = null;\r\n let badgeLabel = null;\r\n let result: boolean = true;\r\n if (strongPassword.test(pwd)) {\r\n badgeVariant = \"success\";\r\n badgeLabel = \"Strong Password\";\r\n result = true;\r\n } else if (mediumPassword.test(pwd)) {\r\n badgeVariant = \"warning\";\r\n badgeLabel = \"Too short\";\r\n result = false;\r\n } else {\r\n badgeVariant = \"danger\";\r\n badgeLabel = \"Weak Password\";\r\n result = false;\r\n }\r\n this.setState({\r\n pwdBadgeVariant: badgeVariant,\r\n pwdBadgeLabel: badgeLabel\r\n });\r\n return result;\r\n }\r\n\r\n public render(): React.ReactElement {\r\n\r\n return (\r\n \r\n \r\n {this.state.confirmMode ?

Confirmation Email

:

Reset Password

}\r\n {!this.state.emailWasSent &&\r\n <>\r\n {\r\n this.state.userReadyForPWReset ? !this.state.resetSuccessful && <>\r\n\r\n {\r\n this.setState({ password: newValue || \"\" });\r\n\r\n this.checkPasswordStrength(newValue);\r\n }}>\r\n {this.state?.pwdBadgeVariant && this.state?.pwdBadgeLabel && {this.state.pwdBadgeLabel}{(this.state?.pwdBadgeVariant == \"danger\" || this.state?.pwdBadgeVariant == \"warning\") && }}\r\n {\r\n this.setState({ confirmationPassword: newValue });\r\n }}>\r\n
Save new Password{this.state.isProcessing && }
\r\n\r\n\r\n :\r\n <>\r\n {\r\n if(newValue && newValue.trim().length !== 0){\r\n this.setState({ email: newValue.trim() });\r\n } else {\r\n this.setState({ email: null });\r\n }\r\n }}>\r\n
{this.state.confirmMode ? \"Send Confirmation Email\" : \"Reset Password\" }{this.state.isProcessing && }
\r\n\r\n \r\n }\r\n }\r\n {\r\n this.state.informationMessage ?\r\n { \r\n this.setState({ emailWasSent: false, informationMessage: null}, ()=>{\r\n window.location.href = `${Common.getCurrentServerUrl()}/`;\r\n });\r\n }}\r\n >{this.state.informationMessage} : \"\"\r\n } \r\n\r\n
\r\n\r\n
\r\n );\r\n }\r\n}","import * as React from \"react\";\r\nimport { Navbar } from \"react-bootstrap\";\r\nimport DataProvider from \"../../dataprovider/DataProvider\";\r\nimport { Redirect } from \"react-router\";\r\nimport { Button, Checkbox, css, DefaultButton, Dialog, DialogType, Label, Spinner, SpinnerSize, Stack } from \"office-ui-fabric-react\";\r\nimport { loadGapiInsideDOM, loadAuth2 } from \"gapi-script\";\r\nimport { MsalContext } from \"@azure/msal-react\";\r\nimport { IAuthenticatedUser, LoginComponent } from \"./LoginComponent\";\r\n\r\nexport interface IExternalConsentProps {\r\n\tsetAuthStatus: (loggedIn: boolean, user: IAuthenticatedUser) => Promise;\r\n\tloginComponent: LoginComponent;\r\n}\r\n\r\nexport interface IExternalConsentState {\r\n\tlegalNoticeChecked: boolean;\r\n\tprivacyNoticeChecked: boolean;\r\n\tredirectWelcome: boolean;\r\n\tuser: IAuthenticatedUser;\r\n\tshowWaitingSpinner: boolean;\r\n}\r\n\r\nexport class ExternalConsent extends React.Component {\r\n\tstatic contextType = MsalContext;\r\n\r\n\tconstructor(props: IExternalConsentProps) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tlegalNoticeChecked: false,\r\n\t\t\tprivacyNoticeChecked: false,\r\n\t\t\tredirectWelcome: false,\r\n\t\t\tuser: null,\r\n\t\t\tshowWaitingSpinner: false,\r\n\t\t};\r\n\t}\r\n\r\n\tpublic componentDidMount() {\r\n\t\tthis.setState({\r\n\t\t\tuser: JSON.parse(window.sessionStorage?.rsmConsentTarget),\r\n\t\t});\r\n\t}\r\n\r\n\tprivate onLegalNoticeClicked = (ev: any, checked?: boolean) => {\r\n\t\tthis.setState({ legalNoticeChecked: checked });\r\n\t};\r\n\r\n\tprivate onPrivacyNoticeClicked = (ev: any, checked?: boolean) => {\r\n\t\tthis.setState({ privacyNoticeChecked: checked });\r\n\t};\r\n\r\n\tprivate onConfirmClicked = () => {\r\n\t\tconsole.log(\"MSAL Context\", this.context);\r\n\t\tthis.setState({ showWaitingSpinner: true });\r\n\t\twindow.sessionStorage.removeItem(\"rsmConsentTarget\");\r\n\r\n\t\tthis.props.loginComponent\r\n\t\t\t.ensureSPUser(this.state.user, this.state.user.bearerToken.token, true)\r\n\t\t\t.then((finalUser) => {\r\n\t\t\t\twindow.sessionStorage.authToken = JSON.stringify(finalUser.bearerToken);\r\n\t\t\t\twindow.sessionStorage.stlUser = JSON.stringify(finalUser);\r\n\r\n\t\t\t\tthis.props.setAuthStatus(true, finalUser);\r\n\r\n\t\t\t\tthis.setState({ redirectWelcome: true, showWaitingSpinner: false });\r\n\t\t\t})\r\n\t\t\t.catch((err) => {\r\n\t\t\t\tlet error = err;\r\n\t\t\t\tif (err.message) {\r\n\t\t\t\t\terror = err.message;\r\n\t\t\t\t}\r\n\t\t\t\talert(\"Error: \" + error);\r\n\t\t\t});\r\n\t};\r\n\r\n\tprivate onNoConsentClicked = () => {\r\n\t\tvar that = this;\r\n\r\n\t\t// sign out of google, if it's a google account\r\n\t\ttry {\r\n\t\t\tloadGapiInsideDOM().then((gapi) => {\r\n\t\t\t\tconsole.log(\"Gapi loaded....\", gapi);\r\n\r\n\t\t\t\tgapi.load(\"auth2\", function () {\r\n\t\t\t\t\tconsole.log(\"auth2 loaded\", (window as any).gapi.auth2);\r\n\t\t\t\t\tgapi.auth2.getAuthInstance().then((auth2: any) => {\r\n\t\t\t\t\t\tauth2.signOut().then(() => {\r\n\t\t\t\t\t\t\tconsole.log(\"signed out.\");\r\n\t\t\t\t\t\t\tthat.setState({ redirectWelcome: true });\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t} catch (err) {\r\n\t\t\t/* ignore possible errors */\r\n\t\t}\r\n\r\n\t\t// sign out of microsoft, if it's a microsoft account\r\n\t\ttry {\r\n\t\t\tthis.context?.instance?.logoutRedirect({\r\n\t\t\t\tonRedirectNavigate: (url: string) => {\r\n\t\t\t\t\t// Return false if you would like to stop navigation after local logout\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t} catch (err) {\r\n\t\t\t/* ignore possible errors*/\r\n\t\t}\r\n\r\n\t\twindow.sessionStorage.removeItem(\"rsmConsentTarget\");\r\n\t};\r\n\r\n\tpublic render(): React.ReactElement {\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{this.state.redirectWelcome && }\r\n\t\t\t\t
\r\n\t\t\t\t\tHello {this.state?.user?.firstName} {this.state?.user?.lastName},
\r\n\t\t\t\t\t
\r\n\t\t\t\t\tThis is the first time you are accessing the Straumann Research Screening Site with your {this.state?.user?.accountType} account.\r\n\t\t\t\t\t
\r\n\t\t\t\t\tIn order to be able to access this site we need the following consent from you.\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n","import * as React from 'react';\r\nimport styles from './AttachmentComponent.module.scss';\r\nimport { IconButton, Link, Label, Spinner, ActionButton, Dialog, DialogType, DialogFooter, PrimaryButton, DefaultButton, css, mergeStyles, Stack } from 'office-ui-fabric-react';\r\nimport { IFileItem } from './../../Models/IFileItem';\r\nimport HttpService from '../../dataprovider/HttpService';\r\n\r\ndeclare type AttachmentClickBehaviour = \"EditInBrowser\" | \"Download\" | \"SimpleOpen\";\r\n\r\ndeclare type DeletePermissions = \"All\" | \"Own\" | \"None\";\r\n\r\nexport interface IAttachmentComponentProps {\r\n title?: string;\r\n\r\n apiEndpointSP: string;\r\n\r\n attachments?: Array;\r\n attachment?: IFileItem | File;\r\n\r\n readonly: boolean;\r\n deletePermissions: DeletePermissions;\r\n extensionFilters: string[];\r\n attachmentClickBehaviour: AttachmentClickBehaviour;\r\n enableDropZone: boolean;\r\n fileMode: \"SingleFile\" | \"MultiFile\";\r\n required?: boolean;\r\n\r\n maxHeightFileList?: number;\r\n\r\n isLoading?: boolean;\r\n\r\n borderStyle?: string;\r\n displayStyle?: \"block\" | \"inline-block\";\r\n\r\n maxFileNameWidth?: string;\r\n\r\n //Added for file compatibility, Purpose is to remove dependence of file name for file download and access\r\n useFileIdToDownloadFile?: string;\r\n // events\r\n onFilesAdded: (files: File[]) => Promise;\r\n onFileReplaced?: (file: File) => Promise;\r\n onFileDeleted: (file: IFileItem | File) => Promise;\r\n\r\n errorMessage?: string;\r\n}\r\n\r\nexport interface IAttachmentComponentState {\r\n title: string;\r\n attachments: Array;\r\n attachment: IFileItem | File;\r\n readonly: boolean;\r\n deletePermissions: DeletePermissions;\r\n attachmentClickBehaviour: AttachmentClickBehaviour;\r\n enableDropZone: boolean;\r\n fileMode: \"SingleFile\" | \"MultiFile\";\r\n required: boolean;\r\n\r\n maxHeightFileList: number;\r\n\r\n isLoading: boolean;\r\n isAddingFile: boolean;\r\n isExchangingFile: boolean;\r\n isDeletingFile: boolean;\r\n\r\n draggingOver: boolean;\r\n //dragCounter: number;\r\n isDeleteConfirmationOpen: boolean;\r\n deleteConfirmationAttachment: IFileItem | File;\r\n\r\n isBadFilesDialogOpen: boolean;\r\n // badFiles: File[];\r\n badFiles: {\r\n invalidExtensionFiles: File[];\r\n invalidNameFiles: File[];\r\n };\r\n badFilesDialogCallback: () => void;\r\n\r\n errorMessage?: string;\r\n}\r\n\r\nexport class AttachmentComponent extends React.Component {\r\n\r\n // tslint:disable-next-line:member-access\r\n static defaultProps = {\r\n useFileIdToDownloadFile: false\r\n };\r\n\r\n private fileInputRef: React.RefObject = null;\r\n //private dragCounter: number = 0;\r\n\r\n constructor(props: IAttachmentComponentProps) {\r\n super(props);\r\n\r\n this.state = {\r\n title: props.title ? props.title : null,\r\n attachments: props.attachments ? props.attachments : [],\r\n attachment: props.attachment ? props.attachment : null,\r\n readonly: props.readonly,\r\n deletePermissions: props.deletePermissions,\r\n attachmentClickBehaviour: props.attachmentClickBehaviour,\r\n enableDropZone: props.enableDropZone,\r\n fileMode: props.fileMode,\r\n required: !!props.required,\r\n\r\n maxHeightFileList: props.maxHeightFileList ? props.maxHeightFileList : 105,\r\n\r\n isLoading: props.isLoading ? props.isLoading : false,\r\n isAddingFile: false,\r\n isExchangingFile: false,\r\n isDeletingFile: false,\r\n\r\n draggingOver: false,\r\n //dragCounter: 0,\r\n isDeleteConfirmationOpen: false,\r\n deleteConfirmationAttachment: null,\r\n isBadFilesDialogOpen: false,\r\n badFiles: {\r\n invalidExtensionFiles: [],\r\n invalidNameFiles: []\r\n },\r\n badFilesDialogCallback: null,\r\n\r\n errorMessage: props.errorMessage\r\n };\r\n\r\n this.fileInputRef = React.createRef();\r\n }\r\n\r\n public componentWillReceiveProps(newProps: IAttachmentComponentProps) {\r\n if (this.state.title != newProps.title) {\r\n this.setState({ title: newProps.title });\r\n }\r\n\r\n if ((this.state.attachments != newProps.attachments && newProps.attachments) || (this.state.attachments && newProps.attachments && this.state.attachments.length != newProps.attachments.length)) {\r\n this.setState({ attachments: [...newProps.attachments] });\r\n }\r\n\r\n if (this.state.attachment != newProps.attachment) {\r\n this.setState({ attachment: newProps.attachment });\r\n }\r\n\r\n if (this.state.readonly != newProps.readonly) {\r\n this.setState({ readonly: newProps.readonly });\r\n }\r\n\r\n if (this.state.deletePermissions != newProps.deletePermissions) {\r\n this.setState({ deletePermissions: newProps.deletePermissions });\r\n }\r\n\r\n if (this.state.attachmentClickBehaviour != newProps.attachmentClickBehaviour) {\r\n this.setState({ attachmentClickBehaviour: newProps.attachmentClickBehaviour });\r\n }\r\n\r\n if (this.state.enableDropZone != newProps.enableDropZone) {\r\n this.setState({ enableDropZone: newProps.enableDropZone });\r\n }\r\n\r\n if (this.state.fileMode != newProps.fileMode) {\r\n this.setState({ fileMode: newProps.fileMode });\r\n }\r\n\r\n if (this.state.required != newProps.required) {\r\n this.setState({ required: newProps.required });\r\n }\r\n\r\n if (this.state.isLoading != newProps.isLoading) {\r\n this.setState({ isLoading: newProps.isLoading });\r\n }\r\n\r\n if (newProps.maxHeightFileList && this.state.maxHeightFileList != newProps.maxHeightFileList) {\r\n this.setState({ maxHeightFileList: newProps.maxHeightFileList });\r\n }\r\n\r\n if (this.state.errorMessage != newProps.errorMessage) {\r\n this.setState({ errorMessage: newProps.errorMessage });\r\n }\r\n }\r\n\r\n private triggerFileUpload = (files: FileList, mode: 'add' | 'exchange'): void => {\r\n if (files.length === 0) {\r\n return;\r\n }\r\n\r\n //let filteredFiles = this.filterAllowedFiles(files);\r\n //let rawFiles = Common.convertFileListToArray(files);\r\n //let badFiles = rawFiles.filter((file) => { return filteredFiles.indexOf(file) == -1; });\r\n\r\n let categorizedFiles = this.categorizeValidInvalidFiles(files);\r\n\r\n if (categorizedFiles.correctFiles.length != files.length) {\r\n // there are some invalid file types. Upload the valid ones, and report the invalid ones (via badFilesDialog)\r\n this.setState({\r\n badFilesDialogCallback: () => {\r\n if (categorizedFiles.correctFiles.length !== 0) {\r\n if (mode == \"add\") {\r\n this.props.onFilesAdded(categorizedFiles.correctFiles).then(() => {\r\n this.setState({\r\n isAddingFile: false,\r\n isExchangingFile: false,\r\n badFiles: {\r\n invalidExtensionFiles: [],\r\n invalidNameFiles: []\r\n }\r\n });\r\n });\r\n } else {\r\n this.props.onFileReplaced(categorizedFiles.correctFiles[0]).then(() => {\r\n this.setState({\r\n isAddingFile: false,\r\n isExchangingFile: false,\r\n badFiles: {\r\n invalidExtensionFiles: [],\r\n invalidNameFiles: []\r\n }\r\n });\r\n });\r\n }\r\n }\r\n },\r\n isBadFilesDialogOpen: true,\r\n badFiles: {\r\n invalidExtensionFiles: categorizedFiles.invalidExtensionFiles,\r\n invalidNameFiles: categorizedFiles.invalidNameFiles\r\n }\r\n // badFiles: {badFiles}\r\n });\r\n } else {\r\n if (mode == \"add\") {\r\n this.props.onFilesAdded(categorizedFiles.correctFiles).then(() => {\r\n this.setState({ isAddingFile: false, isExchangingFile: false });\r\n });\r\n } else {\r\n this.props.onFileReplaced(categorizedFiles.correctFiles[0]).then(() => {\r\n this.setState({ isAddingFile: false, isExchangingFile: false });\r\n });\r\n }\r\n }\r\n }\r\n\r\n private onFileDrop = (event: React.DragEvent): void => {\r\n if (!this.state.enableDropZone || this.state.readonly) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (this.state.fileMode == \"MultiFile\") {\r\n //console.log(\"DataTransfer:\", event.dataTransfer);\r\n //console.log(\"Files:\", event.dataTransfer.files);\r\n this.setState({ draggingOver: false });\r\n\r\n if (event.dataTransfer && event.dataTransfer.files && event.dataTransfer.files.length !== 0) {\r\n this.setState({ isAddingFile: true });\r\n\r\n this.triggerFileUpload(event.dataTransfer.files, 'add');\r\n }\r\n } else if (this.state.fileMode == \"SingleFile\") {\r\n this.setState({ draggingOver: false });\r\n\r\n if (event.dataTransfer && event.dataTransfer.files && event.dataTransfer.files.length !== 0) {\r\n\r\n let isExchange = this.state.attachment && this.props.onFileReplaced;\r\n if (isExchange) {\r\n this.setState({ isExchangingFile: true });\r\n } else {\r\n this.setState({ isAddingFile: true });\r\n }\r\n\r\n this.triggerFileUpload(event.dataTransfer.files, isExchange ? \"exchange\" : \"add\");\r\n }\r\n }\r\n }\r\n\r\n private onDraggingOver = (event: React.DragEvent): void => {\r\n if (!this.state.enableDropZone || this.state.readonly) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n //this.dragCounter++;\r\n //console.log(\"Entering... \" + this.dragCounter);\r\n\r\n this.setState({ draggingOver: true });\r\n }\r\n\r\n private onDragEnd = (event: React.DragEvent): void => {\r\n if (!this.state.enableDropZone || this.state.readonly) {\r\n return;\r\n }\r\n\r\n this.setState({ draggingOver: false });\r\n }\r\n\r\n private onDragExit = (event: React.DragEvent): void => {\r\n if (!this.state.enableDropZone || this.state.readonly) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n this.setState({ draggingOver: false });\r\n }\r\n\r\n private onDelete = (attachment: IFileItem | File): void => {\r\n if (this.state.readonly) {\r\n return;\r\n }\r\n\r\n if (attachment instanceof File) {\r\n console.log(`Deleting ${attachment.name}`, attachment);\r\n } else {\r\n console.log(`Deleting ${attachment.name}`, attachment);\r\n }\r\n this.setState({ isDeleteConfirmationOpen: true, deleteConfirmationAttachment: attachment });\r\n }\r\n\r\n private onDownload = (attachment: IFileItem): void => {\r\n window.open(`${window.location.origin}${this.props.apiEndpointSP}/Attachment/${encodeURIComponent(attachment.uniqueId)}`);\r\n }\r\n\r\n private onDeleteConfirmationDismiss = (action?: string): void => {\r\n if (action == \"Delete\") {\r\n this.setState({ isDeletingFile: true });\r\n if (this.state.deleteConfirmationAttachment instanceof File) {\r\n // pass file (that is not uploaded yet)\r\n this.props.onFileDeleted(this.state.deleteConfirmationAttachment).then(() => {\r\n this.setState({ isDeletingFile: false });\r\n });\r\n } else {\r\n // pass serverRelUrl of file on server\r\n this.props.onFileDeleted(this.state.deleteConfirmationAttachment).then(() => {\r\n this.setState({ isDeletingFile: false });\r\n });\r\n }\r\n }\r\n this.setState({ isDeleteConfirmationOpen: false }, () => { this.setState({ deleteConfirmationAttachment: null }); });\r\n }\r\n\r\n private onAddFileClicked = () => {\r\n if (this.state.readonly) {\r\n return;\r\n }\r\n\r\n this.fileInputRef.current.click();\r\n }\r\n\r\n private onInputFileChanged = (isExchange: boolean = false) => {\r\n if (isExchange) {\r\n this.setState({ isExchangingFile: true });\r\n } else {\r\n this.setState({ isAddingFile: true });\r\n }\r\n\r\n this.triggerFileUpload(this.fileInputRef.current.files, isExchange ? \"exchange\" : \"add\");\r\n }\r\n\r\n private filterAllowedFiles = (files: FileList): File[] => {\r\n let result: File[] = [];\r\n for (var i = 0; i < files.length; i++) {\r\n let file = files.item(i);\r\n\r\n if (this.props.extensionFilters && this.props.extensionFilters.length) {\r\n let extension = file.name.toLocaleLowerCase().replace(/.*(\\.\\S*?)/gm, \"$1\");\r\n let match = this.props.extensionFilters.some(filter => { return filter.toLocaleLowerCase().indexOf(extension) == 0; });\r\n if (match) {\r\n result.push(file);\r\n }\r\n }\r\n else {\r\n result.push(file);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n private categorizeValidInvalidFiles = (files: FileList): {\r\n correctFiles: File[];\r\n invalidExtensionFiles: File[];\r\n invalidNameFiles: File[];\r\n } => {\r\n let result: {\r\n correctFiles: File[];\r\n invalidExtensionFiles: File[];\r\n invalidNameFiles: File[];\r\n } = {\r\n correctFiles: [],\r\n invalidExtensionFiles: [],\r\n invalidNameFiles: []\r\n };\r\n\r\n let invalidFileNameCharacters = new RegExp(/[\\\\/:*?\\\"<>|]+/, \"g\");\r\n\r\n for (var i = 0; i < files.length; i++) {\r\n let file = files.item(i);\r\n let isFileNameInvalid = invalidFileNameCharacters.test(file.name);\r\n\r\n if (this.props.extensionFilters && this.props.extensionFilters.length) {\r\n let extension = file.name.toLocaleLowerCase().replace(/.*(\\.\\S*?)/gm, \"$1\");\r\n let match = this.props.extensionFilters.some(filter => { return filter.toLocaleLowerCase().indexOf(extension) == 0; });\r\n\r\n if (isFileNameInvalid)\r\n result.invalidNameFiles.push(file);\r\n\r\n if (match) {\r\n if (!isFileNameInvalid)\r\n result.correctFiles.push(file);\r\n }\r\n else {\r\n result.invalidExtensionFiles.push(file);\r\n }\r\n }\r\n else {\r\n if (isFileNameInvalid)\r\n result.invalidNameFiles.push(file);\r\n else\r\n result.correctFiles.push(file);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n public render(): React.ReactElement {\r\n\r\n let listItemStyle: React.CSSProperties = { height: '20px' };\r\n //let linkStyle: React.CSSProperties = { color: 'inherit', overflowX:'hidden', textOverflow:'ellipsis', wordBreak:'break-all' };\r\n let linkStyle: React.CSSProperties = { color: 'blue', cursor: 'pointer' };\r\n let deleteButtonStyle = { color: 'inherit', height: '20px' };\r\n let addButtonStyle = { color: 'inherit' };\r\n let spinnerStyle = { color: 'inherit' };\r\n\r\n /**\r\n * Default styles:\r\n * - Single File: no border, inline-block style\r\n * - Multi file: border, block display style\r\n */\r\n let borderStyle = this.props.borderStyle || this.state.fileMode == 'SingleFile' ? \"0px\" : '1px solid rgb(255, 255, 255, 0.4)';\r\n let displayStyle = this.props.displayStyle || this.state.fileMode == 'SingleFile' ? \"inline-block\" : \"block\";\r\n\r\n let placeholderWidth = this.state.deletePermissions == \"None\" || this.state.readonly ? \"0px\" : \"32px\";\r\n let deletePlaceholder = ;\r\n let makeAttachmentHyperlink = (attachment: IFileItem | File) => {\r\n if (attachment instanceof File) {\r\n return {attachment.name};\r\n }\r\n if (this.state.attachmentClickBehaviour == \"EditInBrowser\") {\r\n // office webapp links open office files directly in office web apps, other documents are opened with browser if possible\r\n return { window.open(`${attachment.serverRelativeUrl}?web=1`); }}>{attachment.name};\r\n } else if (this.state.attachmentClickBehaviour == \"Download\") {\r\n // otherwise...if file should download directly\r\n return {attachment.name};\r\n } else {\r\n // last option, just open 1:1 in browser\r\n return { window.open(`${attachment.serverRelativeUrl}`); }}>{attachment.name};\r\n }\r\n };\r\n\r\n let userHasDeletePermissions = (attachment: IFileItem | File) => {\r\n if (attachment instanceof File) {\r\n // these are pending uploads. I just added it, so I'm allowed to also remove it\r\n return true;\r\n }\r\n return !this.state.readonly && (this.state.deletePermissions == \"All\" || this.state.deletePermissions == \"Own\");\r\n };\r\n\r\n let getFileName = (attachment: IFileItem | File) => {\r\n if (attachment instanceof File) {\r\n return attachment.name;\r\n }\r\n return (attachment as IFileItem).name;\r\n };\r\n\r\n let dropZoneTooltip = !this.state.readonly ? \"Drag/Drop file to upload\" : \"\";\r\n\r\n let spinnerIcon: React.ReactElement = this.state.isLoading ?\r\n \r\n :\r\n this.state.isAddingFile ?\r\n \r\n :\r\n this.state.isDeletingFile ?\r\n \r\n :\r\n this.state.isExchangingFile ?\r\n \r\n :\r\n null;\r\n\r\n let isExchangeMode = this.state.fileMode == \"MultiFile\" ? false : this.state.attachment ? true : false;\r\n\r\n const styleError: string = mergeStyles({\r\n fontFamily: 'Segoe UI, Segoe UI Web (West European), Segoe UI, -apple-system, BlinkMacSystemFont, Roboto, Helvetica Neue, sans-serif',\r\n fontSize: '12px',\r\n fontWeight: 400,\r\n color: 'rgb(164, 38, 44)',\r\n margin: '0px',\r\n paddingTop: '5px',\r\n display: 'flex',\r\n alignItems: 'center'\r\n });\r\n\r\n return (\r\n
\r\n
\r\n {this.state.title ? {this.state.title} {this.state.required ? * : null} : null}\r\n {\r\n this.state.isLoading || this.state.isAddingFile || this.state.isDeletingFile || this.state.isExchangingFile ?\r\n spinnerIcon\r\n :\r\n <>\r\n {this.state.fileMode == \"MultiFile\" ?\r\n
\r\n {\r\n // show list of all attachments\r\n this.state.attachments ?\r\n this.state.attachments.map((attachment, i) => {\r\n if (attachment instanceof File) { }\r\n else if (attachment.isDeleted)\r\n return;\r\n return
\r\n {\r\n userHasDeletePermissions(attachment) ?\r\n \r\n : deletePlaceholder\r\n }\r\n {makeAttachmentHyperlink(attachment)}\r\n
;\r\n })\r\n : null\r\n }\r\n
\r\n :\r\n <>\r\n {\r\n // show single attachment\r\n this.state.attachment ?\r\n <>\r\n {userHasDeletePermissions(this.state.attachment) ?\r\n \r\n :\r\n deletePlaceholder}\r\n {makeAttachmentHyperlink(this.state.attachment)}\r\n \r\n :\r\n null\r\n }\r\n \r\n }\r\n {\r\n !this.state.readonly && (this.state.fileMode == 'MultiFile' || (displayStyle == 'inline-block' && !this.state.attachment) || displayStyle == 'block') ?\r\n
\r\n \r\n {isExchangeMode ? \"Replace File\" : \"Add File\"}\r\n {!this.props.readonly && }\r\n \r\n \r\n
: null\r\n }\r\n \r\n }\r\n
\r\n Drag and drop file(s) here to upload\r\n
\r\n
\r\n {\r\n this.state.deleteConfirmationAttachment ?\r\n this.onDeleteConfirmationDismiss}\r\n >\r\n \r\n this.onDeleteConfirmationDismiss(\"Delete\")} text=\"Delete\" />\r\n this.onDeleteConfirmationDismiss()} text=\"Cancel\" />\r\n \r\n : null\r\n }\r\n {\r\n this.state.isBadFilesDialogOpen ?\r\n {\r\n this.setState({ isBadFilesDialogOpen: false, isAddingFile: false, isExchangingFile: false }, () => {\r\n if (this.state.badFilesDialogCallback)\r\n this.state.badFilesDialogCallback();\r\n });\r\n }}\r\n >\r\n {\r\n this.state.badFiles.invalidExtensionFiles && this.state.badFiles.invalidExtensionFiles.length &&\r\n
Only files with following extensions are allowed:\r\n
    \r\n {this.props.extensionFilters.map(ext =>
  • {ext}
  • )}\r\n
\r\n The following files will not be uploaded:\r\n
    \r\n {this.state.badFiles.invalidExtensionFiles.map((badFile) => { return
  • {badFile.name}
  • ; })}\r\n
\r\n
\r\n }\r\n {\r\n this.state.badFiles.invalidNameFiles && this.state.badFiles.invalidNameFiles.length &&\r\n
Characters that aren't allowed in file name\r\n
    \r\n
  • {`\" * : < > ? / \\ |`}
  • \r\n
\r\n The following files will not be uploaded:\r\n
    \r\n {this.state.badFiles.invalidNameFiles.map((badFile) => { return
  • {badFile.name}
  • ; })}\r\n
\r\n
\r\n }\r\n \r\n this.setState({ isBadFilesDialogOpen: false, isAddingFile: false, isExchangingFile: false }, () => {\r\n if (this.state.badFilesDialogCallback)\r\n this.state.badFilesDialogCallback();\r\n })} text=\"OK\" />\r\n \r\n :\r\n null\r\n }\r\n
\r\n );\r\n }\r\n}","import * as React from \"react\";\r\nimport { css, Stack, Dialog, Spinner, DialogType, SpinnerSize } from \"office-ui-fabric-react\";\r\nimport { IUserAccount } from \"../LoginComponent/LoginComponent\";\r\nimport { IAccessRequest } from \"../../Models/IAccessRequest\";\r\nimport \"./../../Styles/Access.scss\";\r\nimport ReCAPTCHA from \"react-google-recaptcha\";\r\nimport { BrowserRouter as Router, useParams } from \"react-router-dom\";\r\nimport { cloneDeep } from \"lodash\";\r\nimport { AccessRequestSchema } from \"../../Models/Constant\";\r\nimport { IDataProvider } from \"../../dataprovider/IDataProvider\";\r\nimport { IAskAccess } from \"../../Models/IAskAccess\";\r\nimport { RequesterData } from \"../RequesterData/RequesterData\";\r\nimport { CaptchaAndSubmitAction } from \"../RequestCaptchaAndSubmitAction/RequestCaptchaAndSubmitAction\";\r\nimport { AttachmentComponent } from \"../AttachmentComponent/AttachmentComponent\";\r\nimport { IFileItem } from \"../../Models/IFileItem\";\r\nimport { PageURL } from \"../../App\";\r\nexport interface ISubmitAgreementProps {\r\n\tlocation: Location;\r\n\thistory: any;\r\n\tstepSizeClass: string;\r\n\tisLoggedIn: boolean;\r\n\tdataProvider: IDataProvider;\r\n\tcurrentUser?: IUserAccount;\r\n}\r\n\r\nexport interface ISubmitAgreementState {\r\n\tdata: IAskAccess;\r\n\treCaptchaToken: string;\r\n\tisCaptchaValid: boolean;\r\n\tisProcessing: boolean;\r\n\tattachment: any;\r\n\trequestId: string;\r\n\tnoAttachmentError: string;\r\n\tcanSubmitAgreement: boolean;\r\n\tshowInReviewMsg: boolean;\r\n\tshowSuccessMessage: boolean;\r\n\tshowSpinner: boolean;\r\n\tshowInitialLoader: boolean;\r\n\tshowNoRequestFound: boolean;\r\n}\r\n\r\nconst extensionFilters = [\".pdf\"];\r\nexport const SubmitAgreement = (props: ISubmitAgreementProps) => {\r\n\tconst refReCaptchaRegister = React.createRef();\r\n\tconst { id } = useParams<{ id: string }>();\r\n\tconst [state, setState] = React.useState({\r\n\t\tdata: AccessRequestSchema,\r\n\t\treCaptchaToken: \"\",\r\n\t\tisCaptchaValid: true,\r\n\t\tisProcessing: false,\r\n\t\tattachment: null,\r\n\t\trequestId: null,\r\n\t\tnoAttachmentError: null,\r\n\t\tcanSubmitAgreement: false,\r\n\t\tshowInReviewMsg: false,\r\n\t\tshowSuccessMessage: false,\r\n\t\tshowSpinner: false,\r\n\t\tshowInitialLoader: false,\r\n\t\tshowNoRequestFound: false,\r\n\t});\r\n\r\n\tReact.useEffect(() => {\r\n\t\t(async () => {\r\n\t\t\tconst dataClone: IAskAccess = cloneDeep(state.data);\r\n\t\t\ttry {\r\n\t\t\t\tsetState((prevState) => ({ ...prevState, showInitialLoader: true }));\r\n\t\t\t\tlet requestId: string = null;\r\n\t\t\t\tlet canCreateNewRequest = false;\r\n\t\t\t\tlet currentRequestStatus = \"\";\r\n\t\t\t\tlet canSubmitAgreement = false;\r\n\t\t\t\tlet showInReviewMsg = false;\r\n\t\t\t\tlet noRequestFound = false;\r\n\t\t\t\tconst response: any = await props.dataProvider.getUserDataForAgreementSubmission(id);\r\n\r\n\t\t\t\tif (response) {\r\n\t\t\t\t\tcanCreateNewRequest = response[\"canCreateNewRequest\"] ? response[\"canCreateNewRequest\"] : false;\r\n\t\t\t\t\tcurrentRequestStatus = response[\"currentRequestStatus\"] ? response[\"currentRequestStatus\"] : \"\";\r\n\t\t\t\t\tif (currentRequestStatus == \"AccessApproved\") {\r\n\t\t\t\t\t\tprops.history.push(PageURL.Download);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!canCreateNewRequest && currentRequestStatus == \"DocumentSubmitted\") {\r\n\t\t\t\t\t\tshowInReviewMsg = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (currentRequestStatus == \"AskForAccess\") {\r\n\t\t\t\t\t\tif (id) {\r\n\t\t\t\t\t\t\tconst response = await props.dataProvider.getAccessRequestForAgreementSubmission(id);\r\n\t\t\t\t\t\t\tdataClone.Company.value = response[\"company\"];\r\n\t\t\t\t\t\t\tdataClone.Name.value = response[\"name\"];\r\n\t\t\t\t\t\t\tdataClone.Reason.value = response[\"reason\"];\r\n\t\t\t\t\t\t\tdataClone.EMail.value = response[\"eMail\"];\r\n\t\t\t\t\t\t\tdataClone.AccessRequestId.value = response[\"title\"];\r\n\t\t\t\t\t\t\tdataClone.Id.value = response[\"id\"];\r\n\t\t\t\t\t\t\tdataClone.IsAgreed.value = \"Yes\";\r\n\t\t\t\t\t\t\trequestId = response[\"title\"];\r\n\t\t\t\t\t\t\tcanSubmitAgreement = true;\r\n\t\t\t\t\t\t\tnoRequestFound = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (currentRequestStatus == \"\" || currentRequestStatus == \"AccessDenied\") {\r\n\t\t\t\t\t\tprops.history.push(\"/\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (!response) {\r\n\t\t\t\t\tnoRequestFound = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsetState((prevState) => ({\r\n\t\t\t\t\t...prevState,\r\n\t\t\t\t\tshowInitialLoader: false,\r\n\t\t\t\t\trequestId: requestId,\r\n\t\t\t\t\tdata: dataClone,\r\n\t\t\t\t\tcanSubmitAgreement: canSubmitAgreement,\r\n\t\t\t\t\tshowInReviewMsg: showInReviewMsg,\r\n\t\t\t\t\tshowNoRequestFound: noRequestFound,\r\n\t\t\t\t}));\r\n\t\t\t} catch (ex) {\r\n\t\t\t\tconsole.log(ex);\r\n\t\t\t\tsetState((prevState) => ({\r\n\t\t\t\t\t...prevState,\r\n\t\t\t\t\tshowInitialLoader: false,\r\n\t\t\t\t\tcanSubmitAgreement: false,\r\n\t\t\t\t\tshowInReviewMsg: false,\r\n\t\t\t\t\tshowNoRequestFound: true,\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\t\t})();\r\n\t}, []);\r\n\r\n\tconst handleTextFieldChange = (fieldName: string, value: string) => {\r\n\t\tconst dataClone: any = cloneDeep(state.data);\r\n\t\tdataClone[fieldName].value = value;\r\n\r\n\t\tsetState((prevState) => ({ ...prevState, data: dataClone }));\r\n\t};\r\n\r\n\tconst handleCheckBoxChange = (fieldName: string, value: boolean) => {\r\n\t\tconst dataClone: any = cloneDeep(state.data);\r\n\t\tif (value) {\r\n\t\t\tdataClone[fieldName].value = \"Yes\";\r\n\t\t} else {\r\n\t\t\tdataClone[fieldName].value = \"\";\r\n\t\t}\r\n\t\tsetState((prevState) => ({ ...prevState, data: dataClone }));\r\n\t};\r\n\r\n\tconst validateFormFields = () => {\r\n\t\tsetState((prevState) => ({ ...prevState, isProcessing: true }));\r\n\t\tlet formValid = true;\r\n\t\tlet captchaValid = true;\r\n\t\tconst dataClone: any = cloneDeep(state.data);\r\n\t\tObject.keys(dataClone).forEach((field) => {\r\n\t\t\tif (dataClone[field].hasOwnProperty(\"value\") && dataClone[field].value != null && dataClone[field].value != \"\") {\r\n\t\t\t\tdataClone[field].valid = true;\r\n\t\t\t} else {\r\n\t\t\t\tdataClone[field].valid = false;\r\n\t\t\t\tformValid = false;\r\n\t\t\t}\r\n\t\t});\r\n\t\tif (state.reCaptchaToken == \"\") {\r\n\t\t\tcaptchaValid = false;\r\n\t\t\tformValid = false;\r\n\t\t}\r\n\r\n\t\tif (!state.attachment) {\r\n\t\t\tformValid = false;\r\n\t\t\tsetState((prevState) => ({ ...prevState, noAttachmentError: \"Please attach signed agreement.\" }));\r\n\t\t}\r\n\t\tsetState((prevState) => ({ ...prevState, data: dataClone, isProcessing: false, isCaptchaValid: captchaValid }));\r\n\t\treturn formValid;\r\n\t};\r\n\r\n\tconst onSubmitButtonClicked = async () => {\r\n\t\tsetState((prevState) => ({ ...prevState, showSpinner: true }));\r\n\r\n\t\tconst isFormValid = validateFormFields();\r\n\r\n\t\tif (isFormValid) {\r\n\t\t\tif (state.attachment) {\r\n\t\t\t\tlet file: any = await toBase64(state.attachment);\r\n\t\t\t\tfile = file.split(\",\")[1];\r\n\t\t\t\tconst accessRequestData: IAccessRequest = {};\r\n\t\t\t\tconst dataClone: any = cloneDeep(state.data);\r\n\t\t\t\tObject.keys(dataClone).forEach((field) => {\r\n\t\t\t\t\t(accessRequestData as any)[field] = (dataClone as any)[field].value;\r\n\t\t\t\t});\r\n\t\t\t\taccessRequestData.UserId = id;\r\n\r\n\t\t\t\tprops.dataProvider\r\n\t\t\t\t\t.submitAgreement(accessRequestData, file)\r\n\t\t\t\t\t.then(async (result: any) => {\r\n\t\t\t\t\t\tsetState((prevState) => ({ ...prevState, showSpinner: false, showSuccessMessage: true, canSubmitAgreement: false }));\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch((error) => {\r\n\t\t\t\t\t\tconsole.log(error);\r\n\t\t\t\t\t\tsetState((prevState) => ({ ...prevState, showSpinner: false, showSuccessMessage: false, canSubmitAgreement: true }));\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tsetState((prevState) => ({ ...prevState, showSpinner: false }));\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleFilesAdded = (files: File[]): Promise => {\r\n\t\tsetState((prevState) => ({ ...prevState, attachment: files[0] }));\r\n\t\treturn Promise.resolve();\r\n\t};\r\n\r\n\tconst handleFilesDeleted = (file: File | IFileItem): Promise => {\r\n\t\tsetState((prevState) => ({ ...prevState, attachment: null }));\r\n\t\treturn Promise.resolve();\r\n\t};\r\n\r\n\tconst toBase64 = (file: File) =>\r\n\t\tnew Promise((resolve, reject) => {\r\n\t\t\tconst reader = new FileReader();\r\n\t\t\treader.readAsDataURL(file);\r\n\t\t\treader.onload = () => resolve(reader.result);\r\n\t\t\treader.onerror = (error) => reject(error);\r\n\t\t});\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{state.showInitialLoader && }\r\n\t\t\t{state.canSubmitAgreement && (\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\tUpload Agreement(as pdf)\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t setState((prevState) => ({ ...prevState, reCaptchaToken: token }))}\r\n\t\t\t\t\t\tonButtonClicked={onSubmitButtonClicked}\r\n\t\t\t\t\t\trefReCaptchaRegister={refReCaptchaRegister}\r\n\t\t\t\t\t\tisCaptchaValid={state.isCaptchaValid}\r\n\t\t\t\t\t\tisSubmitProcessing={state.isProcessing}\r\n\t\t\t\t\t\tbuttonTitle=\"Submit\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t
\r\n\t\t\t)}\r\n\t\t\t{state.showSuccessMessage && (\r\n\t\t\t\t\r\n\t\t\t\t\t
Your agreement has been submitted
\r\n\t\t\t\t
\r\n\t\t\t)}\r\n\t\t\t{state.showInReviewMsg && (\r\n\t\t\t\t\r\n\t\t\t\t\t
Your current request is in review state
\r\n\t\t\t\t
\r\n\t\t\t)}\r\n\t\t\t{state.showNoRequestFound && (\r\n\t\t\t\t\r\n\t\t\t\t\t
No request found for your Id
\r\n\t\t\t\t
\r\n\t\t\t)}\r\n\t\t\r\n\t);\r\n};\r\n","import { ColumnActionsMode, IColumn, IContextualMenuItem } from \"office-ui-fabric-react\";\r\nimport { cellStyle } from \"./DocumentsListView/Constant\";\r\nimport moment from \"moment\";\r\nimport CamlBuilder from \"camljs\";\r\nimport { IFilterOption } from \"./DocumentsListView/DocumentsListView\";\r\nimport { cloneDeep } from \"lodash\";\r\n\r\nexport namespace DocumentsSearchAndDownloadService {\r\n export const getColumnSchema = (_onColumnContextMenu: any): IColumn[] => {\r\n const viewColumnsSchema: IColumn[] = [\r\n // {\r\n // \tkey: \"Names\",\r\n // \tname: \"Names\",\r\n // \tfieldName: \"Name\",\r\n // \tminWidth: 250,\r\n // \tmaxWidth: 250,\r\n // \tstyles: cellStyle,\r\n // \tcolumnActionsMode: ColumnActionsMode.hasDropdown,\r\n // \tonColumnClick: (ev: React.MouseEvent, column: IColumn) => _onColumnContextMenu(column, ev),\r\n // \tonColumnContextMenu: _onColumnContextMenu,\r\n // },\r\n {\r\n key: \"Material\",\r\n name: \"Material Number\",\r\n fieldName: \"Material\",\r\n minWidth: 100,\r\n maxWidth: 150,\r\n styles: cellStyle,\r\n columnActionsMode: ColumnActionsMode.hasDropdown,\r\n onColumnClick: (ev: React.MouseEvent, column: IColumn) => _onColumnContextMenu(column, ev),\r\n onColumnContextMenu: _onColumnContextMenu,\r\n },\r\n {\r\n key: \"FileDescription\",\r\n name: \"Description\",\r\n fieldName: \"FileDescription\",\r\n minWidth: 250,\r\n maxWidth: 250,\r\n styles: cellStyle,\r\n columnActionsMode: ColumnActionsMode.hasDropdown,\r\n onColumnClick: (ev: React.MouseEvent, column: IColumn) => _onColumnContextMenu(column, ev),\r\n onColumnContextMenu: _onColumnContextMenu,\r\n },\r\n {\r\n key: \"Brands\",\r\n name: \"Brands\",\r\n fieldName: \"Brand\",\r\n minWidth: 100,\r\n maxWidth: 100,\r\n styles: cellStyle,\r\n columnActionsMode: ColumnActionsMode.hasDropdown,\r\n onColumnClick: (ev: React.MouseEvent, column: IColumn) => _onColumnContextMenu(column, ev),\r\n onColumnContextMenu: _onColumnContextMenu,\r\n },\r\n\r\n {\r\n key: \"Products\",\r\n name: \"Implantlines\",\r\n fieldName: \"Product\",\r\n minWidth: 150,\r\n maxWidth: 150,\r\n styles: cellStyle,\r\n columnActionsMode: ColumnActionsMode.hasDropdown,\r\n onColumnClick: (ev: React.MouseEvent, column: IColumn) => _onColumnContextMenu(column, ev),\r\n onColumnContextMenu: _onColumnContextMenu,\r\n },\r\n {\r\n key: \"Types\",\r\n name: \"Types\",\r\n fieldName: \"Type\",\r\n minWidth: 100,\r\n maxWidth: 100,\r\n styles: cellStyle,\r\n columnActionsMode: ColumnActionsMode.hasDropdown,\r\n onColumnClick: (ev: React.MouseEvent, column: IColumn) => _onColumnContextMenu(column, ev),\r\n onColumnContextMenu: _onColumnContextMenu,\r\n },\r\n\r\n {\r\n key: \"LastUpdatedDate\",\r\n name: \"Last Updated Date\",\r\n fieldName: \"LastUpdatedDate\",\r\n minWidth: 150,\r\n maxWidth: 150,\r\n styles: cellStyle,\r\n isSortedDescending: false,\r\n isSorted: true,\r\n columnActionsMode: ColumnActionsMode.hasDropdown,\r\n onColumnClick: (ev: React.MouseEvent, column: IColumn) => _onColumnContextMenu(column, ev),\r\n onColumnContextMenu: _onColumnContextMenu,\r\n },\r\n {\r\n key: \"Downloaded\",\r\n name: \"Downloaded\",\r\n fieldName: \"Downloaded\",\r\n minWidth: 100,\r\n maxWidth: 100,\r\n styles: cellStyle,\r\n columnActionsMode: ColumnActionsMode.hasDropdown,\r\n onColumnClick: (ev: React.MouseEvent, column: IColumn) => _onColumnContextMenu(column, ev),\r\n onColumnContextMenu: _onColumnContextMenu,\r\n },\r\n ];\r\n\r\n return viewColumnsSchema;\r\n };\r\n\r\n export const getContextualSchema = (column: IColumn, _onColumnClick: any, _onFilterClick: any): IContextualMenuItem[] => {\r\n let items: IContextualMenuItem[] = [];\r\n if (column.fieldName != \"LastUpdatedDate\") {\r\n items = [\r\n {\r\n key: \"aToZ\",\r\n name: \"Sort\",\r\n iconProps: { iconName: \"Sort\" },\r\n onClick: (ev?: React.MouseEvent | React.KeyboardEvent, item?: IContextualMenuItem) =>\r\n _onColumnClick(ev, column),\r\n },\r\n ];\r\n } else {\r\n items = [\r\n {\r\n key: \"oldToNew\",\r\n name: \"Sort\",\r\n iconProps: { iconName: \"Sort\" },\r\n onClick: (ev?: React.MouseEvent | React.KeyboardEvent, item?: IContextualMenuItem) =>\r\n _onColumnClick(ev, column),\r\n },\r\n ];\r\n }\r\n if (column.fieldName == \"LastUpdatedDate\" || column.fieldName == \"Downloaded\") {\r\n items.push({\r\n key: \"filterBy\",\r\n name: \"Filter by \", // + column.name,\r\n canCheck: true,\r\n checked: column.isFiltered,\r\n onClick: (ev?: React.MouseEvent | React.KeyboardEvent, item?: IContextualMenuItem) =>\r\n _onFilterClick(column, ev, item),\r\n });\r\n }\r\n return items;\r\n };\r\n\r\n export const filterDataByColumn = (data: any, filterValues: IFilterOption[]) => {\r\n let results: any[] = [];\r\n let dataClone = cloneDeep(data);\r\n filterValues.forEach((filter) => {\r\n //dataClone = dataClone.filter(filterByColumn(filter.column, value));\r\n dataClone = dataClone.filter((item: any) => filter.values.includes(item[filter.column]));\r\n });\r\n\r\n return dataClone;\r\n };\r\n const escapeRegExp = (str: any) => str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\r\n const filterBy = (term: any) => {\r\n const re = new RegExp(escapeRegExp(term), \"i\");\r\n return (item: any) => {\r\n for (let prop in item) {\r\n if (!item.hasOwnProperty(prop)) {\r\n continue;\r\n }\r\n if (re.test(item[prop])) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n };\r\n export const getFilteredItemsForSearchTerm = (searchTerm: string, filteredItems: any[], initialItems: any[]) => {\r\n if (searchTerm === \"\") {\r\n return initialItems;\r\n } else {\r\n const filterItemsClone = JSON.parse(JSON.stringify(filteredItems));\r\n\r\n searchTerm = searchTerm.toLowerCase();\r\n let filterItemsArr: any[] = [];\r\n const found: any[] = filterItemsClone.filter(filterBy(searchTerm));\r\n if (found) {\r\n found.forEach((element) => {\r\n filterItemsArr.push(element);\r\n });\r\n }\r\n return filterItemsArr;\r\n }\r\n };\r\n export const onColumnClick = (refColumns: any, column: IColumn, refItems: any) => {\r\n const newColumns: IColumn[] = refColumns.current.slice();\r\n const currColumn: IColumn = newColumns.filter((currCol) => column.key == currCol.key)[0];\r\n newColumns.forEach((newCol: IColumn) => {\r\n if (newCol == currColumn) {\r\n currColumn.isSortedDescending = !currColumn.isSortedDescending;\r\n currColumn.isSorted = true;\r\n } else {\r\n newCol.isSorted = false;\r\n newCol.isSortedDescending = true;\r\n }\r\n });\r\n\r\n const newItems = copyAndSort(refItems.current, currColumn.fieldName!, currColumn.isSortedDescending);\r\n return newItems;\r\n };\r\n export const getValuesForFilterByOption = (data: any, filterBy: IColumn) => {\r\n let results = data.map((d: any) => (d[filterBy.fieldName] != undefined ? d[filterBy.fieldName] : \"\"));\r\n //let uniqueArray = [...new Set(results)];\r\n let uniqueArray = Array.from(new Set(results));\r\n return uniqueArray;\r\n };\r\n export const copyAndSort = (items: T[], columnKey: string, isSortedDescending?: boolean): T[] => {\r\n const key = columnKey as keyof T;\r\n return items.slice(0).sort((a: T, b: T) => ((isSortedDescending ? a[key] < b[key] : a[key] > b[key]) ? 1 : -1));\r\n };\r\n\r\n export const generateListViewItems = (\r\n data: any,\r\n alreadyDownloadedFiles: any,\r\n isVip: boolean,\r\n approvedFileTypes: string[],\r\n approvedProducts: string[]\r\n ): any => {\r\n let viewItems: any[] = [];\r\n let downloadedFiles: any[] = JSON.parse(alreadyDownloadedFiles);\r\n let sortedData: any[] = [];\r\n let resultNew = [];\r\n if (data) {\r\n const parsedData: any[] = JSON.parse(data);\r\n\r\n if (parsedData.length > 0) {\r\n sortedData = parsedData.sort((a, b) => a.Material.localeCompare(b.Material) || b.FileVersion - a.FileVersion);\r\n const result: any = {};\r\n for (const el of sortedData) {\r\n if (!result[el[\"Material\"]]) result[el[\"Material\"]] = [];\r\n result[el[\"Material\"]].push(el);\r\n }\r\n\r\n for (const group of Object.values(result)) {\r\n const item: any = group;\r\n resultNew.push(item.find((it: any) => it.FileVersion) || item[0]);\r\n }\r\n }\r\n\r\n resultNew.forEach((data, i) => {\r\n let isVaildEntry = false;\r\n if (!isVip) {\r\n if (approvedFileTypes.length > 0 && approvedProducts.length > 0) {\r\n if (approvedFileTypes.some((ft) => ft === data[\"FileType\"]) && approvedProducts.some((pr) => pr === data[\"Product\"])) {\r\n isVaildEntry = true;\r\n }\r\n } else if (approvedFileTypes.length > 0 && approvedProducts.length === 0) {\r\n if (approvedFileTypes.some((ft) => ft === data[\"FileType\"])) {\r\n isVaildEntry = true;\r\n }\r\n } else if (approvedFileTypes.length === 0 && approvedProducts.length > 0) {\r\n if (approvedProducts.some((pr) => pr === data[\"Product\"])) {\r\n isVaildEntry = true;\r\n }\r\n } else if (approvedFileTypes.length === 0 && approvedProducts.length === 0) {\r\n isVaildEntry = false;\r\n }\r\n } else {\r\n isVaildEntry = true;\r\n }\r\n if (isVaildEntry) {\r\n viewItems.push({\r\n Brand: data[\"Brand\"],\r\n Product: data[\"Product\"],\r\n Type: data[\"FileType\"],\r\n LastUpdatedDate: data[\"Modified\"] ? moment(data[\"LaunchDate\"]).format(\"DD.MM.YYYY\") : null,\r\n Downloaded:\r\n downloadedFiles.filter((dFile) => dFile[\"FileUniqueId\"] == data[\"UniqueId\"] && dFile[\"FileVersion\"] == data[\"FileVersion\"]).length > 0\r\n ? \"Yes\"\r\n : \"No\",\r\n ServerRelativeUrl: data[\"ServerRelativeUrl\"],\r\n LaunchDate: data[\"LaunchDate\"] ? moment(data[\"LaunchDate\"]).format(\"DD.MM.YYYY\") : \"\",\r\n Material: data[\"Material\"],\r\n IsVIP: data[\"IsVIP\"],\r\n DocType: data[\"DocType\"],\r\n Title: data[\"Name\"],\r\n Name: data[\"Name\"],\r\n UniqueId: data[\"UniqueId\"],\r\n FileVersion: data[\"FileVersion\"],\r\n FileDescription: data[\"FileDescription\"],\r\n HasOlderVersion:\r\n sortedData.filter((val) => val[\"Material\"] == data[\"Material\"] && new Date(data[\"LaunchDate\"]) <= new Date()).length > 1 ? true : false,\r\n });\r\n }\r\n });\r\n }\r\n const returnValue: any = {\r\n ViewItems: viewItems,\r\n AllItems: sortedData,\r\n };\r\n return returnValue;\r\n };\r\n\r\n export const getCamlQueryForSearchFilters = (brand: string, product: string, type: string, material: string, IsVIP: boolean) => {\r\n let camlBuilder = new CamlBuilder().Query().Where().NumberField(\"ID\").GreaterThan(0).ToString();\r\n\r\n //let camlBuilder = new CamlBuilder().Query().Where().NumberField(\"ID\").GreaterThan(0).And().DateField(\"LaunchDate\").LessThanOrEqualTo(new Date()).ToString();\r\n let query: any;\r\n\r\n if (!IsVIP) {\r\n query = CamlBuilder.FromXml(camlBuilder).ModifyWhere().AppendAnd().DateField(\"LaunchDate\").LessThanOrEqualTo(new Date()).ToString();\r\n if (query) {\r\n query = CamlBuilder.FromXml(query.toString()).ModifyWhere().AppendAnd().BooleanField(\"IsVIP\").IsFalse().ToString();\r\n } else {\r\n query = CamlBuilder.FromXml(camlBuilder).ModifyWhere().AppendAnd().BooleanField(\"IsVIP\").IsFalse().ToString();\r\n }\r\n }\r\n if (brand != null && brand != undefined && brand != \"\") {\r\n if (query) {\r\n query = CamlBuilder.FromXml(query.toString()).ModifyWhere().AppendAnd().LookupField(\"Brand\").ValueAsText().EqualTo(brand).ToString();\r\n } else {\r\n query = CamlBuilder.FromXml(camlBuilder).ModifyWhere().AppendAnd().LookupField(\"Brand\").ValueAsText().EqualTo(brand).ToString();\r\n }\r\n }\r\n if (product != null && product != undefined && product != \"\") {\r\n if (query) {\r\n query = CamlBuilder.FromXml(query.toString()).ModifyWhere().AppendAnd().LookupField(\"Product\").ValueAsText().EqualTo(product).ToString();\r\n } else {\r\n query = CamlBuilder.FromXml(camlBuilder).ModifyWhere().AppendAnd().LookupField(\"Product\").ValueAsText().EqualTo(product).ToString();\r\n }\r\n }\r\n if (type != null && type != undefined && type != \"\") {\r\n if (query) {\r\n query = CamlBuilder.FromXml(query.toString()).ModifyWhere().AppendAnd().LookupField(\"FileType\").ValueAsText().EqualTo(type).ToString();\r\n } else {\r\n query = CamlBuilder.FromXml(camlBuilder).ModifyWhere().AppendAnd().LookupField(\"FileType\").ValueAsText().EqualTo(type).ToString();\r\n }\r\n }\r\n if (material != null && material != undefined && material != \"\") {\r\n if (query) {\r\n query = CamlBuilder.FromXml(query.toString()).ModifyWhere().AppendAnd().TextField(\"Material\").Contains(material).ToString();\r\n } else {\r\n query = CamlBuilder.FromXml(camlBuilder).ModifyWhere().AppendAnd().TextField(\"Material\").Contains(material).ToString();\r\n }\r\n }\r\n if (query != undefined && query != null) {\r\n return query;\r\n } else {\r\n return camlBuilder;\r\n }\r\n };\r\n}\r\n","import { IDetailsColumnStyles, IDetailsListStyleProps, IDetailsListStyles, IStyleFunctionOrObject } from \"office-ui-fabric-react\";\r\n\r\nexport const cellStyle: Partial = {\r\n\tcellTitle: {\r\n\t\tfontWeight: 700,\r\n\t\tfontSize: \"13px\",\r\n\t\talignItems: \"center\",\r\n\t\tcolor: \"black\",\r\n\t},\r\n\tcellName: {\r\n\t\tfontWeight: 700,\r\n\t\twordBreak: \"break-word\",\r\n\t\tfontSize: \"13px\",\r\n\t},\r\n};\r\n\r\nexport const detailsListStyle: IStyleFunctionOrObject = {\r\n\theaderWrapper: {\r\n\t\tposition: \"sticky\",\r\n\t\ttop: 0,\r\n\t\tzIndex: 1,\r\n\t},\r\n};\r\n","import * as React from \"react\";\r\nimport { Label, Dropdown, IDropdownOption, TextField } from \"office-ui-fabric-react\";\r\n\r\ninterface IDocumentSearch {\r\n\tbrands: IDropdownOption[];\r\n\tproducts: IDropdownOption[];\r\n\ttypes: IDropdownOption[];\r\n\tmaterials: IDropdownOption[];\r\n\tselectedBrand: string;\r\n\tselectedProduct: string;\r\n\tselectedType: string;\r\n\tselectedMaterial: string;\r\n\tonBrandChange: (value: string) => void;\r\n\tonProductChange: (value: string) => void;\r\n\tonTypeChange: (value: string) => void;\r\n\tonMaterialChange: (value: string) => void;\r\n}\r\n\r\nconst DocumentSearchFilters = (props: IDocumentSearch) => {\r\n\tconst {\r\n\t\tbrands,\r\n\t\tmaterials,\r\n\t\tproducts,\r\n\t\ttypes,\r\n\t\tselectedBrand,\r\n\t\tselectedProduct,\r\n\t\tselectedType,\r\n\t\tselectedMaterial,\r\n\t\tonBrandChange,\r\n\t\tonProductChange,\r\n\t\tonTypeChange,\r\n\t\tonMaterialChange,\r\n\t} = props;\r\n\treturn (\r\n\t\t<>\r\n\t\t\t

Documents

\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t onMaterialChange(v)} />\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t onTypeChange(op.key as string)} />\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t onBrandChange(op.key as string)} />\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t onProductChange(op.key as string)} />\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default React.memo(DocumentSearchFilters);\r\n","import { Checkbox, DefaultButton, IColumn, PrimaryButton, Stack } from \"office-ui-fabric-react\";\r\nimport * as React from \"react\";\r\nimport { DocumentsSearchAndDownloadService } from \"../../DocumentSearchAndDownloadService\";\r\n\r\ninterface IFilterPanelProps {\r\n\tdata: any[];\r\n\tfilterBy: IColumn;\r\n\tselectedFilterOptions: any[];\r\n\tonCancel: () => void;\r\n\tonApply: (filterValues: string[]) => void;\r\n}\r\n\r\nconst filterStackTokens = { childrenGap: 10 };\r\nconst buttonStackTokens = { childrenGap: 10 };\r\n\r\nexport const FilterPanel = (props: IFilterPanelProps) => {\r\n\tconst [filterByValues, setFilterByValues] = React.useState([]);\r\n\tconst [selectedFilterValues, setSelectedFilterValues] = React.useState([]);\r\n\tconst [isApplyButtonEnabled, setIsApplyButtonEnabled] = React.useState(false);\r\n\r\n\tconst isApplyButtonEnabledonLoad = React.useRef(false);\r\n\tReact.useEffect(() => {\r\n\t\t(async () => {\r\n\t\t\tlet enableApplyButton = false;\r\n\t\t\tconst response: any = DocumentsSearchAndDownloadService.getValuesForFilterByOption(props.data, props.filterBy);\r\n\t\t\tlet prevFilterValues: string[] = [];\r\n\t\t\tif (props.selectedFilterOptions) {\r\n\t\t\t\tif (props.selectedFilterOptions.length > 0) {\r\n\t\t\t\t\tprops.selectedFilterOptions.forEach((option) => {\r\n\t\t\t\t\t\tif (option.column == props.filterBy.fieldName) {\r\n\t\t\t\t\t\t\toption.values.forEach((value: any) => {\r\n\t\t\t\t\t\t\t\tprevFilterValues.push(value);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (prevFilterValues.length > 0) {\r\n\t\t\t\tenableApplyButton = true;\r\n\t\t\t}\r\n\t\t\tsetFilterByValues(response);\r\n\t\t\tsetSelectedFilterValues(prevFilterValues);\r\n\t\t\tisApplyButtonEnabledonLoad.current = enableApplyButton;\r\n\t\t\tsetIsApplyButtonEnabled(enableApplyButton);\r\n\t\t})();\r\n\t}, []);\r\n\r\n\tconst handleCheckBoxChange = (ev?: React.FormEvent, checked?: boolean, f?: string) => {\r\n\t\tconst selectedFilterValuesClone = [...selectedFilterValues];\r\n\t\tlet enableApplyButton = false;\r\n\t\tif (checked) {\r\n\t\t\tselectedFilterValuesClone.push(f);\r\n\t\t\tenableApplyButton = true;\r\n\t\t} else {\r\n\t\t\tconst index = selectedFilterValuesClone.indexOf(f, 0);\r\n\t\t\tif (index > -1) {\r\n\t\t\t\tselectedFilterValuesClone.splice(index, 1);\r\n\t\t\t}\r\n\t\t\tif (isApplyButtonEnabledonLoad.current) {\r\n\t\t\t\tenableApplyButton = true;\r\n\t\t\t} else {\r\n\t\t\t\tif (selectedFilterValuesClone.length == 0) {\r\n\t\t\t\t\tenableApplyButton = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tenableApplyButton = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsetSelectedFilterValues(selectedFilterValuesClone);\r\n\t\tsetIsApplyButtonEnabled(enableApplyButton);\r\n\t};\r\n\r\n\tconst handleApplyAction = () => {\r\n\t\tprops.onApply(selectedFilterValues);\r\n\t};\r\n\r\n\tconst handleClearAll = () => {\r\n\t\tlet enableApplyButton = false;\r\n\r\n\t\tif (isApplyButtonEnabledonLoad.current) {\r\n\t\t\tenableApplyButton = true;\r\n\t\t}\r\n\r\n\t\tsetSelectedFilterValues([]);\r\n\t\tsetIsApplyButtonEnabled(enableApplyButton);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t{filterByValues != undefined ? (\r\n\t\t\t\t<>\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{filterByValues.map((f) => {\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t 0 && selectedFilterValues.indexOf(f) > -1 ? true : false}\r\n\t\t\t\t\t\t\t\t\t\tonChange={(ev, checked) => handleCheckBoxChange(ev, checked, f)}\r\n\t\t\t\t\t\t\t\t\t\tkey={f}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t) : null}\r\n\t\t\r\n\t);\r\n};\r\n","import { FontWeights, IButtonStyles, IIconProps, mergeStyleSets } from \"office-ui-fabric-react\";\r\n\r\nexport const cancelIcon: IIconProps = { iconName: \"Cancel\" };\r\nexport const iconButtonStyles: Partial = {\r\n\troot: {\r\n\t\tmarginLeft: \"auto\",\r\n\t\tmarginTop: \"4px\",\r\n\t\tmarginRight: \"2px\",\r\n\t},\r\n};\r\n\r\nexport const contentStyles = mergeStyleSets({\r\n\tcontainer: {\r\n\t\tdisplay: \"flex\",\r\n\t\tflexFlow: \"column nowrap\",\r\n\t\talignItems: \"stretch\",\r\n\t},\r\n\theader: {\r\n\t\tflex: \"1 1 auto\",\r\n\t\tborderTop: `4px solid`,\r\n\t\tdisplay: \"flex\",\r\n\t\talignItems: \"center\",\r\n\t\tfontWeight: FontWeights.semibold,\r\n\t\tpadding: \"12px 12px 14px 24px\",\r\n\t},\r\n\tbody: {\r\n\t\twidth: \"600px\",\r\n\t\tpadding: \"0 24px 24px 24px\",\r\n\t\toverflowY: \"auto\",\r\n\t\tselectors: {\r\n\t\t\tp: { margin: \"14px 0\" },\r\n\t\t\t\"p:first-child\": { marginTop: 0 },\r\n\t\t\t\"p:last-child\": { marginBottom: 0 },\r\n\t\t},\r\n\t},\r\n});\r\n","import * as React from \"react\";\r\nimport { ConstrainMode, DetailsList, DetailsListLayoutMode, IColumn, IconButton, IIconProps, Modal, SelectionMode } from \"office-ui-fabric-react\";\r\nimport { cancelIcon, iconButtonStyles, contentStyles } from \"./Constant\";\r\nimport { cellStyle } from \"../Constant\";\r\n\r\nexport interface IVersionHistoryProps {\r\n\tisModalOpen: boolean;\r\n\tonDismissModal: () => void;\r\n\tallItems: any[];\r\n\tdownloadedItems: any[];\r\n\tcurrentItem: any;\r\n}\r\nexport const VersionHistory = (props: IVersionHistoryProps) => {\r\n\tconst [versionHistory, setVersionHistory] = React.useState([]);\r\n\r\n\tReact.useEffect(() => {\r\n\t\tif (props.isModalOpen) {\r\n\t\t\tconst relatedItems = props.allItems.filter((value) => value[\"Material\"] == props.currentItem[\"Material\"]);\r\n\t\t\tconst relevantItems = relatedItems.filter((value) => value[\"UniqueId\"] != props.currentItem[\"UniqueId\"]);\r\n\r\n\t\t\tlet history: any[] = [];\r\n\r\n\t\t\trelatedItems.forEach((value, index) => {\r\n\t\t\t\tconst historyRecord: any = {};\r\n\t\t\t\tconst isDownloaded = props.downloadedItems.findIndex((dItem) => dItem[\"FileUniqueId\"] == value[\"UniqueId\"]);\r\n\t\t\t\tif (isDownloaded == -1) {\r\n\t\t\t\t\thistoryRecord.FileVersion = value[\"FileVersion\"];\r\n\t\t\t\t\thistoryRecord.Downloaded = \"No\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\thistoryRecord.FileVersion = value[\"FileVersion\"];\r\n\t\t\t\t\thistoryRecord.Downloaded = \"Yes\";\r\n\t\t\t\t}\r\n\t\t\t\thistory.push(historyRecord);\r\n\t\t\t});\r\n\t\t\tsetVersionHistory(history);\r\n\t\t}\r\n\t}, [props]);\r\n\treturn (\r\n\t\t\r\n\t\t\t
\r\n\t\t\t\tVersion History\r\n\t\t\t\t props.onDismissModal()} />\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\r\n\t);\r\n};\r\n\r\nconst viewColumnsSchema: IColumn[] = [\r\n\t{\r\n\t\tkey: \"FileVersion\",\r\n\t\tname: \"File Version\",\r\n\t\tfieldName: \"FileVersion\",\r\n\t\tminWidth: 150,\r\n\t\tmaxWidth: 200,\r\n\t\tstyles: cellStyle,\r\n\t},\r\n\t{\r\n\t\tkey: \"Downloaded\",\r\n\t\tname: \"Downloaded\",\r\n\t\tfieldName: \"Downloaded\",\r\n\t\tminWidth: 100,\r\n\t\tmaxWidth: 200,\r\n\t\tstyles: cellStyle,\r\n\t},\r\n];\r\n","import {\r\n\tColumnActionsMode,\r\n\tConstrainMode,\r\n\tContextualMenu,\r\n\tDetailsList,\r\n\tDetailsListLayoutMode,\r\n\tDirectionalHint,\r\n\tIColumn,\r\n\tIcon,\r\n\tIconButton,\r\n\tIContextualMenuItem,\r\n\tIDetailsColumnRenderTooltipProps,\r\n\tIDetailsHeaderProps,\r\n\tIRenderFunction,\r\n\tLink,\r\n\tmergeStyles,\r\n\tMessageBar,\r\n\tMessageBarType,\r\n\tPanel,\r\n\tPanelType,\r\n\tPrimaryButton,\r\n\tSelection,\r\n\tSelectionMode,\r\n\tSticky,\r\n\tStickyPositionType,\r\n\tTextField,\r\n\tTooltipHost,\r\n\tLabel,\r\n} from \"office-ui-fabric-react\";\r\nimport * as React from \"react\";\r\nimport { detailsListStyle } from \"./Constant\";\r\nimport { DocumentsSearchAndDownloadService } from \"../DocumentSearchAndDownloadService\";\r\nimport { FilterPanel } from \"./FilterPanel/FilterPanel\";\r\nimport { cloneDeep } from \"lodash\";\r\nimport { VersionHistory } from \"./VersionHistory/VersionHistory\";\r\nimport moment from \"moment\";\r\n\r\ninterface IDocumentListViewProps {\r\n\tfreeSearch: string;\r\n\titems: any[];\r\n\tallItems: any[];\r\n\tdownloadedItems: any[];\r\n\tselectedBrand?: string;\r\n\tselectedProduct?: string;\r\n\tselectedType?: string;\r\n\tonDownloadClick: (selectedItems: any[]) => void;\r\n\tonSearchClick: () => void;\r\n\tonNewestDocumentClick: () => void;\r\n\tonFreeSearchChange: (event: React.FormEvent, newValue?: string) => void;\r\n}\r\n\r\ninterface IDocumentListViewState {\r\n\tcolumns: any[];\r\n\titems: any[];\r\n\tcurrentItem: any;\r\n\tshowVersionHistory: boolean;\r\n\tcontextualMenuProps: any;\r\n\tcurrentSortedColumn: IColumn;\r\n\tpanelProps: any;\r\n\tfilterOptions: IFilterOption[];\r\n\tfilteredItems: any[];\r\n}\r\n\r\nexport interface IFilterOption {\r\n\tcolumn: string;\r\n\tvalues: string[];\r\n}\r\n\r\nconst DocumentListView = (props: IDocumentListViewProps) => {\r\n\tconst [state, setState] = React.useState({\r\n\t\tcolumns: [],\r\n\t\tcontextualMenuProps: undefined,\r\n\t\titems: props.items ? props.items : [],\r\n\t\tcurrentSortedColumn: null,\r\n\t\tpanelProps: {\r\n\t\t\tshow: false,\r\n\t\t\theader: \"\",\r\n\t\t\tcolumn: null,\r\n\t\t},\r\n\t\tfilterOptions: null,\r\n\t\tfilteredItems: [],\r\n\t\tshowVersionHistory: false,\r\n\t\tcurrentItem: null,\r\n\t});\r\n\tconst [selectedItems, setSelectedItems] = React.useState([]);\r\n\tconst selection = new Selection({\r\n\t\tonSelectionChanged: () => {\r\n\t\t\tsetSelectedItems(selection.getSelection());\r\n\t\t},\r\n\t});\r\n\r\n\tconst refColumns = React.useRef(state.columns);\r\n\tconst refItems = React.useRef(state.filteredItems);\r\n\tReact.useEffect(() => {\r\n\t\t(async () => {\r\n\t\t\tconst viewColumnsSchema: IColumn[] = DocumentsSearchAndDownloadService.getColumnSchema(_onColumnContextMenu);\r\n\t\t\trefColumns.current = viewColumnsSchema;\r\n\t\t\tconst currentSortedCol = viewColumnsSchema.filter((col) => col.isSorted == true)[0];\r\n\t\t\tsetState((prevState) => ({ ...prevState, columns: viewColumnsSchema, currentSortedColumn: currentSortedCol }));\r\n\t\t})();\r\n\t}, []);\r\n\r\n\tReact.useEffect(() => {\r\n\t\trefItems.current = props.items;\r\n\t\tconst viewColumnsSchema: IColumn[] = DocumentsSearchAndDownloadService.getColumnSchema(_onColumnContextMenu);\r\n\t\trefColumns.current = viewColumnsSchema;\r\n\t\tconst currentSortedColumn = viewColumnsSchema.filter((col) => col.isSorted == true)[0];\r\n\t\tconst newColumns: IColumn[] = refColumns.current.slice();\r\n\t\tconst currColumn: IColumn = newColumns.filter((currCol) => currentSortedColumn.key == currCol.key)[0];\r\n\t\tconst newItems = DocumentsSearchAndDownloadService.onColumnClick(refColumns, currentSortedColumn, refItems);\r\n\t\trefItems.current = newItems;\r\n\t\tsetState((prevState) => ({ ...prevState, items: props.items, columns: newColumns, filteredItems: newItems, currentSortedColumn: currColumn }));\r\n\t\t//setState((prevState) => ({ ...prevState, items: props.items, filteredItems: props.items }));\r\n\t}, [props.items]);\r\n\r\n\tconst _onColumnContextMenu = (column?: IColumn, ev?: React.MouseEvent) => {\r\n\t\tif (column.columnActionsMode !== ColumnActionsMode.disabled) {\r\n\t\t\tconst props = getContextualMenuProps(column, ev);\r\n\t\t\tsetState((prevState) => ({ ...prevState, contextualMenuProps: props }));\r\n\t\t}\r\n\t};\r\n\r\n\tconst getContextualMenuProps = (column?: IColumn, ev?: React.MouseEvent) => {\r\n\t\tlet items: IContextualMenuItem[] = DocumentsSearchAndDownloadService.getContextualSchema(column, _onColumnClick, _onFilterClick) || [];\r\n\t\treturn {\r\n\t\t\titems: items,\r\n\t\t\ttarget: ev.currentTarget as HTMLElement,\r\n\t\t\tdirectionalHint: DirectionalHint.bottomLeftEdge,\r\n\t\t\tgapSpace: 5,\r\n\t\t\tisBeakVisible: true,\r\n\t\t\tonDismiss: _onContextualMenuDismissed,\r\n\t\t};\r\n\t};\r\n\r\n\tconst _onContextualMenuDismissed = () => {\r\n\t\tsetState((prevState) => ({ ...prevState, contextualMenuProps: undefined }));\r\n\t};\r\n\r\n\tconst _onColumnClick = (ev: React.MouseEvent, column: IColumn): void => {\r\n\t\tconst newColumns: IColumn[] = refColumns.current.slice();\r\n\t\tconst currColumn: IColumn = newColumns.filter((currCol) => column.key == currCol.key)[0];\r\n\t\tconst newItems = DocumentsSearchAndDownloadService.onColumnClick(refColumns, column, refItems);\r\n\t\trefItems.current = newItems;\r\n\t\tsetState((prevState) => ({ ...prevState, columns: newColumns, filteredItems: newItems, currentSortedColumn: currColumn }));\r\n\t};\r\n\r\n\tconst _onFilterClick = (column: IColumn, ev?: React.MouseEvent | React.KeyboardEvent, item?: IContextualMenuItem) => {\r\n\t\t//setIsPanelVisible({ show: true, header: `Filter by '${column.name}'`, column: column });\r\n\t\tsetState((prevState: IDocumentListViewState) => ({ ...prevState, panelProps: { show: true, header: `Filter by '${column.name}'`, column: column } }));\r\n\t};\r\n\r\n\tconst dismissPanel = () => {\r\n\t\tsetState((prevState: IDocumentListViewState) => ({ ...prevState, panelProps: { show: false, header: \"\", column: null } }));\r\n\t};\r\n\r\n\tconst onRenderDetailsHeader: IRenderFunction = (props, defaultRender) => {\r\n\t\tif (!props) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst onRenderColumnHeaderTooltip: IRenderFunction = (tooltipHostProps) => ;\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{defaultRender!({\r\n\t\t\t\t\t...props,\r\n\t\t\t\t\tonRenderColumnHeaderTooltip,\r\n\t\t\t\t})}\r\n\t\t\t
\r\n\t\t);\r\n\t};\r\n\r\n\tconst onRenderItemColumn = (item: any, index: number, column: IColumn) => {\r\n\t\tif (column.key == \"Downloaded\") {\r\n\t\t\tconst hasOlderVersions = item[\"HasOlderVersion\"] as boolean;\r\n\t\t\tif (hasOlderVersions) {\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t{item[\"Downloaded\"]}\r\n\t\t\t\t\t\t onHistoryButtonClick(item)} />\r\n\t\t\t\t\t\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\treturn {item[\"Downloaded\"]};\r\n\t\t\t}\r\n\t\t} else if (column.key == \"Material\") {\r\n\t\t\treturn {item[column.fieldName] ? (item[column.fieldName] as number) : null};\r\n\t\t} else {\r\n\t\t\treturn {item[column.fieldName]};\r\n\t\t}\r\n\t};\r\n\r\n\tconst onHistoryButtonClick = (item: any) => {\r\n\t\tsetState((prevState) => ({ ...prevState, showVersionHistory: true, currentItem: item }));\r\n\t};\r\n\r\n\tconst handleDismissModal = () => {\r\n\t\tsetState((prevState) => ({ ...prevState, showVersionHistory: false }));\r\n\t};\r\n\r\n\tconst handleFilterSelection = async (filterValues: string[]) => {\r\n\t\tdismissPanel();\r\n\t\tlet objFilterOption: IFilterOption[] = [];\r\n\t\tconst newColumns = cloneDeep(state.columns);\r\n\t\tif (filterValues.length == 0) {\r\n\t\t\tif (state.filterOptions) {\r\n\t\t\t\tobjFilterOption = [...state.filterOptions];\r\n\t\t\t\tconst index = objFilterOption.findIndex((obj) => obj.column == state.panelProps.column.fieldName);\r\n\t\t\t\tif (index != -1) {\r\n\t\t\t\t\tobjFilterOption.splice(index, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tconst column = newColumns.filter((column) => column?.fieldName == state.panelProps.column.fieldName);\r\n\t\t\tcolumn[0].isFiltered = false;\r\n\t\t\tsetState((prevState) => ({ ...prevState, filterOptions: objFilterOption }));\r\n\t\t\tif (objFilterOption.length == 0) {\r\n\t\t\t\tnewColumns.forEach((column) => (column.isFiltered = false));\r\n\t\t\t\trefItems.current = state.items;\r\n\t\t\t\tsetState((prevState) => ({ ...prevState, filteredItems: state.items }));\r\n\t\t\t} else {\r\n\t\t\t\tconst response = DocumentsSearchAndDownloadService.filterDataByColumn(state.items, objFilterOption);\r\n\t\t\t\tconst newItems = DocumentsSearchAndDownloadService.copyAndSort(\r\n\t\t\t\t\tresponse,\r\n\t\t\t\t\tstate.currentSortedColumn.fieldName!,\r\n\t\t\t\t\tstate.currentSortedColumn.isSortedDescending\r\n\t\t\t\t);\r\n\t\t\t\trefItems.current = newItems;\r\n\t\t\t\tsetState((prevState) => ({ ...prevState, filteredItems: newItems }));\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (state.filterOptions) {\r\n\t\t\t\tobjFilterOption = [...state.filterOptions];\r\n\t\t\t}\r\n\t\t\tconst index = objFilterOption.findIndex((obj) => obj.column == state.panelProps.column.fieldName);\r\n\t\t\tif (index != -1) {\r\n\t\t\t\tobjFilterOption[index].values = [];\r\n\t\t\t\tfilterValues.forEach((value) => {\r\n\t\t\t\t\tobjFilterOption[index].values.push(value);\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tlet values: any = [];\r\n\t\t\t\tfilterValues.forEach((value) => {\r\n\t\t\t\t\tvalues.push(value);\r\n\t\t\t\t});\r\n\t\t\t\tobjFilterOption.push({\r\n\t\t\t\t\tcolumn: state.panelProps.column.fieldName,\r\n\t\t\t\t\tvalues: values,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tconst column = newColumns.filter((column) => column.fieldName == state.panelProps.column.fieldName);\r\n\t\t\tcolumn[0].isFiltered = true;\r\n\r\n\t\t\tconst response = DocumentsSearchAndDownloadService.filterDataByColumn(state.items, objFilterOption);\r\n\t\t\tconst newItems = DocumentsSearchAndDownloadService.copyAndSort(\r\n\t\t\t\tresponse,\r\n\t\t\t\tstate.currentSortedColumn.fieldName!,\r\n\t\t\t\tstate.currentSortedColumn.isSortedDescending\r\n\t\t\t);\r\n\r\n\t\t\trefItems.current = newItems;\r\n\t\t\tsetState((prevState) => ({ ...prevState, filteredItems: newItems, filterOptions: objFilterOption }));\r\n\t\t}\r\n\t\trefColumns.current = newColumns;\r\n\t\tsetState((prevState) => ({ ...prevState, columns: newColumns }));\r\n\t\tconsole.log(objFilterOption);\r\n\t};\r\n\r\n\tconst onFreeSearchChange = (ev: any, value: string) => {\r\n\t\tlet filteredItemsClone = JSON.parse(JSON.stringify(refItems.current));\r\n\t\tif (value) {\r\n\t\t\tfilteredItemsClone = DocumentsSearchAndDownloadService.getFilteredItemsForSearchTerm(value, filteredItemsClone, state.items);\r\n\t\t}\r\n\r\n\t\tif (state.currentSortedColumn) {\r\n\t\t\tfilteredItemsClone = DocumentsSearchAndDownloadService.copyAndSort(\r\n\t\t\t\tfilteredItemsClone,\r\n\t\t\t\tstate.currentSortedColumn.fieldName!,\r\n\t\t\t\tstate.currentSortedColumn.isSortedDescending\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tsetState((prevState) => ({ ...prevState, filteredItems: filteredItemsClone }));\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\tNewest Documents\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t
\r\n\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t{state.contextualMenuProps && }\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t props.onDownloadClick(selectedItems)}>\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\tIf you miss a document on our database contact us on STL_Library_Request@straumann.com\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default DocumentListView;\r\n","import { Stack, css, IDropdownOption, Spinner, SpinnerSize, Dialog, DialogType } from \"office-ui-fabric-react\";\r\nimport * as React from \"react\";\r\nimport { IDataProvider } from \"../../dataprovider/IDataProvider\";\r\nimport { IUserAccount } from \"../LoginComponent/LoginComponent\";\r\nimport { DocumentsSearchAndDownloadService } from \"./DocumentSearchAndDownloadService\";\r\nimport DocumentSearchFilters from \"./DocumentSearchFilters/DocumentSearchFilters\";\r\nimport DocumentListView from \"./DocumentsListView/DocumentsListView\";\r\nimport JSZip from \"jszip\";\r\nimport { saveAs } from \"file-saver\";\r\nimport { cloneDeep } from \"lodash\";\r\nexport interface IDocumentSearchAndDownloadProps {\r\n location: Location;\r\n history: any;\r\n stepSizeClass: string;\r\n isLoggedIn: boolean;\r\n dataProvider: IDataProvider;\r\n currentUser?: IUserAccount;\r\n}\r\n\r\nexport interface IDocumentSearchAndDownloadState {\r\n brands: IDropdownOption[];\r\n products: any[];\r\n productValues: IDropdownOption[];\r\n types: IDropdownOption[];\r\n materials: IDropdownOption[];\r\n isProductsDisabled: boolean;\r\n isTypeDisabled: boolean;\r\n selectedBrand: string;\r\n selectedProduct: string;\r\n selectedType: string;\r\n selectedMaterial: string;\r\n showSpinner: boolean;\r\n brandsLoaded: boolean;\r\n viewItems: any[];\r\n allViewItems: any[];\r\n allItems: any[];\r\n downloadedItems: any[];\r\n isVIP: boolean;\r\n alreadyDownloadedFiles: any;\r\n hasAccess: any;\r\n showAccessDeniedMessage: boolean;\r\n showRequestInProgressMessage: boolean;\r\n initialLoader: boolean;\r\n showAccessRequestRejectedMessage: boolean;\r\n freeSearch: string;\r\n approvedFileTypes: string[];\r\n approvedProducts: string[];\r\n}\r\n\r\nexport const DocumentSearchAndDownload = (props: IDocumentSearchAndDownloadProps) => {\r\n const [state, setState] = React.useState({\r\n brands: [],\r\n products: [],\r\n productValues: [],\r\n types: [],\r\n materials: [],\r\n isProductsDisabled: true,\r\n isTypeDisabled: true,\r\n selectedBrand: null,\r\n selectedProduct: null,\r\n selectedMaterial: null,\r\n selectedType: null,\r\n showSpinner: false,\r\n brandsLoaded: false,\r\n isVIP: false,\r\n viewItems: [],\r\n allViewItems: [],\r\n alreadyDownloadedFiles: null,\r\n downloadedItems: [],\r\n allItems: [],\r\n hasAccess: false,\r\n showAccessDeniedMessage: false,\r\n showRequestInProgressMessage: false,\r\n initialLoader: false,\r\n showAccessRequestRejectedMessage: false,\r\n freeSearch: null,\r\n approvedProducts: [],\r\n approvedFileTypes: [],\r\n });\r\n\r\n React.useEffect(() => {\r\n setState((prevState) => ({\r\n ...prevState,\r\n initialLoader: true,\r\n }));\r\n (async () => {\r\n const brandOptions: IDropdownOption[] = [];\r\n const productOptions: IDropdownOption[] = [];\r\n let products: any[] = [];\r\n const typeOptions: IDropdownOption[] = [];\r\n const materialOptions: IDropdownOption[] = [];\r\n let alreadyDownloadedFiles: any = null;\r\n let isUserVIP: boolean = false;\r\n let items: any = {};\r\n let hasAccess = false;\r\n let showAccessDeniedMessage = false;\r\n let showRequestInProgressMessage = false;\r\n let approvedFileTypes: string[] = [];\r\n let approvedProducts: string[] = [];\r\n try {\r\n //const requestStatusResponse = await props.dataProvider.getAccessRequest(props.currentUser.userId);\r\n const userDetailsResponse = await props.dataProvider.getUserData(props.currentUser.userId);\r\n if (userDetailsResponse) {\r\n var requestStatus = userDetailsResponse[\"currentRequestStatus\"];\r\n if (requestStatus == \"AccessApproved\") {\r\n hasAccess = true;\r\n showAccessDeniedMessage = false;\r\n showRequestInProgressMessage = false;\r\n //const isVIP = userDetailsResponse[\"isVIP\"] ? \"true\" : \"false\";\r\n isUserVIP = userDetailsResponse[\"isVIP\"];\r\n\r\n const camlQuery = DocumentsSearchAndDownloadService.getCamlQueryForSearchFilters(null, null, null, null, isUserVIP);\r\n const [documentsResponse, downloadedFiles, responseFilters] = await Promise.all([\r\n props.dataProvider.getSTLFilesWithoutAnyFilters(camlQuery),\r\n props.dataProvider.getAlreadyDownloadedFiles(props.currentUser.userId),\r\n props.dataProvider.getFilters(),\r\n ]);\r\n\r\n alreadyDownloadedFiles = downloadedFiles;\r\n approvedFileTypes = userDetailsResponse.approvedFileTypes;\r\n approvedProducts = userDetailsResponse.approvedProducts;\r\n items = DocumentsSearchAndDownloadService.generateListViewItems(\r\n documentsResponse,\r\n alreadyDownloadedFiles,\r\n isUserVIP,\r\n approvedFileTypes,\r\n approvedProducts\r\n );\r\n // const responseFilters: any = await props.dataProvider.getFilters();\r\n const parsedResponse = JSON.parse(responseFilters);\r\n const brands: string[] = parsedResponse[\"Brands\"];\r\n products = parsedResponse[\"Products\"];\r\n const types: string[] = parsedResponse[\"Types\"];\r\n\r\n if (parsedResponse != null) {\r\n brandOptions.push({ key: null, text: null });\r\n productOptions.push({ key: null, text: null });\r\n typeOptions.push({ key: null, text: null });\r\n brands.forEach((value: string) => {\r\n brandOptions.push({ key: value, text: value });\r\n });\r\n\r\n products.forEach((value: any) => {\r\n productOptions.push({ key: value[\"Title\"], text: value[\"Title\"] });\r\n });\r\n\r\n types.forEach((value: string) => {\r\n typeOptions.push({ key: value, text: value });\r\n });\r\n }\r\n } else if (requestStatus == \"AccessDenied\") {\r\n hasAccess = false;\r\n showAccessDeniedMessage = true;\r\n showRequestInProgressMessage = false;\r\n } else {\r\n hasAccess = false;\r\n showRequestInProgressMessage = true;\r\n showAccessDeniedMessage = false;\r\n }\r\n } else {\r\n hasAccess = false;\r\n showRequestInProgressMessage = false;\r\n showAccessDeniedMessage = true;\r\n }\r\n\r\n setState((prevState) => ({\r\n ...prevState,\r\n brands: brandOptions,\r\n brandsLoaded: true,\r\n showSpinner: false,\r\n initialLoader: false,\r\n viewItems: items[\"ViewItems\"],\r\n allViewItems: items[\"ViewItems\"],\r\n products: products,\r\n productValues: productOptions,\r\n types: typeOptions,\r\n\r\n isVIP: isUserVIP,\r\n approvedFileTypes: approvedFileTypes,\r\n approvedProducts: approvedProducts,\r\n alreadyDownloadedFiles: alreadyDownloadedFiles,\r\n allItems: items[\"AllItems\"],\r\n downloadedItems: alreadyDownloadedFiles ? JSON.parse(alreadyDownloadedFiles) : [],\r\n hasAccess: hasAccess,\r\n showAccessDeniedMessage: showAccessDeniedMessage,\r\n showRequestInProgressMessage: showRequestInProgressMessage,\r\n }));\r\n } catch (ex) {\r\n console.log(ex);\r\n setState((prevState) => ({\r\n ...prevState,\r\n hasAccess: false,\r\n initialLoader: false,\r\n showAccessDeniedMessage: true,\r\n showRequestInProgressMessage: false,\r\n }));\r\n }\r\n })();\r\n }, []);\r\n\r\n const handleBrandChange = (brand: string) => {\r\n let productsClone = cloneDeep(state.products);\r\n productsClone = productsClone.filter((value) => value[\"Brand\"] == brand);\r\n const productOptions: IDropdownOption[] = [];\r\n productsClone.forEach((value: any) => {\r\n productOptions.push({ key: value[\"Title\"], text: value[\"Title\"] });\r\n });\r\n setState((prevState: IDocumentSearchAndDownloadState) => ({\r\n ...prevState,\r\n selectedBrand: brand,\r\n selectedProduct: null,\r\n productValues: productOptions,\r\n }));\r\n };\r\n\r\n const handleProdcutChange = (product: string) => {\r\n setState((prevState) => ({\r\n ...prevState,\r\n selectedProduct: product,\r\n }));\r\n };\r\n\r\n const handleTypeChange = (type: string) => {\r\n setState((prevState) => ({\r\n ...prevState,\r\n selectedType: type,\r\n }));\r\n };\r\n\r\n const handleMaterialChange = (material: string) => {\r\n setState((prevState) => ({\r\n ...prevState,\r\n selectedMaterial: material,\r\n }));\r\n };\r\n\r\n const handleSearchClick = () => {\r\n (async () => {\r\n try {\r\n setState((prevState) => ({\r\n ...prevState,\r\n showSpinner: true,\r\n }));\r\n\r\n const camlQuery = DocumentsSearchAndDownloadService.getCamlQueryForSearchFilters(\r\n state.selectedBrand,\r\n state.selectedProduct,\r\n state.selectedType,\r\n state.selectedMaterial,\r\n state.isVIP\r\n );\r\n const response = await props.dataProvider.getSTLFilesWithFilters(camlQuery);\r\n\r\n const items: any = DocumentsSearchAndDownloadService.generateListViewItems(\r\n response,\r\n state.alreadyDownloadedFiles,\r\n state.isVIP,\r\n state.approvedFileTypes,\r\n state.approvedProducts\r\n );\r\n setState((prevState) => ({\r\n ...prevState,\r\n showSpinner: false,\r\n viewItems: items[\"ViewItems\"],\r\n allViewItems: items[\"AllViewItems\"],\r\n allItems: items[\"AllItems\"],\r\n downloadedItems: state.alreadyDownloadedFiles ? JSON.parse(state.alreadyDownloadedFiles) : [],\r\n }));\r\n } catch (ex) {\r\n console.log(ex);\r\n setState((prevState) => ({\r\n ...prevState,\r\n showSpinner: false,\r\n }));\r\n }\r\n })();\r\n };\r\n\r\n const handleDownloadClick = (selectedItems: any[]) => {\r\n (async () => {\r\n try {\r\n showSpinner(true);\r\n var today = new Date();\r\n var dd = String(today.getDate()).padStart(2, \"0\");\r\n var mm = String(today.getMonth() + 1).padStart(2, \"0\"); //January is 0!\r\n var yyyy = String(today.getFullYear());\r\n\r\n const fileName = \"STGC_ImplantDesignLibrary_\" + dd + mm + yyyy + \".zip\";\r\n var zip = new JSZip();\r\n let filesDownloaded: string[] = [];\r\n let tempDownloadedData: any[] = [];\r\n for (const item of selectedItems) {\r\n const response = await props.dataProvider.downloadFile(item[\"UniqueId\"]);\r\n tempDownloadedData.push({\r\n FileUniqueId: item[\"UniqueId\"],\r\n });\r\n if (item[\"Downloaded\"] != \"Yes\") {\r\n filesDownloaded.push(item[\"UniqueId\"] + \"|\" + item[\"FileVersion\"] + \"|\" + item[\"Material\"]);\r\n }\r\n\r\n if (response) {\r\n const file = JSON.parse(response);\r\n\r\n zip.file(file.FileDownloadName, file.FileContents, { base64: true });\r\n }\r\n }\r\n if (filesDownloaded.length > 0) {\r\n const updateDownloadReport = await props.dataProvider.updateFilesDownloadedReportList(filesDownloaded, props.currentUser.userId);\r\n }\r\n\r\n var itemClone: any[] = cloneDeep(state.viewItems);\r\n itemClone.forEach((item) => {\r\n const found: any[] = selectedItems.filter((sItem) => sItem[\"UniqueId\"] == item[\"UniqueId\"]);\r\n if (found.length > 0) {\r\n item[\"Downloaded\"] = \"Yes\";\r\n }\r\n });\r\n\r\n zip.generateAsync({ type: \"blob\" }).then(function (zip) {\r\n saveAs(zip, fileName);\r\n });\r\n\r\n const downloadedFilesClone = cloneDeep(state.downloadedItems);\r\n downloadedFilesClone.push(...tempDownloadedData);\r\n\r\n setState((prevState) => ({\r\n ...prevState,\r\n showSpinner: false,\r\n viewItems: itemClone,\r\n allViewItems: itemClone,\r\n downloadedItems: downloadedFilesClone,\r\n }));\r\n } catch (ex) {\r\n showSpinner(false);\r\n }\r\n })();\r\n };\r\n\r\n const showSpinner = (value: boolean) => {\r\n setState((prevState) => ({\r\n ...prevState,\r\n showSpinner: value,\r\n }));\r\n };\r\n\r\n const handleFreeSearchChange = (event: React.FormEvent, value?: string) => {};\r\n\r\n const handleNewestDocumentClick = async () => {\r\n try {\r\n const documentsResponse = await props.dataProvider.getSTLFilesWithoutAnyFilters(state.isVIP ? \"true\" : \"false\");\r\n const alreadyDownloadedFiles = await props.dataProvider.getAlreadyDownloadedFiles(props.currentUser.userId);\r\n const items = DocumentsSearchAndDownloadService.generateListViewItems(\r\n documentsResponse,\r\n alreadyDownloadedFiles,\r\n state.isVIP,\r\n state.approvedFileTypes,\r\n state.approvedProducts\r\n );\r\n setState((prevState) => ({\r\n ...prevState,\r\n showSpinner: false,\r\n selectedBrand: null,\r\n selectedMaterial: null,\r\n selectedProduct: null,\r\n selectedType: null,\r\n viewItems: items[\"ViewItems\"],\r\n allViewItems: items[\"ViewItems\"],\r\n alreadyDownloadedFiles: alreadyDownloadedFiles,\r\n allItems: items[\"AllItems\"],\r\n downloadedItems: alreadyDownloadedFiles ? JSON.parse(alreadyDownloadedFiles) : [],\r\n }));\r\n } catch (ex) {\r\n console.log(ex);\r\n }\r\n };\r\n return (\r\n <>\r\n {state.initialLoader && }\r\n {state.hasAccess && (\r\n \r\n \r\n )}\r\n {state.showRequestInProgressMessage && (\r\n \r\n
Your current request is in review state
\r\n
\r\n )}\r\n {state.showAccessDeniedMessage && (\r\n \r\n
You do not have sufficient permissions to access this page
\r\n
\r\n )}\r\n {state.showAccessRequestRejectedMessage && (\r\n \r\n
Your request to get the access has been rejected. Please create new request.
\r\n
\r\n )}\r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\nimport { css, Stack, PrimaryButton, Text, getTheme, Link, Spinner } from 'office-ui-fabric-react';\r\n\r\nexport class CookieList extends React.Component {\r\n\r\n public render() {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n}","import React, { Component } from 'react';\r\nimport { Redirect, Route } from 'react-router';\r\nimport { Layout } from './components/Layout/Layout';\r\n\r\nimport { WelcomePage } from './components/Welcome/Welcome';\r\nimport { AskAccess } from './components/AskAccess/AskAccess';\r\nimport { LoginComponent } from './components/LoginComponent/LoginComponent';\r\nimport { ConfirmPage } from './components/LoginComponent/ConfirmPage';\r\nimport { ResetPWPage } from './components/LoginComponent/ResetPWPage';\r\nimport { ExternalConsent } from './components/LoginComponent/ExternalConsent';\r\nimport { MsalProvider } from \"@azure/msal-react\";\r\nimport { PublicClientApplication } from \"@azure/msal-browser\";\r\nimport { Common } from './components/LoginComponent/Common';\r\nimport {SubmitAgreement} from './components/SubmitAgreement/SubmitAgreement';\r\nimport {DocumentSearchAndDownload} from './components/DocumentSearchAndDownload/DocumentSearchAndDownload';\r\nimport './custom.scss'\r\nimport DataProvider from './dataprovider/DataProvider';\r\n\r\nimport { CookieList } from './components/LoginComponent/CookieList';\r\n\r\n\r\nexport const PageURL = {\r\n \r\n ConfirmationPage: \"/confirm\",\r\n ResetPWPage: \"/resetPW\",\r\n Consent: \"/consent\",\r\n CookieList: \"/cookies\",\r\n AskAccess:\"/AskAccess\",\r\n SubmitAgreement:\"/SubmitAgreement\",\r\n Download:\"/Download\"\r\n}\r\n\r\n\r\nfunction getMSALConfig(){\r\n let returnURI = Common.getCurrentServerUrl();\r\n \r\n return {\r\n auth: {\r\n clientId: \"616b6cae-69cb-4a9b-9674-d6ab4ef29376\",\r\n authority: \"https://login.microsoftonline.com/common\",\r\n redirectUri: `${returnURI}`\r\n },\r\n cache: {\r\n cacheLocation: \"sessionStorage\", // This configures where your cache will be stored\r\n storeAuthStateInCookie: false, // Set this to \"true\" if you are having issues on IE11 or Edge\r\n }\r\n };\r\n}\r\n\r\nconst msalInstance = new PublicClientApplication(getMSALConfig());\r\n\r\n\r\nexport default class App extends Component {\r\n refLoginComponent = null;\r\n\r\n constructor() {\r\n super();\r\n this.state = {\r\n isLoggedIn: false,\r\n currentUser: null,\r\n path: \"/\",\r\n redirectHome: false\r\n };\r\n\r\n this.refLoginComponent = React.createRef();\r\n } \r\n\r\n componentDidMount() {\r\n // in case the page is reloaded, check if there is a user in the session already\r\n if (window.sessionStorage.authToken) {\r\n let authToken = JSON.parse(window.sessionStorage.authToken);\r\n let expirationDate = new Date(authToken.expirationUTC);\r\n if (expirationDate < new Date()) {\r\n // this token is expired. Clean it up\r\n window.sessionStorage.removeItem(\"authToken\");\r\n window.sessionStorage.removeItem(\"stlUser\");\r\n alert(\"Your Session expired. Please sign-in again.\");\r\n }\r\n if (window.sessionStorage.stlUser) {\r\n let currentUser = JSON.parse(window.sessionStorage.stlUser);\r\n this.setState({\r\n isLoggedIn: true,\r\n currentUser: currentUser\r\n });\r\n }\r\n }\r\n }\r\n\r\n setAuthStatus = (loggedIn, user) => {\r\n\r\n return new Promise((resolve, reject) => { \r\n if (!user) {\r\n sessionStorage.removeItem(\"authToken\");\r\n sessionStorage.removeItem(\"stlUser\");\r\n console.log(\"New Url: \"+`${window.location.protocol}//${window.location.host}`);\r\n window.location.href = `${window.location.protocol}//${window.location.host}`;\r\n\r\n }\r\n this.setState({ isLoggedIn: loggedIn, currentUser: user })\r\n resolve()\r\n console.log(\"%cCurrent User\", \"color:blue;font-size:16px\", user);\r\n });\r\n }\r\n\r\n sessionExpired = () => {\r\n this.setState({\r\n isLoggedIn: false,\r\n currentUser: null\r\n });\r\n window.sessionStorage.removeItem(\"authToken\");\r\n window.sessionStorage.removeItem(\"stlUser\");\r\n alert(\"Your Session expired. Please sign-in again.\");\r\n };\r\n\r\n static displayName = App.name;\r\n\r\n dataProvider = new DataProvider(); \r\n\r\n\r\n render() {\r\n return ( \r\n \r\n {this.state.redirectHome && }\r\n \r\n {\r\n if(this.state.path !== \"/\")\r\n this.setState({ path: \"/\" });\r\n return ;\r\n \r\n }} /> \r\n {\r\n if (this.state.path !== PageURL.ConfirmationPage)\r\n this.setState({ path: PageURL.ConfirmationPage });\r\n return ;\r\n }}\r\n /> \r\n { \r\n return \r\n }}\r\n />\r\n {\r\n if (this.state.path !== PageURL.ResetPWPage)\r\n this.setState({ path: PageURL.ResetPWPage });\r\n return ;\r\n }}\r\n />\r\n ( \r\n <>\r\n { \r\n this.state.isLoggedIn && \r\n \r\n } \r\n \r\n )}\r\n />\r\n ( \r\n <>\r\n { \r\n this.state.isLoggedIn && \r\n \r\n } \r\n \r\n )}\r\n />\r\n {\r\n if (this.state.path !== PageURL.Consent)\r\n this.setState({ path: PageURL.Consent });\r\n return ;\r\n }\r\n }/>\r\n {\r\n return ;\r\n }}\r\n />\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","// 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\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);\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) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = 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) {\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 => {\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 React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\nimport registerServiceWorker from './registerServiceWorker';\r\nimport { initializeIcons } from '@uifabric/icons';\r\n\r\n\r\n\r\ninitializeIcons();\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\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"],"sourceRoot":""}