{"version":3,"sources":["data/firebaseConfig.js","data/api.js","data/loanPools.js","assets/icons.svg","components/Icon/index.js","assets/images/brand_logo_light.png","components/Button/index.js","components/AppBar/index.js","data/conversations.js","data/utils.js","pages/Portal/MarketplaceActivities.js","pages/Portal/Table.js","pages/Portal/DealRoom.js","pages/Portal/History.js","pages/Portal/index.js","assets/images/brand_logo.svg","assets/images/logo.svg","pages/Login/index.js","data/documents.js","components/Mapchart/index.js","assets/styles/modalStyles.js","components/LoanCard/index.js","components/FilterOption/index.js","components/FilterDropdown/index.js","components/LoansTable/FilterBar.js","components/LoansTable/index.js","pages/Marketplace/Pagination.js","pages/Marketplace/index.js","components/ChatMessage/Avatar.js","components/ChatItem/index.js","components/ChatRoster/index.js","context/eventBus.js","context/PanelPublisher.js","components/ChatMessage/index.js","data/hooks/useAllDocuments.js","components/Chat/ChatBox.js","components/Chat/ChatBoxHeader.js","assets/images/avatar-placeholder.png","components/UserImage/index.js","components/Chat/ButtonAdd.js","components/Chat/UserChat.js","components/Chat/index.js","components/TextField/index.js","assets/images/thumbnails/Contract.svg","assets/images/thumbnails/Contract-1.svg","assets/images/thumbnails/Contract-2.svg","components/Payment/CongratsModal.js","assets/images/wise_logo.svg","components/Payment/index.js","data/hooks/useRenderDocuments.js","components/ChatPanel/index.js","components/ConfirmationModal.js","data/hooks/useTwilioClient.js","pages/Messages/index.js","pages/Upload/StepButtons.js","pages/Upload/Details.js","pages/Upload/ListingType.js","pages/Upload/ProductClass.js","pages/Upload/Tags.js","pages/Upload/SelectRegion.js","components/Compensation/index.js","pages/Upload/StateCompensation.js","pages/Upload/NumericalDetails.js","components/UploadDropZone/index.js","assets/HELOC_pool.pdf","pages/Upload/UploadBrochure.js","pages/Upload/Submit.js","pages/Upload/ProductType.js","pages/Upload/ProgressBar.js","components/RouterPrompt.js","pages/Upload/index.js","assets/three-dots.svg","components/DocumentHistory/DocumentItem.js","components/DocumentVersion/ButtonSmall.js","components/DocumentVersion/VersionItem.js","components/DocumentVersion/VersionContainer.js","components/DocumentVersion/index.js","components/DocumentHistory/index.js","pages/LoanDetail/index.js","components/PrivateRoute/index.js","pages/Settings/SectionModal.js","pages/EntityProfile/EditFinancial.js","components/Button/EditIcon.js","pages/EntityProfile/FinancialHighlights.js","pages/EntityProfile/Person.js","pages/Settings/InNetwork.js","pages/EntityProfile/PersonDetail.js","pages/EntityProfile/People.js","pages/EntityProfile/MarketplaceListings.js","pages/EntityProfile/EditAbout.js","pages/EntityProfile/About.js","components/BusinessImage/index.js","assets/images/placeholder-company.png","pages/EntityProfile/Header.js","pages/EntityProfile/index.js","assets/images/audit_frame.png","pages/DealRoom/SettlementCard.js","pages/DealRoom/ManageMenu.js","data/hooks/useContract.js","pages/DealRoom/ContractVersion.js","pages/DealRoom/Contract.js","pages/DealRoom/DealAction.js","assets/images/audit.png","pages/DealRoom/index.js","components/RegistrationStep/index.js","pages/Register/index.js","data/auth.js","data/wildcard.js","pages/SignUp/index.js","pages/Settings/Section.js","pages/Settings/Account.js","pages/Settings/Organization.js","pages/Settings/Transaction.js","pages/Settings/Profile.js","pages/Settings/AvatarEdit.js","pages/Settings/index.js","router.js","App.js","index.js"],"names":["app","firebase","initializeApp","apiKey","process","authDomain","databaseURL","projectId","storageBucket","messagingSenderId","appId","instance","axios","create","baseURL","headers","Accept","getAccessToken","a","user","auth","currentUser","getIdTokenResult","token","expirationTime","Date","getTime","now","getIdToken","interceptors","request","use","config","Authorization","api","response","r","err","status","window","location","getLoanPools","currentPage","url","objParams","params","page","size","get","data","getLoanPoolById","id","updateLoanPool","loanPool","put","settlement","updateDealRoom","dealInfo","getActiveDeals","getProposedBuyers","loanId","getBusiness","name","updateBusiness","info","uploadUser","getUser","entity","email","getUserByEmail","Icon","props","href","icons","classes","Button","children","className","variant","disabled","isLoading","onClick","classNames","includes","color","AppBar","selectedIndex","state","useState","isVisible","setVisible","navItems","text","path","routes","root","marketplace","messages","history","useHistory","profileRef","useRef","queryClient","useQueryClient","handleClickOutside","event","current","contains","target","handleLogout","signOut","then","console","log","localStorage","clear","push","useEffect","document","addEventListener","removeEventListener","to","src","brand_logo_light","alt","map","navItem","index","pathname","ref","settings","getConversationsByUser","getMessages","sid","createConversation","buyerInfo","getToken","username","post","cleanUrlParams","split","host","replaceState","title","getBuyer","locationStateEntity","res","buyer","result","filtered","proposedBuyers","filter","b","toLowerCase","e","getImage","profile","link","image","responseType","avatar","blob","URL","createObjectURL","setItem","JSON","stringify","initConversations","setBuyer","setCurrentSid","countersigner","esignConvSid","isOwner","owner","signedUser","currentBuyer","existingConversationSid","conversationSid","currentChat","convByUser","find","item","participants","getCounterpartyFromSid","loan","conversations","seller","getConvCounterparty","MarketplaceActivities","currentIdx","setCurrentIdx","parse","getItem","loanPools","length","word","charAt","toUpperCase","slice","profileWithName","displayName","upload","detail","listType","replace","Table","dealroom","DealRoom","tabIndex","setTabIndex","showAll","setShowAll","onSelect","History","useQuery","error","message","Portal","isSuccess","activeDeals","setActiveDeals","dealroomData","retrieveActiveDeals","deals","latest","sort","lastUpdated","dealRole","styles","label","top","left","Login","useForm","register","watch","handleSubmit","handleSignInSubmit","password","signInWithEmailAndPassword","authToken","claims","brand_logo","logo","onSubmit","style","type","uploadDoc","formData","uploadContract","append","getAllDocNames","getDoc","docName","responseEncoding","getContract","getThumbnail","restoreDoc","docInfo","getDocthumbnail","customizeDoc","getESign","getDocEsign","filename","Mapchart","statesInfo","projection","geography","geographies","geo","stateInfo","states","stroke","fill","percentLoan","rsmKey","modalStyles","overlay","backgroundColor","content","right","bottom","marginRight","transform","borderRadius","Modal","setAppElement","LoanCard","footer","bookmark","setBookmark","isModalOpen","setModalOpen","brochure","setBrochure","handleBookmark","handleBrochureMessage","docNames","doc","description","toaster","loanType","loanClass","productTags","tag","reverse","generalInfo","currentBalance","numeral","format","originalBalance","grossWAC","price","Number","sellerRetainedPercent","serviceFee","waBalance","waCreditScore","waDebtToIncome","waLTV","waCLTV","count","isOpen","onRequestClose","width","height","FilterOption","checked","value","onValueChange","onChange","htmlFor","FilterDropdown","onFilter","valuesKey","isClearable","setClearable","Object","keys","isChecked","values","setValues","listContainer","handleValueChange","v","checkedValues","FilterBar","onGlobalFilter","placeholder","LoansTable","onToggle","loanClicked","setLoanClicked","useMemo","columns","Header","accessor","rows","_","filterValue","row","Cell","availability","productTag","join","some","cell","original","handleMessageClick","tableInstance","useTable","useGlobalFilter","useFilters","getTableProps","getTableBodyProps","headerGroups","setGlobalFilter","setFilter","prepareRow","headerGroup","getHeaderGroupProps","column","getHeaderProps","render","getRowProps","handleLoanClick","cells","getCellProps","Pagination","setCurrentPage","isPreviousData","totalPages","total","p","Marketplace","listed","keepPreviousData","isTabular","setTabular","handleToggle","metaData","Avatar","ChatItem","chat","selected","imageLoaded","setImageLoaded","retrieveAvatar","lastActivity","dateFormat","ChatRoster","currentSid","source","chats","setChats","initChats","withUniqueSid","uniqBy","threads","conversation","i","date_created","unSettled","undefined","chatA","chatB","handleClick","list","Map","on","eventType","eventAction","this","has","set","emit","args","forEach","cb","PanelPublisher","ChatMessage","mediaUrl","setMediaUrl","media","getContentTemporaryUrl","author","body","date","contentType","codeStatus","download","rel","useAllDocuments","parseInt","enabled","ChatBox","thread","onLastActivity","reset","chatBox","inputFile","setMessages","setConversation","setLoading","isFileSending","setFileSending","refetch","messageAdded","dateCreated","attributes","scrollTop","scrollHeight","removeListener","initConversation","items","uploadFile","file","FormData","substr","indexOf","accessType","handleFileChange","files","sendMessage","reduce","groupedMessages","group","getYear","getMonth","getDate","autoComplete","ChatBoxHeader","buyerDisplayName","setModalUsersOpen","minHeight","ionClick","UserImage","person","setSrc","retrieveUser","photo","ButtonAdd","UserChat","reload","setIsLoading","handleOnClick","setTimeout","success","role","Chat","client","isModalUsersOpen","team","setTeam","setThread","setParticipants","setReload","initThread","getConversationBySid","retrieveParticipants","getParticipants","identity","retrieveBusiness","reloadParticipants","TextField","innerRef","CongratsModal","didPay","onClose","contract","contract1","contract2","Payment","documents","setDocuments","setPay","retrieveDocs","thumbnail","originalFilename","plugins","resolve","slidesToShowPlugin","options","numberOfSlides","wiseLogo","useRenderDocuments","useMutation","ChatPanel","buyerEmail","setLoadingOverlay","isLoiSigned","setLoiSigned","showSatisfiedButtons","setShowSatisfiedButtons","counterSignButton","setCounterSignButton","isContractSigned","setContractSigned","isDealUpdated","setDealUpdated","envelopeId","redirectUrl","eSign","setESign","proposedBuyer","setProposedBuyer","renderLOI","refreshKey","setRefreshKey","docusignevent","URLSearchParams","search","substring","docusignEnvelopeId","signature","docuSignId","catch","getMessage","oldKey","throttle","leading","trailing","signStatus","entries","docType","handleLoiSigned","handleCounterSign","esignRes","loi","templateName","seller_org","buyer_org","mutate","onSuccess","onError","zIndex","ConfirmationModal","textOk","textCancel","showPrompt","handleOK","handleCancel","onOk","onCancel","txt","key","useTwilioClient","setClient","initClient","ConversationsClient","toString","Messages","match","setLoanPools","setConversations","showErrorPrompt","setErrorPromptOpen","loadingOverlay","retrieveConversations","active","spinner","StepButtons","nextStep","previousStep","totalSteps","step","Details","useFormContext","errors","formState","required","isActive","update","ListingType","defaultValues","option","ProductClass","loanClasses","Tags","SelectRegion","viewBox","d","clipRule","fillRule","Compensation","onPercentageChange","min","max","StateCompensation","statesInfoData","region","setRegion","setStatesInfo","handlePercentChange","delta","percentResult","prev","next","obj","statesFilter","initialData","textA","textB","tooltip","classDependentFields","Consumer","Residential","Other","LabelTooltip","tip","NumericalDetails","control","form","field","thousandSeparator","prefix","fixedDecimalScale","allowEmptyFormatting","allowNegative","customInput","c","loanTerm","waRemainingTerm","decimalScale","maxLength","allowLeadingZeros","rules","defaultValue","UploadDropZone","onDrop","accept","useDropzone","noClick","noKeyboard","getRootProps","getInputProps","UploadBrochure","setFiles","useCallback","acceptedFiles","heloc_pool","Submit","isUploading","isErrorUpload","isErrorBrochure","ErrorBrochure","loanpool","submit","ProductType","ProgressBar","currentStep","RouterPrompt","when","onOK","setShowPrompt","currentPath","setCurrentPath","block","prompt","Promise","Upload","methods","trigger","showSubmitPrompt","setSubmitPrompt","showLeavePrompt","setLeavePrompt","setCurrentStep","mapData","setMapData","setIsUploading","setIsSuccess","setIsErrorUpload","setIsErrorBrochure","updateState","updateForm","alertUser","preventDefault","returnValue","loanRes","isValid","onStepChange","stats","activeStep","scrollTo","behavior","nav","DocumentItem","handleSelectDoc","handleVersion","truncate","dots","ButtonSmall","loadingLabel","VersionItem","version","currentVersion","reviewContract","setModalContractOpen","contractSigned","showButtonsReviewContract","isDownloading","setIsDownloading","isRestoring","setIsRestoring","uploadDate","toLocaleString","handleDownload","createElement","click","revokeObjectURL","VersionContainer","DocumentVersion","versions","links","versionedDocs","created","poolId","pop","DocumentHistory","carousel","selectedDoc","setSelectedDoc","selectedVersion","setSelectedVersion","isModalVersionOpen","setModalVersionOpen","isLoadingInfo","setIsLoadingInfo","dobj","LoanDetail","setLoanPool","retrieveLoanPool","PrivateRoute","Component","component","isUserLoggedIn","renderProps","login","SectionModal","onSave","disableSave","EditFinancial","isDirty","minWidth","EditIcon","setOpen","FinancialHighlights","business","isEditOpen","setEditOpen","highlights","financials","assets","totalDeposits","loans","members","shareGrowth","loanGrowth","netWorthRatio","loanToShare","highlight","select","Person","edit","InNetwork","PersonDetail","inNetwork","linkedInProfile","People","people","setPerson","mode","isSaving","setIsSaving","dirtyValues","touchedFields","allValues","Array","isArray","fromEntries","onUpdate","dirtyFields","usersData","promises","userData","all","MarketplaceListings","listings","EditAbout","about","phone","website","ceo","identification","numEmployeesRange","address","city","country","street","zipCode","mask","formats","regexps","formatString","phoneNumber","l","normalize","About","BusinessImage","EntityProfile","useParams","businessProfile","setBusinessProfile","isLoadingUser","setIsLoadingUser","businessResponse","reloadBusinessInfo","SettlementCard","ManageMenu","manageContainer","isManageOpen","setManageOpen","isSaleEnding","setSaleEnding","isSettlement","setSettlement","isEndingLoading","setEndingLoading","inputContractFile","dataset","end","handleEndSaleWanted","handleEndSale","handleContractChange","MenuSettlement","MenuContent","ConfirmAction","actor","memo","useContract","ContractVersion","setContract","setLatest","contractQuery","at","Contract","isModalContractOpen","DealAction","setProposedLoaded","accountId","esign","contractBuyer","setContractBuyer","contractSeller","setContractSeller","setShowButtonsReviewContract","isAuditOpen","setAuditOpen","setProposedBuyers","promptMessage","setPromptMessage","contractSignAgreed","audit_frame","setConversationSid","proposedLoaded","retrieveConversation","existingConversation","RegistrationStep","stepQuestion","Register","isDecisionMaker","setDecisionMaker","handleDecisionMaker","signup","term","SignUp","setValue","setError","setTerm","setToken","setSelected","fieldsQuery","init","handleSignUpSubmit","firstName","lastName","financialInstitution","createUserWithEmailAndPassword","confirmPassword","handleItemClick","innerText","institution","Section","onEdit","Account","reloadSettings","validationSchema","Yup","shape","oneOf","formOptions","resolver","yupResolver","register1","handleSubmit1","reset1","isDirty1","Name","updatePassword","Organization","entityType","decisionMaker","isDesicionMaker","responsability","Transaction","assetClass","geographicInterests","transactionInterests","Sell","Buy","Profile","matches","AvatarEdit","square","change","setChange","preview","setPreview","dataUriToBlob","dataUri","splitDataUri","byteString","atob","decodeURI","mimeString","ia","Uint8Array","charCodeAt","Blob","handlePhotoSave","exportAsSquare","onCrop","Settings","isAccountOpen","setAccountOpen","isOrganizationOpen","setOrganizationOpen","isTransactionOpen","setTransactionOpen","isProfileOpen","setProfileOpen","setUser","setLoadingUser","userResponse","account","Email","Password","organization","transaction","preferences","Tag","AppRouter","getUserConfirmation","exact","QueryClient","App","initializing","setInitializing","onIdTokenChanged","removeItem","position","ReactDOM","StrictMode","getElementById"],"mappings":"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,KAAM2L,YAAa,EAAGwX,OAAQ,aACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,aACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,aACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,aACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,aACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,aACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,aACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,WACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,WACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,WACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,WACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,WACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,WACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,WACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,WACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,WACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,WACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,aACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,aACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,aACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,aACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,aACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,QACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,QACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,QACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,QACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,QACvC,CAAEnjB,MAAO,KAAM2L,YAAa,EAAGwX,OAAQ,QACvC,CAAEnjB,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","file":"static/js/main.7868e206.chunk.js","sourcesContent":["import firebase from 'firebase/app'\nimport 'firebase/auth'\n\nconst app = firebase.initializeApp({\n apiKey: process.env.REACT_APP_FIREBASE_API_KEY,\n authDomain: process.env.REACT_APP_FIREBASE_AUTH_DOMAIN,\n databaseURL: process.env.REACT_APP_FIREBASE_DATABASE_URL,\n projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID,\n storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET,\n messagingSenderId: process.env.REACT_APP_FIREBASE_MESSAGING_SENDER_ID,\n appId: process.env.REACT_APP_FIREBASE_APP_ID\n})\n\nexport { app }\n","import axios from 'axios'\nimport { app } from '../data/firebaseConfig'\n\nconst instance = axios.create({\n baseURL: process.env.REACT_APP_API_URL,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json'\n }\n})\n\nconst getAccessToken = async () => {\n const user = app.auth().currentUser;\n if (user) {\n // getIdTokenResult provides token metadata in the result\n // will return current token, unless it's expired where a fresh token is grabbed\n let { token, expirationTime } = await user.getIdTokenResult();\n\n const expiresMS = (new Date(expirationTime)).getTime();\n if (expiresMS - Date.now() < 300000) {\n // if the token will expire in the next 5 minutes, \n // forcefully grab a fresh token\n token = await user.getIdToken(true);\n }\n return token;\n }\n return null;\n};\n\ninstance.interceptors.request.use(async (config) => {\n const token = await getAccessToken();\n config.headers.Authorization = `Bearer ${token}`;\n return config;\n});\n\nconst api = () => {\n instance.interceptors.response.use(\n r => r,\n err => {\n if (err.response?.status === 403) {\n window.location = '/'\n }\n if (err.response?.status === 401) {\n window.location = '/login'\n }\n\n throw err\n }\n )\n return instance\n}\n\nexport default api\n","import api from './api'\n\nexport const getLoanPools = async currentPage => {\n var url = 'loanpool'\n var objParams = {}\n // TODO: Fix currentPage is being passed as a react query object\n if (typeof(currentPage) == 'number') {\n url = 'loanpool/pages'\n objParams = {\n params: { page: currentPage, size: 9 }\n }\n }\n const data = await api().get(url, objParams)\n return data.data\n}\n\nexport const getLoanPoolByTitle = async title => {\n const data = await api().get(`loanpool/title/${title}`)\n return data.data\n}\n\nexport const getLoanPoolById = async id => {\n const data = await api().get(`loanpool/id/${id}`)\n return data.data\n}\n\nexport const updateLoanPool = async loanPool => {\n const data = await api().put('loanpool', loanPool)\n return data.data\n}\n\nexport const settlement = async loanPool => {\n const data = await api().put('loanpool/settlement', loanPool)\n return data.data\n}\n\nexport const updateDealRoom = async dealInfo => {\n const data = await api().put('loanpool/deal', dealInfo)\n return data.data\n}\n\nexport const getActiveDeals = async user => {\n const data = await api().get(`loanpool/activedeals/${user}`)\n return data.data\n}\n\nexport const getProposedBuyers = async loanId => {\n const data = await api().get(`loanpool/proposedbuyers/loan/${loanId}`)\n return data.data\n}\n\nexport const getMyLoanPool = async owner => {\n const data = await api().get(`loanpool/owner/${owner}`)\n return data.data\n}\n\nexport const getBusiness = async name => {\n const data = await api().get(`loanpool/business/${name}`)\n return data.data\n}\n\nexport const getBusinessUser = async name => {\n const data = await api().get(`loanpool/business/${name}/users`)\n return data.data\n}\n\nexport const updateBusiness = async info => {\n const data = await api().put('loanpool/business', info)\n return data.data\n}\n\nexport const uploadUser = async user => {\n const data = await api().put(`loanpool/business/user`, user, {\n headers: { 'Content-Type': 'multipart/form-data' }\n })\n return data.data\n}\n\nexport const getUser = async (entity, email) => {\n const data = await api().get(`loanpool/business/${entity}/user/${email}`)\n return data.data\n}\n\nexport const getUserByEmail = async (email) => {\n const data = await api().get(`loanpool/user/${email}`)\n return data.data\n}\n","export default __webpack_public_path__ + \"static/media/icons.dc58e8ac.svg\";","import icons from '../../assets/icons.svg'\n\nconst Icon = ({ id, ...props}) => (\n <svg {...props}>\n <use href={`${icons}#${id}`} />\n </svg>\n)\n\nexport default Icon\n","export default __webpack_public_path__ + \"static/media/brand_logo_light.cbca2aa6.png\";","import classNames from 'classnames'\nimport BeatLoader from 'react-spinners/BeatLoader'\nimport { Fragment } from 'react'\n\nconst classes = {\n button: 'font-semibold py-2 px-5 focus:outline-none rounded',\n disabled: 'opacity-50 cursor-default',\n contained: 'border border-black bg-black text-white',\n success: 'border border-grey bg-pantone text-white',\n outlined: 'border border-black hover:bg-black hover:text-white',\n link: 'focus:outline-none hover:underline',\n rounded: 'border rounded-full focus:outline-none border-quickSilver'\n}\n\nconst Button = ({\n children,\n className,\n variant,\n disabled,\n isLoading = false,\n onClick,\n ...props\n}) => {\n const handleOnClick = () => {\n if (!isLoading) {\n // Check if prop exists\n if (typeof onClick == 'function') {\n onClick()\n }\n }\n }\n\n return (\n <button\n className={classNames(\n { [classes['button']]: variant !== 'link' },\n { [classes['disabled']]: disabled },\n { [classes['contained']]: variant === 'contained' },\n { [classes['success']]: variant === 'success' },\n { [classes['outlined']]: variant === 'outlined' },\n { [classes['link']]: variant === 'link' },\n { [classes['rounded']]: variant === 'rounded' },\n { 'text-md': !className?.includes('text') },\n className\n )}\n disabled={disabled}\n onClick={handleOnClick}\n {...props}\n >\n {isLoading ? (\n <BeatLoader\n size={7}\n color={variant === 'contained' ? 'white' : 'green'}\n />\n ) : (\n <>{children}</>\n )}\n </button>\n )\n}\nexport default Button\n","import { Link, useHistory } from 'react-router-dom'\nimport { routes } from '../../router'\nimport classNames from 'classnames'\nimport Icon from '../Icon'\nimport brand_logo_light from '../../assets/images/brand_logo_light.png'\nimport { useEffect, useRef, useState } from 'react'\nimport Button from '../Button'\nimport firebase from 'firebase/app'\nimport { useQueryClient } from 'react-query'\n\nconst AppBar = ({ selectedIndex, state }) => {\n const [isVisible, setVisible] = useState(false)\n const navItems = [\n { text: 'Portal', path: routes.root },\n { text: 'Marketplace', path: routes.marketplace },\n { text: 'Messages', path: routes.messages },\n ]\n const history = useHistory()\n const profileRef = useRef()\n const queryClient = useQueryClient()\n\n const handleProfileClick = () => setVisible(isVisible => !isVisible)\n\n const handleClickOutside = event => {\n if (profileRef.current && !profileRef.current.contains(event.target))\n setVisible(false)\n }\n\n const handleLogout = async () => {\n firebase.auth().signOut().then(() => {\n console.log('logged out')\n localStorage.clear()\n queryClient.clear()\n history.push(routes.root)\n })\n }\n\n const handleSettings = () => {\n history.push(routes.settings)\n }\n\n useEffect(() => {\n document.addEventListener('click', handleClickOutside)\n\n return () => document.removeEventListener('click', handleClickOutside)\n }, [])\n\n return (\n <div className=\"flex items-center justify-between px-6 py-5 border-b border-platinum\">\n <nav className=\"flex\">\n <Link to=\"/\">\n <img className=\"w-14\" src={brand_logo_light} alt=\"Date Logo\" />\n </Link>\n <ul className=\"flex items-center\">\n {navItems.map((navItem, index) => (\n <li key={index} className=\"ml-4 first:ml-8\">\n <Link\n className={classNames({ 'font-bold': index === selectedIndex })}\n to={{ pathname: navItem.path, state }}\n >\n {navItem.text}\n </Link>\n </li>\n ))}\n </ul>\n </nav>\n <div ref={profileRef} className=\"relative\">\n <button className=\"flex items-center py-1 pl-2 pr-1 border rounded-full focus:outline-none border-quickSilver\" onClick={handleProfileClick}>\n <Icon className=\"w-4 h-4 text-black fill-current\" id=\"profile_menu\" />\n <div className=\"p-2 ml-2 bg-black rounded-full\">\n <Icon className=\"w-3 h-3 text-white fill-current\" id=\"profile\" />\n </div>\n </button>\n {isVisible && <div className=\"absolute right-0 w-32 p-3 mt-1 bg-white border rounded shadow-md\">\n <ul className=\"text-center\">\n <Button className=\"whitespace-nowrap\" variant=\"link\" onClick={handleLogout}>Log out</Button>\n <Button className=\"whitespace-nowrap\" variant=\"link\" onClick={handleSettings}>Settings</Button>\n </ul>\n </div>}\n </div>\n </div>\n )\n}\n\nexport default AppBar\n","import api from './api'\n\nexport const getConversationsByLoan = async loanId => {\n const data = await api().get(`loanpool/conversations/${loanId}`)\n return data.data\n}\n\nexport const getConversationsByUser = async email => {\n const data = await api().get(`loanpool/conversations/user/${email}`)\n return data.data\n}\n\nexport const getMessages = async sid => {\n const data = await api().get(\n `chat/messages/${sid}`\n )\n return data.data.data\n}\n\nexport const createConversation = async buyerInfo => {\n const data = await api().put(`loanpool/conversation`, buyerInfo)\n return data.data\n}\n\nexport const getToken = async username => {\n const data = await api().post('chat/conversations/token', { username })\n return data.data\n}\n","// import { useLocalStorage } from './hooks/useLocalStorage'\nimport { getProposedBuyers } from './loanPools'\nimport api from './api'\nimport { getUserByEmail } from './loanPools'\nimport { getConversationsByUser } from './conversations'\n\nexport const cleanUrlParams = () => {\n // https://stackoverflow.com/a/66739808/4032361\n var currURL = window.location.href\n var url = currURL.split(window.location.host)[1].split('?')[0]\n window.history.replaceState({}, document.title, url)\n}\n\nexport const getBuyer = async (id, locationStateEntity) => {\n const res = await getProposedBuyers(id)\n let result\n if (res.buyer) {\n // Contract signed\n result = res.buyer\n } else {\n try {\n const filtered = res?.proposedBuyers.filter(\n b => b.entity.toLowerCase() === locationStateEntity.toLowerCase()\n )\n result = filtered[0]\n } catch (e) {\n console.log('getBuyer: ', e)\n }\n }\n return result\n}\n\nexport const getParticipantsAvatars = (participants) => {\n participants.forEach(async item => {\n const link = JSON.parse(item.attributes).avatar\n const avatar = await api().get(link, {\n responseType: 'blob'\n })\n let blob = URL.createObjectURL(avatar.data)\n localStorage.setItem(item.identity, JSON.stringify(blob))\n })\n}\n\nexport const getImage = async (profile) => {\n try {\n const link = profile.image\n const avatar = await api().get(link, {\n responseType: 'blob'\n })\n let blob = URL.createObjectURL(avatar.data)\n localStorage.setItem(profile.email, JSON.stringify(blob))\n } catch(e) {\n console.log('e: ', e);\n }\n}\n\nexport const initConversations = async (\n loanPool,\n email,\n entity,\n setBuyer,\n createConversation,\n setCurrentSid,\n location,\n countersigner,\n esignConvSid\n) => {\n const isOwner = email === loanPool?.owner?.email\n let signedUser = null\n if (isOwner) {\n try {\n signedUser = await getBuyer(loanPool.id, location.state?.entity)\n } catch (e) {\n console.log('signedUser error: ', e)\n }\n }\n\n const currentBuyer = () => {\n if (countersigner) {\n return countersigner\n }\n return signedUser ? signedUser.email : location.state?.email\n }\n\n const currentChat = () => {\n if (esignConvSid) {\n return esignConvSid\n }\n\n if (location.state?.conversationSid) {\n return location.state?.conversationSid\n }\n }\n\n // From callbackurl, portal or left panel chat\n let existingConversationSid = currentChat()\n\n if (!existingConversationSid) {\n try {\n const convByUser = await getConversationsByUser(currentBuyer())\n const result = convByUser.find(item => item.loanId === loanPool.id)\n existingConversationSid = result.conversationSid\n } catch (e) {\n console.log('convByUser e:', e)\n }\n }\n\n if (isOwner) {\n const user = await getUserByEmail(currentBuyer())\n setBuyer(user)\n }\n\n const participants = await createConversation({\n loanId: loanPool.id,\n email,\n entity,\n conversationSid: existingConversationSid\n })\n // getParticipantsAvatars(participants)\n setCurrentSid(participants[0].conversationSid)\n}\n\n// conversations: [\n// {\n// loanId: \"31\"\n// conversationSid: \"23423\"\n// buyer: [{email: \"\", entity: \"\"}, {email: \"\", entity: \"\"}, ...],\n// seller: [{email: \"\", entity: \"\"}, {email: \"\", entity: \"\"}, ...]\n// },\n// {\n// loanId: \"31\"\n// conversationSid: \"12312\"\n// buyer: [{email: \"\", entity: \"\"}, {email: \"\", entity: \"\"}, ...],\n// seller: [{email: \"\", entity: \"\"}, {email: \"\", entity: \"\"}, ...],\n// }\n// ]\n\nexport const getCounterpartyFromSid = (loan, email, conversationSid) => {\n let profile = null\n if (loan.conversations && loan.owner.email === email) {\n profile = loan.conversations?.find(item => item.conversationSid === conversationSid)?.buyer?.[0]\n } else if (loan.conversations) {\n profile = loan.conversations?.find(item => item.conversationSid === conversationSid)?.seller?.[0] || loan.owner\n }\n return profile\n}\n\nexport const getConvCounterparty = (loan, email) => {\n let profile = null\n if (loan.conversations && loan.owner.email === email) {\n profile = loan.conversations[0]?.buyer?.[0]\n } else if (loan.conversations) {\n profile = loan.conversations[0]?.seller?.[0] || loan.owner\n }\n return profile\n}\n","import { routes } from '../../router'\nimport { Link } from 'react-router-dom'\nimport Button from '../../components/Button'\nimport Icon from '../../components/Icon'\nimport { useState } from 'react'\nimport { getConvCounterparty } from '../../data/utils'\n\nconst MarketplaceActivities = ({ isLoading, data }) => {\n const [currentIdx, setCurrentIdx] = useState(0)\n const { email, entity } = JSON.parse(localStorage.getItem('user'))\n const limit = 5\n const loanPools = data?.loanPools?.filter(\n loan =>\n (loan.conversations || loan.owner.email.includes(email)) &&\n (loan.status.includes('not started') ||\n loan.status.includes('in progress') ||\n loan.status.includes('in draft'))\n )\n\n const handleNextClick = () => {\n setCurrentIdx(currentIdx => currentIdx + limit)\n }\n\n const handlePrevClick = () => {\n setCurrentIdx(currentIdx => currentIdx - limit)\n }\n\n return (\n <div className=\"p-8 my-6 border shadow-md\">\n <div className=\"flex items-center justify-between\">\n <h2 className=\"text-xl font-bold text-pantone\">\n Marketplace Activities\n </h2>\n <div className=\"flex items-center\">\n <p className=\"mr-6\">\n Showing{' '}\n <span className=\"font-bold\">\n {loanPools?.length > 0 ? currentIdx + 1 : 0}-\n {loanPools?.length >= currentIdx + limit\n ? currentIdx + limit\n : loanPools?.length}\n </span>{' '}\n from {loanPools?.length} activities\n </p>\n <div className=\"space-x-2\">\n <Button\n className=\"underline\"\n variant=\"link\"\n onClick={handlePrevClick}\n disabled={currentIdx === 0}\n >\n Prev\n </Button>\n <Button\n className=\"underline\"\n variant=\"link\"\n onClick={handleNextClick}\n disabled={currentIdx + limit >= loanPools?.length}\n >\n Next\n </Button>\n </div>\n </div>\n </div>\n {isLoading ? (\n <p className=\"mt-8\">Loading...</p>\n ) : (\n <table className=\"w-full mt-8\">\n <thead>\n <tr className=\"pb-3 border-b border-platinum\">\n <th className=\"pb-3 text-xs font-bold text-left uppercase text-onyx whitespace-nowrap\">\n Transaction\n </th>\n <th className=\"pb-3 text-xs font-bold text-left uppercase text-onyx whitespace-nowrap\">\n Counter Party\n </th>\n <th className=\"pb-3 text-xs font-bold text-left uppercase text-onyx whitespace-nowrap\">\n {entity.split(' ').map(word => word.charAt(0).toUpperCase())}{' '}\n Listing\n </th>\n <th className=\"pb-3 text-xs font-bold text-left uppercase text-onyx whitespace-nowrap\">\n Listing Type\n </th>\n <th className=\"pb-3 text-xs font-bold text-left uppercase text-onyx whitespace-nowrap\">\n Status\n </th>\n </tr>\n </thead>\n <tbody>\n {loanPools &&\n loanPools\n .slice(currentIdx, currentIdx + limit)\n .map((loan, index) => {\n const profile = getConvCounterparty(loan, email)\n\n const profileWithName = {\n name: profile?.displayName,\n ...profile\n }\n\n return (\n <tr key={index} className=\"border-b border-platinum\">\n <td className=\"py-6 text-sm font-bold\">\n <Link\n className=\"font-bold underline text-md\"\n to={\n loan.status === 'in draft'\n ? { pathname: routes.upload, state: loan }\n : {\n pathname: `${routes.detail}/${loan.id}`,\n state: profileWithName\n }\n }\n >\n {loan.title}\n </Link>\n </td>\n <td className=\"py-6 text-sm\">\n <Link\n className=\"font-bold underline text-md\"\n to={`${routes.profile}/${profile?.entity}`}\n >\n {profile?.entity}\n </Link>\n </td>\n <td className=\"py-6 text-sm\">\n {email === loan.owner.email ? 'Yes' : 'No'}\n </td>\n <td className=\"py-6 text-sm\">{loan.listType}</td>\n {!loan.status.includes('in progress') ? (\n <td className=\"py-6 text-sm\">\n {loan.conversations ? 'messaging' : loan.status}\n </td>\n ) : (\n <td className=\"flex items-center py-6 text-sm\">\n <Icon\n className=\"w-4 h-4 mr-1\"\n id={loan.status.replace(' ', '_').toLowerCase()}\n />\n {loan.status}\n </td>\n )}\n </tr>\n )\n })}\n </tbody>\n </table>\n )}\n </div>\n )\n}\n\nexport default MarketplaceActivities\n","import { Link } from 'react-router-dom'\nimport { routes } from '../../router'\nimport { getConvCounterparty } from '../../data/utils'\n\nconst Table = ({ loanPools }) => {\n const { email } = JSON.parse(localStorage.getItem('user'))\n return (\n <table className=\"w-full mt-8\">\n <thead>\n <tr className=\"pb-3 border-b border-platinum\">\n <th className=\"pb-3 text-xs font-bold text-left uppercase text-onyx whitespace-nowrap\">\n Transaction\n </th>\n <th className=\"pb-3 text-xs font-bold text-left uppercase text-onyx whitespace-nowrap\">\n Counter Party\n </th>\n <th className=\"pb-3 text-xs font-bold text-left uppercase text-onyx whitespace-nowrap\">\n Status\n </th>\n </tr>\n </thead>\n <tbody>\n {loanPools?.map((loan, index) => {\n const profile = getConvCounterparty(loan, email)\n return (\n <tr key={index} className=\"border-b border-platinum\">\n <td className=\"py-6 text-sm font-bold\">\n <Link\n className=\"font-bold underline text-md\"\n to={`${routes.dealroom}/${loan.id}`}\n >\n {loan.title}\n </Link>\n </td>\n <td className=\"py-6 text-sm\">\n <Link\n className=\"font-bold underline text-md\"\n to={`${routes.profile}/${profile?.entity}`}\n >\n {profile?.entity}\n </Link>\n </td>\n <td className=\"py-6 text-sm\">\n {loan.status.includes('pending')\n ? 'LOI Signed'\n : loan.status.includes('sold')\n ? 'Contract Signed'\n : loan.status.includes('completed')\n ? 'Completed'\n : loan.status.includes('in contract')\n ? 'In Contract'\n : null}\n </td>\n </tr>\n )})}\n </tbody>\n </table>\n )\n}\n\nexport default Table\n","import { useState } from 'react'\nimport { Tab, Tabs, TabList, TabPanel } from 'react-tabs'\nimport Button from '../../components/Button'\nimport Table from './Table'\n\nconst DealRoom = ({\n isLoading,\n data,\n tabIndex,\n setTabIndex,\n email,\n}) => {\n const [showAll, setShowAll] = useState(false)\n\n const handleClick = () => setShowAll(showAll => !showAll)\n\n return (\n <div className=\"p-8 my-6 border shadow-md col-span-4\">\n <div className=\"flex items-center justify-between\">\n <h2 className=\"text-xl font-bold text-pantone\">Deal Room</h2>\n <div className=\"flex items-center\">\n <Button className=\"underline\" variant=\"link\" onClick={handleClick}>\n {showAll ? 'Show less' : 'View all'}\n </Button>\n </div>\n </div>\n {isLoading ? (\n <p className=\"mt-8\">Loading...</p>\n ) : showAll ? (\n <Table loanPools={data} email={email} />\n ) : (\n <Tabs\n className=\"mt-8\"\n selectedIndex={tabIndex}\n onSelect={index => setTabIndex(index)}\n >\n <TabList className=\"flex\">\n <Tab\n className={`flex-1 font-bold text-center text-md pb-4 cursor-pointer ${\n tabIndex === 0\n ? 'text-pantone border-b-4 border-pantone'\n : 'text-quickSilver'\n }`}\n >\n Buy\n </Tab>\n <Tab\n className={`flex-1 font-bold text-center text-md cursor-pointer pb-4 ${\n tabIndex === 1\n ? 'text-pantone border-b-4 border-pantone'\n : 'text-quickSilver'\n }`}\n >\n Sell\n </Tab>\n </TabList>\n <TabPanel>\n <Table\n loanPools={data?.filter(\n loan => !loan.owner.email.includes(email)\n )}\n email={email}\n />\n </TabPanel>\n <TabPanel>\n <Table\n loanPools={data?.filter(loan => loan.owner.email.includes(email))}\n email={email}\n />\n </TabPanel>\n </Tabs>\n )}\n </div>\n )\n}\n\nexport default DealRoom\n","import { useQuery } from 'react-query'\nimport { getLoanPools } from '../../data/loanPools'\nimport { routes } from '../../router'\nimport { Link } from 'react-router-dom'\nimport Button from '../../components/Button'\nimport { getConvCounterparty } from '../../data/utils'\n\nconst History = () => {\n const { isLoading, error, data } = useQuery('loanpools', getLoanPools)\n const { email } = JSON.parse(localStorage.getItem('user'))\n\n if (error) return error.message\n\n const limit = 5\n const loanPools = data?.loanPools?.filter(\n loan => loan.status.includes('sold') || loan.status.includes('completed')\n )\n\n return (\n <div className=\"p-8 my-6 border shadow-md col-span-3\">\n <div className=\"flex items-center justify-between\">\n <h2 className=\"text-xl font-bold text-pantone\">History</h2>\n <div className=\"flex items-center\">\n <Button className=\"underline\" variant=\"link\">\n View all\n </Button>\n </div>\n </div>\n {isLoading ? (\n <p className=\"mt-8\">Loading...</p>\n ) : (\n <table className=\"w-full mt-8\">\n <thead>\n <tr className=\"pb-3 border-b border-platinum\">\n <th className=\"pb-3 text-xs font-bold text-left uppercase text-onyx whitespace-nowrap\">\n Transaction\n </th>\n <th className=\"pb-3 text-xs font-bold text-left uppercase text-onyx whitespace-nowrap\">\n Counter Party\n </th>\n <th className=\"pb-3 text-xs font-bold text-left uppercase text-onyx whitespace-nowrap\">\n Final Status\n </th>\n </tr>\n </thead>\n <tbody>\n {loanPools?.slice(0, limit).map((loan, index) => {\n const profile = getConvCounterparty(loan, email)\n return (\n <tr key={index} className=\"border-b border-platinum\">\n <td className=\"py-6 text-sm font-bold\">\n <Link\n className=\"font-bold underline text-md\"\n to={`${routes.detail}/${loan.id}`}\n >\n {loan.title}\n </Link>\n </td>\n <td className=\"py-6 text-sm\">\n <Link\n className=\"font-bold underline text-md\"\n to={`${routes.profile}/${profile?.entity}`}\n >\n {profile?.entity}\n </Link>\n </td>\n <td className=\"flex py-6 text-sm\">{loan.listType}</td>\n </tr>\n )})}\n </tbody>\n </table>\n )}\n </div>\n )\n}\n\nexport default History\n","import { useEffect, useState } from 'react'\nimport { useQuery } from 'react-query'\nimport { getLoanPools } from '../../data/loanPools'\nimport AppBar from '../../components/AppBar'\nimport MarketplaceActivities from './MarketplaceActivities'\nimport DealRoom from './DealRoom'\nimport Button from '../../components/Button'\nimport History from './History'\nimport { useHistory } from 'react-router-dom'\nimport { getActiveDeals } from '../../data/loanPools'\n\nconst Portal = () => {\n const { isLoading, error, data, isSuccess } = useQuery('loanpools', () => getLoanPools)\n const { email, entity } = JSON.parse(localStorage.getItem('user'))\n const [tabIndex, setTabIndex] = useState(0)\n const [activeDeals, setActiveDeals] = useState([])\n const history = useHistory()\n\n const dealroomData = data?.loanPools?.filter(\n loanPool =>\n (loanPool.status.includes('pending') ||\n loanPool.status.includes('sold') ||\n loanPool.status.includes('in contract') ||\n loanPool.status.includes('completed')) &&\n loanPool.conversations\n )\n\n useEffect(() => {\n const retrieveActiveDeals = async () => {\n try {\n const res = await getActiveDeals(email)\n setActiveDeals(res?.deals)\n } catch (e) {\n console.log(e)\n }\n }\n retrieveActiveDeals()\n }, [entity, email])\n\n useEffect(() => {\n if (activeDeals) {\n const latest = activeDeals.sort(\n (a, b) => Date.parse(b.lastUpdated?.replace(' ', '')) - Date.parse(a.lastUpdated?.replace(' ', ''))\n )[0]\n if (latest?.dealRole === 'buyer') {\n setTabIndex(0)\n } else if (latest?.dealRole === 'seller') {\n setTabIndex(1)\n }\n }\n }, [activeDeals])\n\n return (\n <div>\n <AppBar selectedIndex={0} />\n <div className=\"px-12 my-6\">\n <div className=\"container min-h-screen py-8 mx-auto\">\n <div className=\"flex items-center justify-between mb-5\">\n <h1 className=\"text-3xl font-bold align-middle text-eerie\">\n {entity}\n </h1>\n <span>\n <Button\n onClick={() => history.push('/upload')}\n className=\"ml-8\"\n variant=\"contained\"\n >\n Create marketplace listing\n </Button>\n </span>\n </div>\n <MarketplaceActivities\n isLoading={isLoading}\n error={error}\n data={data}\n />\n <div className=\"grid grid-cols-7 gap-x-6\">\n <DealRoom\n isSuccess={isSuccess}\n isLoading={isLoading}\n error={error}\n data={dealroomData}\n tabIndex={tabIndex}\n setTabIndex={setTabIndex}\n email={email}\n />\n <History />\n </div>\n </div>\n </div>\n </div>\n )\n}\n\nexport default Portal\n","export default __webpack_public_path__ + \"static/media/brand_logo.380025ae.svg\";","export default __webpack_public_path__ + \"static/media/logo.caedf520.svg\";","import { useHistory, Link } from 'react-router-dom'\nimport { useForm } from 'react-hook-form'\nimport { routes } from '../../router'\nimport Button from '../../components/Button'\nimport brand_logo from '../../assets/images/brand_logo.svg'\nimport logo from '../../assets/images/logo.svg'\nimport { app } from '../../data/firebaseConfig'\n\nconst styles = {\n label: {\n top: '8px',\n left: '16px'\n }\n}\n\nconst Login = () => {\n const { register, watch, handleSubmit } = useForm()\n const history = useHistory()\n\n const handleSignInSubmit = async ({ email, password }) => {\n const { user } = await app\n .auth()\n .signInWithEmailAndPassword(email, password)\n if (!user) return\n const authToken = await user.getIdToken()\n console.log('authToken: ', authToken);\n const { claims } = await app.auth().currentUser.getIdTokenResult()\n localStorage.setItem(\n 'user',\n JSON.stringify({\n email: email.toLowerCase(),\n authToken,\n entity: claims.entity\n })\n )\n if (user) history.push(routes.root)\n }\n\n return (\n <div className=\"flex flex-col items-center justify-center min-h-screen bg-cover bg-login\">\n <div className=\"flex flex-col\">\n <img\n src={brand_logo}\n alt=\"PN logo\"\n className=\"inline-block w-48 mb-8\"\n />\n <img\n src={logo}\n alt=\"Date logo\"\n className=\"inline-block w-48 mb-8\"\n />\n </div>\n <form\n name=\"loginForm\"\n className=\"w-2/5 p-6 bg-white rounded-lg\"\n onSubmit={handleSubmit(handleSignInSubmit)}\n >\n <div className=\"relative\">\n <label\n className=\"absolute text-sm text-quickSilver\"\n style={styles.label}\n >\n Email\n </label>\n <input\n name=\"email\"\n type=\"email\"\n className=\"w-full px-4 pb-2 border rounded-lg rounded-bl-none rounded-br-none pt-7 border-quickSilver focus:outline-none text-md\"\n {...register('email')}\n />\n </div>\n <div className=\"relative\">\n <label\n className=\"absolute text-sm text-quickSilver\"\n style={styles.label}\n >\n Password\n </label>\n <input\n name=\"password\"\n type=\"password\"\n className=\"w-full px-4 pb-2 border border-t-0 rounded-lg rounded-tl-none rounded-tr-none pt-7 border-quickSilver focus:outline-none text-md\"\n {...register('password')}\n />\n </div>\n <Button\n id=\"loginBtn\"\n className=\"w-full mt-4 bg-quickSilver\"\n type=\"submit\"\n disabled={!watch().email || !watch().password}\n >\n Continue\n </Button>\n <div className=\"flex items-center mt-3\">\n <div className=\"flex-1 border-b border-quickSilver\" />\n <span className=\"mx-4 text-sm text-quickSilver\">or</span>\n <div className=\"flex-1 border-b border-quickSilver\" />\n </div>\n <p className=\"mt-4 text-sm\">\n Don't have an account?{' '}\n <Link className=\"underline\" to=\"/signup\">\n Sign up\n </Link>\n </p>\n </form>\n </div>\n )\n}\n\nexport default Login\n","import api from './api'\n\nexport const uploadDoc = async (loanId, formData) => {\n const data = await api().post(`loanpool/pool/${loanId}/uploadDoc`, formData, {\n headers: { 'Content-Type': 'multipart/form-data' }\n })\n return data.data\n}\n\nexport const uploadContract = async (loanId, formData) => {\n formData.append('name', 'contract')\n formData.append('accessType', 'due diligence')\n const data = await api().put(`loanpool/pool/${loanId}/contract`, formData, {\n headers: { 'Content-Type': 'multipart/form-data' }\n })\n return data.data\n}\n\nexport const getAllDocNames = async loanId => {\n const data = await api().get(`loanpool/pool/${loanId}/allDocNames`)\n return data.data\n}\n\nexport const getDoc = async (loanId, docName) => {\n const data = await api().get(`loanpool/pool/${loanId}/getDoc/${docName}`, {\n responseType: 'blob',\n responseEncoding: 'binary'\n })\n return data.data\n}\n\nexport const getContract = async (loanId) => {\n const data = await api().get(`loanpool/pool/${loanId}/contract`)\n return data.data\n}\n\nexport const getThumbnail = async (loanId, docName) => {\n const data = await api().get(`loanpool/pool/${loanId}/thumbnail/${docName}`, {\n responseType: 'blob'\n })\n return data.data\n}\n\nexport const restoreDoc = async (loanId, docInfo) => {\n// version is the desired version\n// { \"docName\": \"string\", \"version\": \"string\" }\n const data = await api().put(`/loanpool/pool/${loanId}/restoreDoc`, docInfo)\n return data.data\n}\n\nexport const getDocthumbnail = async (loanId, docName) => {\n const data = await api().get(\n `loanpool/pool/${loanId}/docthumbnail/${docName}`\n )\n return data.data\n}\n\nexport const customizeDoc = async data => {\n const response = await api().post('/loanpool/customize/doc', data, {\n responseType: 'blob',\n responseEncoding: 'binary'\n })\n return response.data\n}\n\nexport const getClickWrap = async data => {\n const response = await api().post('docusign/clickwrap', data, {\n headers: { 'Content-Type': 'multipart/form-data' }\n })\n return response.data\n}\n\nexport const getESign = async data => {\n const response = await api().post('docusign/esign', data, {\n headers: { 'Content-Type': 'multipart/form-data' }\n })\n return response.data\n}\n\nexport const getDocEsign = async (id, filename) => {\n const response = await api().get(`/docusign/esign/${id}/${filename}`, {\n responseType: 'blob',\n responseEncoding: 'binary'\n })\n return response.data\n}\n","import { ComposableMap, Geographies, Geography } from 'react-simple-maps'\nimport geography from './geography.json'\nimport states from './states.json'\n\nconst Mapchart = ({ statesInfo }) => {\n return (\n <ComposableMap projection=\"geoAlbersUsa\">\n <Geographies geography={geography}>\n {({ geographies }) => (\n <>\n {geographies.map(geo => {\n const stateInfo = statesInfo?.find(\n stateInfo => states[stateInfo.state].id === geo.id\n )\n return (\n <Geography\n key={geo.rsmKey}\n stroke=\"white\"\n fill={\n stateInfo?.percentLoan > 0\n ? `rgba(68, 183, 87, ${stateInfo.percentLoan / 100})`\n : stateInfo\n ? '#A7A7A7'\n : '#EAEAED'\n }\n geography={geo}\n />\n )\n })}\n </>\n )}\n </Geographies>\n </ComposableMap>\n )\n}\n\nexport default Mapchart\n","const modalStyles = {\n overlay: {\n backgroundColor: 'rgba(0, 0, 0, 0.7)'\n },\n content: {\n top: '50%',\n left: '50%',\n right: 'auto',\n bottom: 'auto',\n marginRight: '-50%',\n transform: 'translate(-50%, -50%)',\n borderRadius: 12\n }\n}\n\nexport default modalStyles\n","import { useState } from 'react'\nimport { useHistory } from 'react-router-dom'\nimport { updateLoanPool } from '../../data/loanPools'\nimport { getAllDocNames, getDoc } from '../../data/documents'\nimport { routes } from '../../router'\nimport classNames from 'classnames'\nimport numeral from 'numeral'\nimport Modal from 'react-modal'\nimport Button from '../Button'\nimport Icon from '../Icon'\nimport Mapchart from '../Mapchart'\nimport modalStyles from '../../assets/styles/modalStyles'\nimport toaster from 'react-hot-toast'\n\nModal.setAppElement('#root')\n\nconst LoanCard = ({ children, loanPool, className, footer = true, isOwner }) => {\n const [bookmark, setBookmark] = useState(loanPool.bookmark)\n const [isModalOpen, setModalOpen] = useState(false)\n const [brochure, setBrochure] = useState(null)\n const history = useHistory()\n\n const handleMessage = () => {\n history.push(`${routes.detail}/${loanPool.id}`)\n }\n\n const handleBookmark = async () => {\n await updateLoanPool({ ...loanPool, bookmark: !loanPool.bookmark })\n setBookmark(bookmark => !bookmark)\n }\n\n const handleBrochureMessage = async () => {\n try {\n const docNames = await getAllDocNames(loanPool.id)\n const brochure = await getDoc(\n loanPool.id,\n docNames.filter(doc => doc.description.includes('brochure'))[0].name\n )\n const blob = URL.createObjectURL(brochure)\n setBrochure(blob)\n setModalOpen(true)\n } catch (err) {\n toaster.error(err.response.data.message)\n }\n }\n\n return (\n <>\n <div\n className={classNames(\n 'flex flex-col justify-between p-6 border shadow-lg min-w-loan-card max-w-loan-card',\n className\n )}\n >\n <div>\n <header>\n <div className=\"flex justify-between\">\n <h1 className=\"text-2xl font-bold\">{loanPool.title}</h1>\n <button className=\"focus:outline-none\" onClick={handleBookmark}>\n <Icon\n className=\"w-5 h-5\"\n id={bookmark ? 'bookmark_filled' : 'bookmark'}\n />\n </button>\n </div>\n <p className=\"pt-3 text-md\">\n Originated by{' '}\n <a className=\"underline\" href=\"/#\">\n {loanPool.owner?.displayName}\n </a>\n </p>\n <p className=\"pt-4 text-md\">{loanPool.description}</p>\n </header>\n <section>\n <ul className=\"flex justify-around pt-5 pb-2 text-center\">\n <li id=\"listType\" className=\"flex items-center px-3 py-2 text-sm rounded-full bg-cultured\">\n {loanPool.listType}\n </li>\n <li id=\"loanClass\" className=\"flex items-center px-3 py-2 ml-3 text-sm rounded-full bg-cultured\">\n {loanPool.loanType?.loanClass}\n </li>\n <li id=\"loanType\" className=\"flex items-center px-3 py-2 ml-3 text-sm rounded-full bg-cultured\">\n {loanPool.loanType?.type}\n </li>\n </ul>\n </section>\n <section className=\"mb-3\">\n <ul className=\"flex flex-wrap justify-around m-2 text-center\">\n {loanPool.productTags?.map((tag, index) => (\n <li\n key={'tag-'+index}\n id=\"productTags\"\n className=\"flex items-center text-sm\">\n <span>\n <Icon\n className=\"w-3 h-3\"\n id='tag'\n />\n </span>\n <span className=\"ml-1\">\n {tag}\n </span>\n </li>\n ))}\n </ul>\n </section>\n <section className=\"flex px-6 py-4\">\n <Mapchart statesInfo={loanPool.statesInfo} />\n <table className=\"ml-5\">\n <thead>\n <tr className=\"text-left\">\n <th className=\"text-sm font-normal\">States</th>\n <th className=\"text-sm font-normal\">Compositions</th>\n </tr>\n </thead>\n <tbody>\n {loanPool.statesInfo\n ?.sort((a, b) => a.percentLoan - b.percentLoan)\n .reverse()\n .map((state, index) => (\n <tr key={index}>\n <td className=\"text-sm\">{state.state}</td>\n <td className=\"text-sm text-right\">\n {state.percentLoan} %\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </section>\n <section className=\"mb-6\">\n <ul>\n {loanPool.generalInfo?.currentBalance && (\n <li className=\"flex justify-between py-2 border-b text-md\">\n <span>Current Balance</span>\n <span>\n {numeral(loanPool.generalInfo?.currentBalance).format(\n '$ 0,0'\n )}\n </span>\n </li>\n )}\n {loanPool.generalInfo?.originalBalance && (\n <li className=\"flex justify-between py-2 border-b text-md\">\n <span>Original Balance</span>\n <span>\n {numeral(loanPool.generalInfo?.originalBalance).format(\n '$ 0,0'\n )}\n </span>\n </li>\n )}\n {loanPool.generalInfo?.grossWAC && ( \n <li className=\"flex justify-between py-2 border-b text-md\">\n <span>Gross WAC</span>\n <span>\n {numeral(loanPool.generalInfo?.grossWAC / 100).format(\n '0.00 %'\n )}\n </span>\n </li>\n )}\n {loanPool.generalInfo?.price && ( \n <li className=\"flex justify-between py-2 border-b text-md\">\n <span>Price</span>\n <span>\n {numeral(loanPool.generalInfo?.price).format('0,0.000')}\n </span>\n </li>\n )}\n {Number(loanPool.generalInfo?.sellerRetainedPercent) !== 0 && (\n <li className=\"flex justify-between py-2 border-b text-md\">\n <span>Seller Retained</span>\n <span>\n {numeral(\n loanPool.generalInfo?.sellerRetainedPercent / 100\n ).format('0 %')}\n </span>\n </li>\n )}\n {loanPool.generalInfo?.serviceFee && ( \n <li className=\"flex justify-between py-2 border-b text-md\">\n <span>Service Fee</span>\n <span>{loanPool.generalInfo?.serviceFee}</span>\n </li>\n )}\n {loanPool.generalInfo?.waBalance && ( \n <li className=\"flex justify-between py-2 border-b text-md\">\n <span>WA Balance</span>\n <span>\n {numeral(loanPool.generalInfo?.waBalance).format('$ 0,0')}\n </span>\n </li>\n )}\n {loanPool.loanType?.waCreditScore && (\n <li className=\"flex justify-between py-2 border-b text-md\">\n <span>WA Credit Score</span>\n <span>\n {numeral(loanPool.loanType?.waCreditScore).format('0,0.0')}\n </span>\n </li>\n )}\n {loanPool.loanType?.waDebtToIncome && (\n <li className=\"flex justify-between py-2 border-b text-md\">\n <span>WA Debt To Income</span>\n <span>\n {numeral(loanPool.loanType?.waDebtToIncome).format('0,0.0')}\n </span>\n </li>\n )}\n {loanPool.loanType?.waLTV && (\n <li className=\"flex justify-between py-2 border-b text-md\">\n <span>WA Loan To Value</span>\n <span>\n {numeral(loanPool.loanType?.waLTV).format('0,0.0')}\n </span>\n </li>\n )}\n {loanPool.loanType?.waCLTV && (\n <li className=\"flex justify-between py-2 border-b text-md\">\n <span>WA Combined Loan To Value</span>\n <span>\n {numeral(loanPool.loanType?.waCLTV).format('0,0.0')}\n </span>\n </li>\n )}\n {loanPool.generalInfo?.count && (\n <li className=\"flex justify-between py-2 border-b text-md\">\n <span>Count</span>\n <span>{loanPool.generalInfo?.count}</span>\n </li>\n )}\n </ul>\n </section>\n </div>\n {footer && (\n <footer className=\"flex justify-between\">\n <Button variant=\"outlined\" onClick={handleBrochureMessage}>\n View Brochure\n </Button>\n <Button variant=\"outlined\" onClick={handleMessage} disabled={isOwner}>\n Message Seller\n </Button>\n </footer>\n )}\n {children}\n </div>\n <Modal\n isOpen={isModalOpen}\n onRequestClose={() => setModalOpen(false)}\n style={modalStyles}\n >\n <iframe\n src={brochure}\n width=\"900px\"\n height=\"700px\"\n ></iframe>\n </Modal>\n </>\n )\n}\n\nexport default LoanCard\n","const FilterOption = ({ children, checked, value, onValueChange }) => {\n const handleChange = event => onValueChange(event)\n\n return (\n <li className=\"flex items-center py-0.5\">\n <input\n className=\"mr-2\"\n type=\"checkbox\"\n name={value}\n id={value}\n value={value}\n checked={checked}\n onChange={handleChange}\n />\n <label className=\"text-md whitespace-nowrap\" htmlFor={value}>\n {children}\n </label>\n </li>\n )\n}\n\nexport default FilterOption\n","import { useState, useRef, useEffect } from 'react'\nimport classNames from 'classnames'\nimport Icon from '../Icon'\nimport Button from '../Button'\nimport FilterOption from '../FilterOption'\nimport loan from '../../data/loan.json'\n\nconst FilterDropdown = ({ text, onFilter, valuesKey, className }) => {\n const [isVisible, setVisible] = useState(false)\n const [isClearable, setClearable] = useState(false)\n const [values, setValues] = useState(\n Object.keys(loan[valuesKey]).map(value => {\n return { value, isChecked: false }\n })\n )\n const listContainer = useRef()\n\n const handleClickOutside = event => {\n if (listContainer.current && !listContainer.current.contains(event.target))\n setVisible(false)\n }\n\n const handleClick = () => setVisible(isVisible => !isVisible)\n\n const handleFilterClick = () => {\n const checkedValues = values\n .filter(value => value.isChecked)\n .map(value => value.value)\n onFilter(valuesKey, checkedValues)\n setClearable(checkedValues.length > 0)\n }\n\n const handleClearClick = () => {\n onFilter(valuesKey, [])\n setValues(values =>\n values.map(value => {\n return { ...value, isChecked: false }\n })\n )\n setClearable(false)\n }\n\n const handleValueChange = event => {\n setValues(values =>\n values.map(value => {\n return value.value === event.target.value\n ? { ...value, isChecked: event.target.checked }\n : value\n })\n )\n }\n\n useEffect(() => {\n document.addEventListener('click', handleClickOutside)\n\n return () => document.removeEventListener('click', handleClickOutside)\n }, [])\n\n return (\n <div className={classNames('relative', className)} ref={listContainer}>\n <button\n className={classNames(\n 'flex items-center px-4 py-2 border rounded-full focus:outline-none',\n isVisible ? 'border-black' : 'border-quickSilver',\n { 'bg-black text-white': isClearable }\n )}\n onClick={handleClick}\n >\n <span className=\"mr-1.5 text-md\">{text}</span>\n <Icon\n id=\"chevron_down\"\n className={classNames(\n 'w-3 h-3 transform transition-transform duration-150',\n { 'fill-current text-white': isClearable },\n {\n '-rotate-180': isVisible\n }\n )}\n />\n </button>\n {isVisible && (\n <div className=\"absolute p-3 bg-white rounded shadow\">\n <ul className=\"\">\n {Object.keys(loan[valuesKey]).sort().map((value, index) => (\n <FilterOption\n key={index}\n value={value}\n onValueChange={handleValueChange}\n checked={values.find(v => v.value === value).isChecked}\n >\n {loan[valuesKey][value]}\n </FilterOption>\n ))}\n </ul>\n <hr className=\"my-4\" />\n <div className=\"flex items-center justify-between\">\n <Button\n className=\"mr-8\"\n variant=\"link\"\n onClick={handleClearClick}\n disabled={!isClearable}\n >\n Clear\n </Button>\n <Button variant=\"contained\" onClick={handleFilterClick}>\n Apply\n </Button>\n </div>\n </div>\n )}\n </div>\n )\n}\n\nexport default FilterDropdown\n","import Button from '../../components/Button'\nimport FilterDropdown from '../../components/FilterDropdown'\nimport Icon from '../../components/Icon'\nconst FilterBar = ({ onGlobalFilter, onFilter }) => {\n const handleChange = event => {\n onGlobalFilter(event.target.value)\n }\n return (\n <div className=\"flex justify-between mb-8\">\n <div className=\"flex\">\n <div className=\"relative\">\n <input\n className=\"py-2 pl-10 pr-6 border rounded-full text-onyx bg-cultured border-quickSilver text-md focus:outline-none\"\n placeholder=\"Search loans\"\n onChange={handleChange}\n />\n <Icon\n className=\"absolute w-3.5 h-3.5 fill-current top-2/4 left-5 transform -translate-y-1/2 text-quickSilver\"\n id=\"search\"\n />\n </div>\n <FilterDropdown\n className=\"ml-4\"\n text=\"Listing Type\"\n onFilter={onFilter}\n valuesKey=\"listType\"\n />\n <FilterDropdown\n className=\"ml-2\"\n text=\"Loan Class\"\n onFilter={onFilter}\n valuesKey=\"loanClass\"\n />\n <FilterDropdown\n className=\"ml-2\"\n text=\"Loan Type\"\n onFilter={onFilter}\n valuesKey=\"loanType\"\n />\n <FilterDropdown\n className=\"ml-2\"\n text=\"Product Tag\"\n onFilter={onFilter}\n valuesKey=\"productTag\"\n />\n <FilterDropdown\n className=\"ml-2\"\n text=\"Location\"\n onFilter={onFilter}\n valuesKey=\"location\"\n />\n </div>\n <Button variant=\"contained\">Save Filter Preferences</Button>\n </div>\n )\n}\n\nexport default FilterBar\n","import { useMemo, useState } from 'react'\nimport { useTable, useGlobalFilter, useFilters } from 'react-table'\nimport { useHistory } from 'react-router-dom'\nimport { routes } from '../../router'\nimport Modal from 'react-modal'\nimport FilterBar from './FilterBar'\nimport Button from '../Button'\nimport Icon from '../Icon'\nimport loan from '../../data/loan.json'\nimport LoanCard from '../LoanCard'\nimport modalStyles from '../../assets/styles/modalStyles'\n\nconst LoansTable = ({ loanPools, onToggle }) => {\n const history = useHistory()\n const [loanClicked, setLoanClicked] = useState(null)\n const [isModalOpen, setModalOpen] = useState(false)\n const data = useMemo(() => loanPools, [loanPools])\n const { email } = JSON.parse(localStorage.getItem('user'))\n const columns = useMemo(() => {\n const handleMessageClick = loanId => {\n history.push(`${routes.messages}/${loanId}`)\n }\n\n /*NOTE: We're not using loan.json since backend now returns dispayable\n * values instead of capitalized enums\n */\n return [\n {\n Header: 'Type',\n id: 'listType',\n accessor: ({ listType }) => loan.listType[listType.toUpperCase()],\n filter: (rows, _, filterValue) =>\n rows.filter(\n row =>\n filterValue.includes(row.values.listType.toUpperCase()) ||\n filterValue.length === 0\n )\n },\n {\n Header: 'Listing',\n accessor: 'title',\n Cell: function Listing({ value }) {\n return <span className=\"font-bold whitespace-nowrap\">{value}</span>\n }\n },\n {\n Header: 'Listed by',\n accessor: 'owner.displayName',\n Cell: function ListedBy({ value }) {\n return (\n <a className=\"underline whitespace-nowrap\" href=\"/\">\n {value}\n </a>\n )\n }\n },\n {\n Header: 'Availability',\n id: 'availability',\n accessor: ({ availability }) =>\n loan.availability[availability.toUpperCase()],\n Cell: function Availability({ value }) {\n return (\n <div className=\"flex items-center\">\n <Icon\n className={`w-4 h-4 mr-1 fill-current text-${\n value.toUpperCase().includes('NOT') ? 'error' : 'pantone'\n }`}\n id={\n value.toUpperCase().includes('NOT')\n ? 'unavailable'\n : 'available'\n }\n />\n {value}\n </div>\n )\n }\n },\n // {\n // Header: 'Status',\n // id: 'status',\n // accessor: ({ status }) => loan.status[status],\n // Cell: ({ value }) => (\n // <div className=\"flex items-center whitespace-nowrap\">\n // <Icon className=\"w-4 h-4 mr-1\" id=\"in_progress\" />\n // {value}\n // </div>\n // )\n // },\n {\n Header: 'Loan Class',\n id: 'loanClass',\n accessor: props => {\n //console.log(props?.loanType?.loanClass?.toUpperCase())\n return loan.loanClass[props?.loanType?.loanClass?.toUpperCase()]\n },\n\n filter: (rows, _, filterValue) =>\n rows.filter(\n row =>\n filterValue.includes(row.values.loanClass?.toUpperCase()) ||\n filterValue.length === 0\n )\n },\n {\n Header: 'Loan Type',\n id: 'loanType',\n accessor: props => loan.loanType[props?.loanType?.type?.toUpperCase()],\n filter: (rows, _, filterValue) =>\n rows.filter(\n row =>\n filterValue.includes(row.values.loanType?.toUpperCase()) ||\n filterValue.length === 0\n )\n },\n {\n Header: 'Product Tags',\n id: 'productTag',\n accessor: ({ productTags }) =>\n productTags.map(\n productTag => loan.productTag[productTag.toUpperCase()]\n ),\n Cell: ({ value }) => value.map(tag => tag).join(','),\n filter: (rows, _, filterValue) =>\n rows.filter(row =>\n row.values.productTag.some(\n tag =>\n filterValue.includes(tag?.toUpperCase()) ||\n filterValue.length === 0\n )\n )\n },\n {\n Header: 'Location',\n id: 'location',\n accessor: ({ statesInfo }) =>\n statesInfo.map(stateInfo => stateInfo.state),\n Cell: ({ value }) => value.map(state => loan.location[state]).join(','),\n filter: (rows, _, filterValue) =>\n rows.filter(row =>\n row.values.location.some(\n location =>\n filterValue.includes(location.toUpperCase()) ||\n filterValue.length === 0\n )\n )\n },\n {\n Header: 'Message Lister',\n Cell: function MessageLister({ cell }) {\n const loanId = cell.row.original.id\n return (\n <Button\n variant=\"outlined\"\n onClick={() => handleMessageClick(loanId)}\n disabled={email === cell.row.original.owner.email}\n >\n Message\n </Button>\n )\n }\n }\n ]\n }, [history])\n\n const tableInstance = useTable({ columns, data }, useGlobalFilter, useFilters)\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups,\n rows,\n setGlobalFilter,\n setFilter,\n prepareRow\n } = tableInstance\n\n const handleLoanClick = row => {\n setLoanClicked(row.original)\n setModalOpen(true)\n }\n\n return (\n <div className=\"m-5\">\n <div className=\"flex items-center justify-between\">\n <h1 className=\"my-6 text-2xl font-semibold text-eerie\">\n {`${rows.length} loans`}\n </h1>\n <span>\n <Button variant=\"outlined\" onClick={onToggle}>\n Card View\n </Button>\n <Button\n onClick={() => history.push('/upload')}\n className=\"ml-8\"\n variant=\"contained\"\n >\n Create marketplace listing\n </Button>\n </span>\n </div>\n <FilterBar onGlobalFilter={setGlobalFilter} onFilter={setFilter} />\n <div className=\"overflow-x-auto\">\n <table {...getTableProps()}>\n <thead>\n {headerGroups.map((headerGroup, index) => (\n <tr\n key={'headergroup' + index}\n className=\"border-b border-platinum\"\n {...headerGroup.getHeaderGroupProps()}\n >\n {headerGroup.headers.map((column, index) => (\n <th\n key={'header' + index}\n className=\"px-4 py-2 font-semibold text-left uppercase text-md text-onyx whitespace-nowrap\"\n {...column.getHeaderProps()}\n >\n {column.render('Header')}\n </th>\n ))}\n </tr>\n ))}\n </thead>\n <tbody {...getTableBodyProps()}>\n {rows.map((row, index) => {\n prepareRow(row)\n return (\n <tr\n key={'row' + index}\n className=\"border-b cursor-pointer border-platinum hover:bg-platinum\"\n {...row.getRowProps()}\n onClick={() => handleLoanClick(row)}\n >\n {row.cells.map((cell, index) => (\n <td\n key={'cell' + index}\n className=\"px-4 py-4 text-md\"\n {...cell.getCellProps()}\n >\n {cell.render('Cell')}\n </td>\n ))}\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n <Modal\n isOpen={isModalOpen}\n onRequestClose={() => setModalOpen(false)}\n style={modalStyles}\n >\n <LoanCard loanPool={loanClicked} />\n </Modal>\n </div>\n )\n}\n\nexport default LoansTable\n","const Pagination = ({\n setCurrentPage,\n isPreviousData,\n currentPage,\n totalPages = 1\n}) => {\n\n const page = currentPage + 1\n const total = totalPages + 1\n\n return (\n <div className=\"pt-2 pb-4\">\n <button\n disabled={isPreviousData || currentPage <= 0}\n className=\"p-2 text-sm bg-white border rounded-full\"\n onClick={() => {\n setCurrentPage(p => p - 1)\n }}\n >\n Prev\n </button>\n <span className=\"text-sm\">\n {' '}\n Page: {page}/{total - 1}{' '}\n </span>\n <button\n disabled={isPreviousData || currentPage === totalPages - 1}\n className=\"p-2 text-sm bg-white border rounded-full\"\n onClick={() => {\n setCurrentPage(p => p + 1)\n }}\n >\n Next\n </button>\n </div>\n )\n}\n\nexport default Pagination\n","import { useState } from 'react'\nimport { useQuery } from 'react-query'\nimport { useHistory } from 'react-router-dom'\nimport { getLoanPools } from '../../data/loanPools'\nimport AppBar from '../../components/AppBar'\nimport LoanCard from '../../components/LoanCard'\nimport Button from '../../components/Button'\nimport LoansTable from '../../components/LoansTable'\nimport Pagination from './Pagination'\n\nconst Marketplace = () => {\n const history = useHistory()\n const listed = ['not started', 'in progress']\n\n const [currentPage, setCurrentPage] = useState(0)\n const { isLoading, error, data, isPreviousData } = useQuery(\n ['loanpools', currentPage],\n () => getLoanPools(currentPage),\n {\n keepPreviousData: true\n }\n )\n const [isTabular, setTabular] = useState(false)\n const { email } = JSON.parse(localStorage.getItem('user'))\n\n if (error) return error.message\n\n const handleToggle = () => setTabular(isTabular => !isTabular)\n\n // console.log(data?.loanPools)\n\n const loanPools = data?.loanPools?.filter(\n loanPool => listed.includes(loanPool.status)\n )\n\n return (\n <div>\n <AppBar selectedIndex={1} />\n <div className=\"container mx-auto\">\n {isTabular ? (\n <LoansTable loanPools={loanPools} onToggle={handleToggle} />\n ) : (\n <>\n <div className=\"flex items-center justify-between m-5\">\n <h1 className=\"my-6 text-3xl font-bold text-eerie\">\n Marketplace\n </h1>\n <span>\n <Button variant=\"outlined\" onClick={handleToggle}>\n Tabular view\n </Button>\n <Button\n onClick={() => history.push('/upload')}\n className=\"ml-8\"\n variant=\"contained\"\n >\n Create marketplace listing\n </Button>\n </span>\n </div>\n <section className=\"flex flex-wrap justify-between mx-5\">\n {isLoading ? <div>Loading...</div> : null}\n {loanPools?.map((loanPool, index) => (\n <LoanCard\n className=\"mb-14\"\n key={index}\n loanPool={loanPool}\n isOwner={email === loanPool.owner.email}\n />\n ))}\n </section>\n </>\n )}\n <Pagination\n setCurrentPage={setCurrentPage}\n isPreviousData={isPreviousData}\n currentPage={currentPage}\n totalPages={data?.metaData?.totalPages}\n />\n </div>\n </div>\n )\n}\n\nexport default Marketplace\n","import Icon from '../Icon'\n\nconst Avatar = ({ email }) => {\n if (email in localStorage) {\n const image = JSON.parse(localStorage.getItem(email));\n if (image) {\n return (\n <div className=\"w-10 h-10 border rounded-full min-w-10 min-h-10\">\n <img src={image} />\n </div>\n ) \n }\n }\n\n return (\n <div className=\"inline-block p-3 bg-black border rounded-full\">\n <Icon className=\"w-3 h-3\" fill=\"white\" id=\"profile\" />\n </div>\n )\n}\n\nexport default Avatar\n","import { useEffect, useState } from 'react'\nimport dateFormat from 'dateformat'\nimport classNames from 'classnames'\nimport Avatar from '../ChatMessage/Avatar'\nimport { getImage } from '../../data/utils'\nimport Icon from '../Icon'\n\nconst ChatItem = ({ chat, selected, onClick }) => {\n const [imageLoaded, setImageLoaded] = useState(false)\n\n useEffect(() => {\n const retrieveAvatar = async () => {\n await getImage(chat)\n setImageLoaded(true)\n }\n retrieveAvatar()\n }, [chat])\n\n const handleClick = () => {\n onClick(chat)\n }\n\n return (\n <div\n className={classNames('flex items-center p-3 cursor-pointer', {\n 'bg-platinum': selected\n })}\n onClick={handleClick}\n >\n {imageLoaded ? (\n <Avatar email={chat.email} />\n ) : (\n <div className=\"inline-block p-3 bg-black border rounded-full\">\n <Icon className=\"w-3 h-3\" id=\"profile\" fill=\"white\" />\n </div>\n )}\n <div className=\"ml-2\">\n <strong className=\"block text-base\">{chat.displayName}</strong>\n <strong className=\"block text-base\">{chat.entity}</strong>\n <p className=\"text-md\">\n {chat.loanId} - {chat.title}\n </p>\n {chat.lastActivity && (\n <p className=\"text-md\">\n {dateFormat(chat.lastActivity, 'm/d/yy · h:MM TT')}\n </p>\n )}\n </div>\n </div>\n )\n}\n\nexport default ChatItem\n","import _ from 'lodash'\nimport { useEffect, useState } from 'react'\nimport { useHistory } from 'react-router-dom'\nimport { routes } from '../../router'\nimport { getMessages } from '../../data/conversations'\nimport Icon from '../Icon'\nimport ChatItem from '../ChatItem'\nimport { getCounterpartyFromSid } from '../../data/utils'\n\nconst ChatRoster = ({ conversations, loanPools, currentSid, source }) => {\n const { email } = JSON.parse(localStorage.getItem('user'))\n const history = useHistory()\n const [chats, setChats] = useState([])\n\n useEffect(() => {\n const initChats = async () => {\n const withUniqueSid = _.uniqBy(conversations, 'conversationSid')\n const threads = withUniqueSid.map(conversation => {\n const loan = loanPools.find(\n loanPool => loanPool.id === conversation.loanId\n ) || {}\n const profile = getCounterpartyFromSid(loan, email, conversation.conversationSid)\n return {\n conversationSid: conversation.conversationSid,\n loanId: conversation.loanId,\n displayName: profile?.displayName,\n entity: profile?.entity,\n email: profile?.email,\n title: loan?.title,\n image: profile?.image\n }\n })\n for (let i = 0; i < threads.length; i++) {\n const messages = await getMessages(threads[i].conversationSid)\n threads[i].lastActivity =\n messages.length > 0\n ? new Date(messages[messages.length - 1].date_created)\n : null\n }\n // Settlemend card removes loanpool from list of loanPools\n // map function breaks, so short circuit in find function solves it\n // but it sets the fields as undefined\n const unSettled = threads.filter(item => item.title !== undefined ) \n unSettled\n .sort((chatA, chatB) => {\n return chatA.lastActivity - chatB.lastActivity\n })\n .reverse()\n setChats(unSettled)\n }\n initChats()\n }, [conversations, loanPools])\n\n const handleClick = chat => {\n if (source === 'detail') {\n history.push(`${routes.detail}/${chat.loanId}`, chat)\n } else if (source === 'messages') {\n history.push(`${routes.messages}/${chat.loanId}`, chat)\n }\n }\n return (\n <div>\n <header className=\"flex items-center justify-between p-6 border-b border-platinum\">\n <h2 className=\"text-base font-bold\">Messages</h2>\n <button className=\"focus:outline-none\">\n <Icon className=\"w-5 h-5\" id=\"filter_chats\" />\n </button>\n </header>\n <section className=\"overflow-y-auto\">\n {chats.map(chat => (\n <ChatItem\n key={chat.conversationSid}\n chat={chat}\n selected={chat.conversationSid === currentSid}\n onClick={handleClick}\n />\n ))}\n </section>\n </div>\n )\n}\n\nexport default ChatRoster\n","export const eventType = {\n refetch: \"refetch\",\n};\n\nconst event = {\n list: new Map(),\n on(eventType, eventAction) {\n this.list.has(eventType) || this.list.set(eventType, []);\n if (this.list.get(eventType)) this.list.get(eventType).push(eventAction);\n return this;\n },\n\n emit(eventType, ...args) {\n this.list.get(eventType) &&\n this.list.get(eventType).forEach((cb) => {\n cb(...args);\n });\n }\n};\n\nexport default event;\n","import event from \"./eventBus\";\n\nexport const PanelPublisher = {\n message: (content) => {\n event.emit(\"refetch\", content);\n },\n clearAllMessage: () => {\n event.emit(\"clearAllMessage\");\n }\n};\n","import { useEffect, useState } from 'react'\nimport classNames from 'classnames'\nimport dateFormat from 'dateformat'\nimport { PanelPublisher } from '../../context/PanelPublisher'\nimport Avatar from './Avatar'\n\nconst ChatMessage = ({ message, className }) => {\n const [mediaUrl, setMediaUrl] = useState(null)\n\n useEffect(() => {\n if (message.media) {\n message.media.getContentTemporaryUrl().then(url => {\n setMediaUrl(url)\n })\n }\n })\n\n if (message.author.includes('admin')) {\n PanelPublisher.message(message.body)\n return (\n <p className=\"text-base font-bold text-center mt-9\">{message.body}</p>\n )\n }\n\n const messageContent = () => {\n if (message.media) {\n // In case of image\n if (message.media.contentType.includes('image')) {\n return (\n // If upload failed render an error message above the image\n <div>\n {message.codeStatus !== 200 && (\n <p className=\"text-error\">\n {/*Handle different kinds of errors. Defaults to a general \"fail\"*/}\n {message.codeStatus === 304\n ? 'This version of the file has been previously uploaded'\n : 'Fail to send message'}\n </p>\n )}\n {/*Image to be rendered, put some styles in case of error*/}\n <div\n className={classNames(\n { 'bg-black': message.codeStatus !== 200 },\n 'inline-block'\n )}\n >\n <img\n className={classNames(\n { 'opacity-50': message.codeStatus !== 200 },\n 'w-32'\n )}\n src={mediaUrl}\n alt={message.media.filename}\n />\n </div>\n </div>\n )\n }\n // if it's media but it's not an image, then assume it's a file\n return message.codeStatus === 200 ? (\n <a\n className=\"underline\"\n href={mediaUrl}\n download={message.media.filename}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {message.media.filename}\n </a>\n ) : (\n <div>\n <p className=\"text-error\">\n {message.codeStatus === 304\n ? 'This version of the file has been previously uploaded'\n : 'Fail to send message'}\n </p>\n <span className=\"underline cursor-default opacity-30\">\n {message.media.filename}\n </span>\n </div>\n )\n }\n // In case of plain text\n return <p className=\"mt-1 text-base\">{message.body}</p>\n }\n\n return (\n <div className={classNames('flex items-start', className)}>\n <Avatar email={message.author}/>\n <div className=\"ml-3\">\n <div className=\"flex\">\n <h3 className=\"text-base font-bold\">{message.author}</h3>\n <span className=\"ml-2 text-sm text-quickSilver\">\n {dateFormat(message.date, 'h:MM TT')}\n </span>\n </div>\n {messageContent()}\n </div>\n </div>\n )\n}\n\nexport default ChatMessage\n","import { useQuery } from 'react-query'\nimport { getAllDocNames } from '../../data/documents'\n\nconst useAllDocuments = id => {\n return useQuery(['alldocnames', parseInt(id)], () => getAllDocNames(id), {\n enabled: false\n })\n}\n\nexport default useAllDocuments\n","import { useEffect, useState, useRef } from 'react'\nimport { useForm } from 'react-hook-form'\nimport ClipLoader from 'react-spinners/ClipLoader'\nimport { uploadDoc } from '../../data/documents'\nimport dateFormat from 'dateformat'\nimport classNames from 'classnames'\nimport ChatMessage from '../ChatMessage'\nimport Icon from '../Icon'\nimport useAllDocuments from '../../../src/data/hooks/useAllDocuments'\n\nconst ChatBox = ({ thread, conversationSid, loanId, onLastActivity, dealroom }) => {\n const { email } = JSON.parse(localStorage.getItem('user'))\n const { register, reset, handleSubmit } = useForm()\n const chatBox = useRef()\n const inputFile = useRef()\n const [messages, setMessages] = useState([])\n const [conversation, setConversation] = useState(null)\n const [isLoading, setLoading] = useState(false)\n const [isFileSending, setFileSending] = useState(false)\n const { refetch } = useAllDocuments(loanId)\n\n const messageAdded = message => {\n if (onLastActivity) onLastActivity(conversationSid, message.dateCreated)\n\n setMessages(messages => [\n ...messages,\n {\n author: message.author,\n body: message.body,\n media: message.media,\n codeStatus: message.attributes.codeStatus,\n date: new Date(message.dateCreated)\n }\n ])\n\n if (chatBox.current) {\n chatBox.current.scrollTop = chatBox.current.scrollHeight\n }\n }\n\n useEffect(() => {\n if (conversation) {\n conversation.on('messageAdded', messageAdded)\n }\n\n return () => {\n if (conversation) {\n conversation.removeListener('messageAdded', messageAdded)\n }\n }\n // eslint-disable-next-line\n }, [conversation])\n\n\n useEffect(() => {\n const initConversation = async () => {\n setLoading(true)\n const messages = await thread.getMessages()\n setConversation(thread)\n setMessages(\n messages.items.map(message => {\n return {\n author: message.author,\n body: message.body,\n media: message.media,\n codeStatus: message.attributes.codeStatus,\n date: new Date(message.dateCreated)\n }\n })\n )\n if (chatBox.current) {\n chatBox.current.scrollTop = chatBox.current.scrollHeight\n }\n setLoading(false)\n }\n if (thread) initConversation()\n }, [thread])\n\n const handleSendMessageSubmit = ({ message }) => {\n conversation.sendMessage(message)\n reset()\n }\n\n const uploadFile = async (loanId, file) => {\n const formData = new FormData()\n formData.append('name', file.name.substr(0, file.name.indexOf('.')))\n formData.append('description', 'doc description')\n formData.append('filetype', file.type)\n formData.append('data', file)\n formData.append('accessType', file.accessType | 'ALL_ACCESS')\n const response = await uploadDoc(loanId, formData)\n refetch()\n return response\n }\n\n const handleFileChange = async () => {\n const file = inputFile.current.files[0]\n console.log('the file is->', file)\n if (!file) return\n const formData = new FormData()\n formData.append('file', file)\n let codeStatus\n try {\n setFileSending(true)\n const response = await uploadFile(loanId, file)\n console.log('successful response when uploading document', response)\n codeStatus = 200\n } catch (error) {\n console.log('error when uploading document', error)\n codeStatus = error.response.status\n console.log('codeStatus->', codeStatus)\n }\n conversation.sendMessage(formData, {\n codeStatus\n })\n setFileSending(false)\n }\n return (\n <div>\n <div\n className={`py-6 overflow-y-auto px-14 ${\n (dealroom && 'h-chatbox-dealroom') || 'h-chatbox'\n }`}\n ref={chatBox}\n >\n {isLoading\n ? 'Loading...'\n : messages\n ?.reduce((groupedMessages, message) => {\n let group = groupedMessages.find(group => {\n return !group || !message\n ? false\n : group.date.getYear() === message.date.getYear() &&\n group.date.getMonth() === message.date.getMonth() &&\n group.date.getDate() === message.date.getDate()\n })\n if (group) group.messages.push(message)\n else {\n group = { date: message.date, messages: [message] }\n groupedMessages.push(group)\n }\n return groupedMessages\n }, [])\n .map((group, index) => (\n <div key={`group-${index}`}>\n <p className=\"text-sm font-bold text-center mt-9 text-davys\">\n {dateFormat(group.date, 'mmmm d, yyyy')}\n </p>\n {group.messages.map((message, index) => (\n <ChatMessage\n key={`message-${index}`}\n className={`mt-9 ${message.author === email ? \"justify-end\" : \"\"}`}\n message={message}\n />\n ))}\n </div>\n ))}\n </div>\n <div className=\"pb-6 px-14\">\n <form\n id=\"upload-file\"\n className=\"relative flex items-center w-full\"\n onSubmit={handleSubmit(handleSendMessageSubmit)}\n >\n <input\n autoComplete=\"off\"\n className=\"inline-block w-full py-2 pl-5 pr-12 mr-2 border border-black rounded-full focus:outline-none text-md\"\n type=\"text\"\n placeholder=\"Type a message\"\n disabled={isLoading || !conversation}\n {...register('message')}\n />\n {isFileSending ? (\n <ClipLoader color=\"#44B757\" />\n ) : (\n <label\n htmlFor=\"file\"\n className={classNames(\n 'flex items-center p-2 text-white rounded cursor-pointer bg-pantone text-md',\n {\n 'pointer-events-none opacity-40': !conversation\n }\n )}\n >\n <Icon\n className=\"items-center w-5 h-5 mr-1 fill-current\"\n id=\"upload_document\"\n />\n Upload\n </label>\n )}\n <input\n id=\"file\"\n className=\"hidden\"\n type=\"file\"\n ref={inputFile}\n onChange={handleFileChange}\n />\n </form>\n </div>\n </div>\n )\n}\n\nexport default ChatBox\n","import Button from '../Button'\nconst ChatBoxHeader = ({ buyerDisplayName, loanPool, setModalUsersOpen }) => {\n return (\n <header\n className=\"flex items-center justify-between px-6 border-b border-platinum\"\n style={{ minHeight: 72.771 }}\n >\n <h2 className=\"text-base font-bold\">\n {buyerDisplayName || loanPool?.owner?.displayName}\n </h2>\n <div className=\"flex items-center\">\n <Button className=\"text-sm\" variant=\"rounded\" disabled ionClick={() => setModalUsersOpen(true)}>\n Add Users\n </Button>\n </div>\n </header>\n )\n}\n\nexport default ChatBoxHeader\n","export default __webpack_public_path__ + \"static/media/avatar-placeholder.157f088b.png\";","import { useEffect, useState } from 'react'\nimport { getUser } from '../../data/loanPools'\nimport classNames from 'classnames'\nimport api from '../../data/api'\nimport placeholder from '../../assets/images/avatar-placeholder.png'\n\nconst UserImage = ({ className, person }) => {\n const [src, setSrc] = useState(null)\n\n useEffect(() => {\n const retrieveUser = async () => {\n if (person.entity && person.email) {\n try {\n const user = await getUser(person.entity, person.email)\n if (user.image) {\n const data = await api().get(user.image, {\n responseType: 'blob'\n })\n const photo = URL.createObjectURL(data.data)\n setSrc(photo)\n }\n } catch (e) {\n console.log(e)\n }\n }\n }\n retrieveUser()\n }, [person])\n\n return (\n <img\n className={classNames('my-auto rounded-full h-168', className)}\n src={src ? src : placeholder}\n alt=\"\"\n width=\"100\"\n height=\"100\"\n ></img>\n )\n}\n\nexport default UserImage\n","import { BeatLoader } from 'react-spinners'\nimport Icon from '../Icon'\n\nconst ButtonAdd = ({ label, isLoading, disabled, onClick }) => {\n return (\n <div className=\"mx-auto text-center\">\n {isLoading ? (\n <BeatLoader size={7} color=\"black\" />\n ) : (\n <button disabled={isLoading || disabled} onClick={onClick}>\n <Icon\n className=\"w-5 h-5 mx-auto text-white fill-current\"\n id=\"add\"\n />\n <span className=\"text-sm\">{label}</span>\n </button>\n )}\n </div>\n )\n}\n\nexport default ButtonAdd\n","import toaster from 'react-hot-toast'\nimport UserImage from '../UserImage'\nimport ButtonAdd from './ButtonAdd'\nimport Button from '../Button'\nimport { useState } from 'react'\nimport { createConversation } from '../../data/conversations'\n\nconst UserChat = ({ person, participants, conversationSid, loanId, reload }) => {\n const [isLoading, setIsLoading] = useState(false)\n\n const handleOnClick = async () => {\n setIsLoading(true)\n try {\n const data = {\n loanId,\n email: person.email,\n entity: person.entity,\n conversationSid\n }\n // Add use to conversation\n await createConversation(data)\n setTimeout(() => {\n setIsLoading(false)\n reload()\n toaster.success('User added')\n }, [2000])\n } catch (e) {\n console.log('e: ', e);\n toaster.error('Something went wrong, please try again later')\n setIsLoading(false)\n }\n }\n\n return (\n <>\n <figure className=\"my-2 md:flex\">\n <UserImage className=\"w-16 rounded-full\" person={person} />\n <div className=\"px-6 py-4 text-center md:text-left space-y-2\">\n <blockquote>\n <Button className=\"text-lg font-semibold\" variant=\"link\">\n {person.displayName}\n </Button>\n <p className=\"text-sm capitalize\">{person.role}</p>\n </blockquote>\n </div>\n </figure>\n {!participants.includes(person.email) ? (\n <div className=\"w-28\">\n <ButtonAdd isLoading={isLoading} label=\"Add\" onClick={handleOnClick} />\n </div>\n ) : null}\n </>\n )\n}\n\nexport default UserChat\n","import { useEffect, useState } from 'react'\nimport ChatBox from './ChatBox'\nimport ChatBoxHeader from './ChatBoxHeader'\nimport Modal from 'react-modal'\nimport modalStyles from '../../assets/styles/modalStyles'\nimport { getBusiness } from '../../data/loanPools'\nimport UserChat from './UserChat'\n\nconst Chat = ({\n conversationSid,\n loanPool,\n buyerDisplayName,\n onLastActivity,\n dealroom,\n client,\n}) => {\n const { entity } = JSON.parse(localStorage.getItem('user'))\n const [isModalUsersOpen, setModalUsersOpen] = useState(false)\n const [team, setTeam] = useState(null)\n const [thread, setThread] = useState(null)\n const [participants, setParticipants] = useState(null)\n const [reload, setReload] = useState(false)\n\n useEffect(() => {\n const initThread = async () => {\n const res = await client.getConversationBySid(conversationSid)\n setThread(res)\n }\n if (conversationSid && client) initThread()\n }, [client, conversationSid])\n\n useEffect(() => {\n const retrieveParticipants = async () => {\n const res = await thread.getParticipants()\n setParticipants(res.map(p => p.state.identity))\n }\n if (thread) retrieveParticipants()\n }, [thread, reload])\n\n useEffect(() => {\n const retrieveBusiness = async () => {\n // setIsLoading(true)\n try {\n const res = await getBusiness(entity)\n setTeam(res?.team.sort((a, b) => (a.email > b.email ? 1 : -1)))\n // setIsLoading(false)\n } catch (error) {\n // setIsLoading(false)\n console.log(error)\n }\n }\n retrieveBusiness()\n }, [])\n\n const reloadParticipants = () => {\n setReload(!reload)\n }\n\n return (\n <div className=\"w-full border-l border-r border-platinum\">\n <ChatBoxHeader\n buyerDisplayName={buyerDisplayName}\n loanPool={loanPool}\n setModalUsersOpen={setModalUsersOpen}\n />\n <ChatBox\n thread={thread}\n conversationSid={conversationSid}\n loanId={loanPool?.id}\n onLastActivity={onLastActivity}\n dealroom={dealroom}\n />\n <Modal\n isOpen={isModalUsersOpen}\n onRequestClose={() => setModalUsersOpen(false)}\n style={modalStyles}\n >\n <h2 className=\"px-3 py-2 text-lg font-bold\">Add a user to this deal</h2>\n {team &&\n team.map((item, index) => (\n <div\n key={'select-' + index}\n className=\"flex items-center justify-between\"\n >\n <UserChat\n participants={participants}\n person={item}\n conversationSid={conversationSid}\n loanId={loanPool?.id}\n reload={reloadParticipants}\n />\n </div>\n ))}\n </Modal>\n </div>\n )\n}\n\nexport default Chat\n","import classNames from 'classnames'\n\nconst TextField = ({ className, type, innerRef, ...props }) => (\n <input\n className={classNames(\n 'p-2.5 border border-black rounded-md focus:outline-none text-md',\n className\n )}\n type={type || 'text'}\n autoComplete=\"off\"\n {...innerRef}\n {...props}\n />\n)\n\nexport default TextField\n","export default __webpack_public_path__ + \"static/media/Contract.86e5516f.svg\";","export default __webpack_public_path__ + \"static/media/Contract-1.403c4ef8.svg\";","export default __webpack_public_path__ + \"static/media/Contract-2.9c92690e.svg\";","import Modal from 'react-modal'\nimport contract from '../../assets/images/thumbnails/Contract.svg'\nimport contract1 from '../../assets/images/thumbnails/Contract-1.svg'\nimport contract2 from '../../assets/images/thumbnails/Contract-2.svg'\nimport modalStyles from '../../assets/styles/modalStyles'\n\nModal.setAppElement('#root')\n\nconst CongratsModal = ({ didPay, onClose }) => {\n return (\n <Modal isOpen={didPay} onRequestClose={onClose} style={modalStyles}>\n <h1 className=\"text-2xl font-bold text-eerie\">\n Congratulations on purchasing your new loan!\n </h1>\n <p className=\"mt-8 text-base text-davys\">\n <strong>\n Offical copies of all documents will be mailed to your business address\n on file within 5-7 business days\n </strong>\n </p>\n <hr className=\"my-8\" />\n <div className=\"flex mb-8\">\n <img src={contract} alt=\"Contract\"/>\n <img src={contract1} alt=\"Contract 1\"/>\n <img src={contract2} alt=\"Contract 2\"/>\n </div>\n </Modal>\n )\n}\n\nexport default CongratsModal\n","export default __webpack_public_path__ + \"static/media/wise_logo.6e76d202.svg\";","import { useState, useEffect } from 'react'\nimport { getAllDocNames } from '../../data/documents'\nimport { getThumbnail } from '../../data/documents'\nimport Carousel, { slidesToShowPlugin } from '@brainhubeu/react-carousel'\nimport '@brainhubeu/react-carousel/lib/style.css'\nimport TextField from '../TextField'\nimport Button from '../Button'\nimport CongratsModal from './CongratsModal'\nimport wiseLogo from '../../assets/images/wise_logo.svg'\n\nconst Payment = ({ loanId }) => {\n const [documents, setDocuments] = useState([])\n const [didPay, setPay] = useState(false)\n\n useEffect(() => {\n const retrieveDocs = async () => {\n const docsInfo = await getAllDocNames(loanId)\n docsInfo.forEach(async docInfo => {\n const thumbnail = await getThumbnail(loanId, docInfo.name)\n const blob = URL.createObjectURL(thumbnail)\n setDocuments(documents => [\n ...documents,\n {\n thumbnail: blob,\n filename: docInfo.originalFilename\n }\n ])\n })\n }\n retrieveDocs()\n }, [loanId])\n\n const handlePayClick = () => setPay(true)\n\n return (\n <div className=\"p-6 grid grid-cols-1 gap-6\">\n <div>\n <label className=\"inline-block mb-2 text-md\">\n Enter business entity name\n </label>\n <TextField className=\"w-full\" placeholder=\"Example\" />\n </div>\n <div>\n <label className=\"inline-block mb-2 text-md\">\n Enter bank routing number\n </label>\n <TextField className=\"w-full\" placeholder=\"Example\" />\n </div>\n <div>\n <label className=\"inline-block mb-2 text-md\">\n Re enter bank routing number\n </label>\n <TextField className=\"w-full\" placeholder=\"Example\" />\n </div>\n <div>\n <label className=\"inline-block mb-2 text-md\">\n Enter bank account number\n </label>\n <TextField className=\"w-full\" placeholder=\"Example\" />\n </div>\n <div>\n <label className=\"inline-block mb-2 text-md\">\n Re enter bank account number\n </label>\n <TextField className=\"w-full\" placeholder=\"Example\" />\n </div>\n <div>\n <p className=\"mb-6 font-semibold text-md\">Review Documents</p>\n <Carousel plugins={[\n {\n resolve: slidesToShowPlugin,\n options: {\n numberOfSlides: 2\n }\n }\n ]}>\n {documents.map((document, index) => (\n <div key={index}>\n <img src={document.thumbnail} alt={document.filename} />\n <span>{document.filename}</span>\n </div>\n ))}\n </Carousel>\n <Button\n className=\"flex items-center mx-auto mt-6 font-bold\"\n variant=\"contained\"\n onClick={handlePayClick}\n >\n Confirm payment with{' '}\n <img className=\"ml-2 -mt-px w-14\" src={wiseLogo} alt=\"Wise Logo\" />\n </Button>\n </div>\n <CongratsModal didPay={didPay} onClose={() => setPay(false)}/>\n </div>\n )\n}\n\nexport default Payment\n","import { useMutation } from 'react-query'\nimport { customizeDoc } from '../../data/documents'\n\nconst useRenderDocuments = () => {\n return useMutation(data => customizeDoc(data))\n}\n\nexport default useRenderDocuments\n","import _ from 'lodash'\nimport { useState, useEffect } from 'react'\nimport { updateDealRoom, getProposedBuyers } from '../../data/loanPools'\nimport Payment from '../Payment'\nimport Icon from '../Icon'\nimport LoanCard from '../LoanCard'\nimport Button from '../Button'\nimport useRenderDocuments from '../../data/hooks/useRenderDocuments'\nimport { getESign } from '../../data/documents'\nimport event from '../../context/eventBus'\nimport { useHistory } from 'react-router-dom'\nimport { routes } from '../../router'\nimport { getDocEsign } from '../../data/documents'\nimport { uploadDoc } from '../../data/documents'\nimport toaster from 'react-hot-toast'\nimport { cleanUrlParams } from '../../data/utils'\n\nconst ChatPanel = ({ loanPool, buyerEmail, setLoadingOverlay, currentSid }) => {\n const [isLoiSigned, setLoiSigned] = useState(false)\n const [showSatisfiedButtons, setShowSatisfiedButtons] = useState(false)\n const [counterSignButton, setCounterSignButton] = useState(false)\n const [isContractSigned, setContractSigned] = useState(false)\n const [isDealUpdated, setDealUpdated] = useState(false)\n const [eSign, setESign] = useState({ envelopeId: '', redirectUrl: '' })\n const [proposedBuyer, setProposedBuyer] = useState({})\n const { email, entity } = JSON.parse(localStorage.getItem('user'))\n const renderLOI = useRenderDocuments()\n const [refreshKey, setRefreshKey] = useState(0)\n const history = useHistory()\n const isOwner = loanPool?.owner?.email === email\n\n const docusignevent = new URLSearchParams(\n document.location.search.substring(1)\n ).get('event')\n\n const docusignEnvelopeId = new URLSearchParams(\n document.location.search.substring(1)\n ).get('envelopeId')\n\n useEffect(() => {\n if (loanPool) {\n getProposedBuyers(loanPool.id)\n .then(res => {\n\n // If I'm the loanPool owner, show counter sign only if other party already signed\n // buyerEmail it's needed to know which chat is in focus\n // proposedBuyers - exists only if anybody signed loi\n // buyer - exists only if a both parties signed\n //\n // I'm the owner (seller) of this loanpool?\n if (isOwner) {\n if (\n buyerEmail !== undefined &&\n res.buyer?.email !== undefined &&\n buyerEmail === res.buyer?.email\n ) {\n // Since buyer property exists, assume that both of us signed LOI\n setLoiSigned(true)\n setShowSatisfiedButtons(true)\n } else {\n // Maybe somebody signed LOI? show countersign option\n const result = res.proposedBuyers.find(\n item => item.email === buyerEmail\n )\n setLoiSigned(false)\n if (result && result.signature === 'loi signed') {\n setESign({\n envelopeId: result.docuSignId\n })\n setProposedBuyer(result)\n setCounterSignButton(true)\n } else {\n setProposedBuyer({})\n setCounterSignButton(false)\n }\n }\n // I'm a buyer\n } else {\n if (res.buyer?.email !== undefined && email === res.buyer?.email) {\n // Since buyer property exists, assume that both of us signed LOI\n setLoiSigned(true)\n setShowSatisfiedButtons(true)\n } else {\n // Is this loi already signed by me? (check if I'm in the proposedBuyers array)\n const result = res.proposedBuyers.find(\n item => item.email === email || item.entity === entity\n )\n if (result !== undefined && result?.signature === 'loi signed') {\n // Show documents option without buttons\n setLoiSigned(true)\n } else {\n setCounterSignButton(false)\n setLoiSigned(false)\n }\n }\n }\n })\n .catch(() => {\n // Revert everything to original state\n setCounterSignButton(false)\n setContractSigned(false)\n setLoiSigned(false)\n })\n }\n }, [loanPool, email, entity, buyerEmail, refreshKey, isDealUpdated])\n\n const getMessage = () => {\n\n setTimeout(() => {\n setRefreshKey(oldKey => oldKey + 1)\n }, 3000)\n }\n\n useEffect(() => {\n event.on(\n 'refetch',\n _.throttle(getMessage, 1000, { leading: true, trailing: false })\n )\n }, [])\n\n const handleInterested = () => {\n setLoadingOverlay(true)\n const loi = {\n loanId: loanPool.id,\n templateName: 'loi',\n seller: loanPool.owner.displayName,\n seller_org: loanPool.owner.entity,\n buyer: email,\n buyer_org: entity\n }\n\n renderLOI.mutate(loi, {\n onSuccess: async res => {\n const data = new FormData()\n\n data.append('file', res)\n data.append('buyerSign', email)\n data.append('currentSid', currentSid)\n data.append(\n 'signer',\n JSON.stringify({ email: email, name: entity, role: 'Buyer' })\n ),\n data.append(\n 'counterSigner',\n JSON.stringify({\n email: loanPool.owner.email,\n name: loanPool.owner.entity,\n role: 'Seller'\n })\n )\n data.append('dsReturnUrl', location.href)\n data.append('templateName', 'LOI')\n data.append('clickwrapName', 'Letter of Intent')\n try {\n const esignRes = await getESign(data)\n window.location.href = esignRes.redirectUrl\n } catch (e) {\n setLoadingOverlay(false)\n }\n },\n onError: () => {\n setLoadingOverlay(false)\n toaster.error('Something went wrong, please try again later')\n }\n })\n }\n\n useEffect(() => {\n // triggered when buyer or seller signs,\n // take different action depending on which (if seller this function\n // is equivalent to countersignagreed)\n const handleLoiSigned = (signStatus) => {\n // If I'm the owner I need to wait to first fetch the buyer before\n // trying to update the deal\n if (isOwner && Object.entries(proposedBuyer).length === 0) {\n return\n }\n\n let signature = ''\n if (signStatus === 'signing_complete' || signStatus === 'viewing_complete') {\n signature = 'loi signed'\n }\n if (signStatus === 'decline') {\n signature = 'loi rejected'\n }\n if (signStatus === 'cancel') {\n cleanUrlParams()\n return\n }\n\n const data = {\n loanId: loanPool.id,\n docType: 'loi',\n docuSignId: docusignEnvelopeId,\n buyer: isOwner\n ? {\n role: 'buyer',\n email: proposedBuyer.email,\n entity: proposedBuyer.entity,\n signature: signature\n }\n : {\n role: 'buyer',\n email,\n entity,\n signature: signature\n },\n seller: {\n role: 'seller',\n email: loanPool.owner.email,\n entity: loanPool.owner.entity,\n signature: isOwner ? signature : 'not started'\n }\n }\n updateDealRoom(data)\n .then(() => {\n if (isOwner) {\n // upload signed document to backend\n let filename = 'LOI_' + loanPool.id + '_Signed'\n getDocEsign(docusignEnvelopeId, filename).then(file => {\n const formData = new FormData()\n formData.append('name', filename)\n formData.append('description', 'Loi signed')\n formData.append('filetype', file.type)\n formData.append('data', file, filename + '.pdf')\n formData.append('accessType', file.accessType | 'ALL_ACCESS')\n uploadDoc(loanPool.id, formData).then(() => {\n // refetch in document history\n })\n })\n }\n setDealUpdated(true)\n cleanUrlParams()\n })\n .catch((e) => {\n console.log('updateDealRoom e:', e)\n // toaster.error(err.response.data.message)\n })\n }\n // wait for loanpool to be sent\n if (loanPool && docusignevent) handleLoiSigned(docusignevent)\n }, [loanPool, docusignevent, docusignEnvelopeId, proposedBuyer])\n\n const handleCounterSign = async () => {\n setLoadingOverlay(true)\n const data = new FormData()\n data.append('envelopeId', eSign.envelopeId)\n data.append('dsReturnUrl', location.href)\n data.append('templateName', 'LOI')\n data.append('buyerSign', buyerEmail)\n data.append('currentSid', currentSid)\n try {\n const esignRes = await getESign(data)\n console.log('esignRes: ', esignRes);\n window.location.href = esignRes.redirectUrl\n } catch (e) {\n console.log('counterSign e: ', e);\n setLoadingOverlay(false)\n }\n }\n\n return (\n <div>\n <div id=\"ds-terms-of-service\"></div>\n <header className=\"flex justify-between p-6 border-b border-platinum\">\n <h2 className=\"text-base font-bold\">\n {isContractSigned\n ? 'Enter payment information'\n : isLoiSigned\n ? 'Details'\n : 'Details'}\n </h2>\n <button className=\"focus:outline-none\">\n <Icon className=\"w-5 h-5\" id=\"filter_documents\" />\n </button>\n </header>\n {loanPool && !isLoiSigned && (\n <LoanCard\n className=\"border-none shadow-none\"\n loanPool={loanPool}\n footer={false}\n >\n {counterSignButton ? (\n <Button\n className=\"w-full\"\n variant=\"outlined\"\n onClick={handleCounterSign}\n isLoading={renderLOI.isLoading}\n >\n Sign LOI\n </Button>\n ) : isOwner || loanPool.status === 'pending' ? null : (\n <Button\n className=\"w-full\"\n variant=\"outlined\"\n onClick={handleInterested}\n isLoading={renderLOI.isLoading}\n >\n Interested in this loan?\n </Button>\n )}\n {loanPool.status === 'pending' ? (\n <p className=\"text-center text-pantone\">Pending</p>\n ) : null}\n </LoanCard>\n )}\n {isLoiSigned && !isContractSigned && (\n <LoanCard\n className=\"border-none shadow-none\"\n loanPool={loanPool}\n footer={false}\n >\n {showSatisfiedButtons ? (\n <Button\n className=\"w-full\"\n variant=\"outlined\"\n onClick={() => history.push(`${routes.dealroom}/${loanPool.id}`)}\n >\n Go to the Deal Room\n </Button>\n ) : (\n <p className=\"pt-2 text-center text-pantone\">\n Waiting for counterparty response\n </p>\n )}\n </LoanCard>\n )}\n {isContractSigned && <Payment loanId={loanPool.id} />}\n </div>\n )\n}\n\nexport default ChatPanel\n","import Modal from 'react-modal'\nimport Button from './Button'\n\nconst styles = {\n overlay: {\n backgroundColor: 'rgba(0, 0, 0, 0.7)',\n zIndex: 1000\n },\n content: {\n top: '50%',\n left: '50%',\n right: 'auto',\n bottom: 'auto',\n marginRight: '-50%',\n transform: 'translate(-50%, -50%)',\n borderRadius: 12\n }\n}\n\nconst ConfirmationModal = ({\n title,\n textOk,\n textCancel,\n showPrompt,\n handleOK,\n handleCancel\n}) => {\n return (\n <Modal\n style={styles}\n isOpen={showPrompt}\n onOk={handleOK}\n onCancel={handleCancel}\n >\n <div className=\"flex flex-col mx-20 mt-3 mb-4\">\n <div className=\"my-3 font-semibold\">\n {title\n .replace('\\\\n', '\\n')\n .split('\\n')\n .map((txt, key) => {\n return <div key={key}>{txt}</div>\n })}\n </div>\n <br />\n <div className=\"self-center\">\n <Button variant=\"success\" onClick={handleOK}>\n {textOk}\n </Button>\n </div>\n <br />\n <button onClick={handleCancel}>\n <span className=\"font-semibold\">{textCancel}</span>\n </button>\n </div>\n </Modal>\n )\n}\n\nexport default ConfirmationModal\n","import { useEffect, useState } from \"react\"\nimport ConversationsClient from '@twilio/conversations'\nimport { getToken } from '../../data/conversations'\n\nconst useTwilioClient = (email) => {\n const [client, setClient] = useState()\n\n useEffect(() => {\n const initClient = async () => {\n const { token } = await getToken(email)\n try {\n const res = await ConversationsClient.create(token)\n setClient(res)\n } catch (error) {\n console.log(error)\n console.log('error.toString: ', error.toString())\n }\n }\n initClient()\n }, [])\n\n return client \n}\n\nexport default useTwilioClient\n","import { useState, useEffect } from 'react'\nimport { useHistory } from 'react-router-dom'\nimport {\n createConversation,\n getConversationsByUser\n} from '../../data/conversations'\nimport { getLoanPools } from '../../data/loanPools'\nimport AppBar from '../../components/AppBar'\nimport ChatRoster from '../../components/ChatRoster'\nimport Chat from '../../components/Chat'\nimport ChatPanel from '../../components/ChatPanel'\nimport ConfirmationModal from '../../components/ConfirmationModal'\nimport LoadingOverlay from 'react-loading-overlay-ts'\nimport { initConversations } from '../../data/utils'\nimport useTwilioClient from '../../data/hooks/useTwilioClient'\n\nconst Messages = ({ match, location }) => {\n const { loanId } = match.params\n const [loanPools, setLoanPools] = useState([])\n const [conversations, setConversations] = useState([])\n const [currentSid, setCurrentSid] = useState('')\n const [buyer, setBuyer] = useState('')\n const [showErrorPrompt, setErrorPromptOpen] = useState(false)\n const history = useHistory()\n const [loadingOverlay, setLoadingOverlay] = useState(false)\n const { email } = JSON.parse(localStorage.getItem('user'))\n const client = useTwilioClient(email)\n\n const countersigner = new URLSearchParams(\n document.location.search.substring(1)\n ).get('buyerSign')\n\n const esignConvSid = new URLSearchParams(\n document.location.search.substring(1)\n ).get('currentSid')\n\n useEffect(() => {\n const retrieveConversations = async () => {\n const { loanPools } = await getLoanPools()\n setLoanPools(loanPools)\n const { email, entity } = JSON.parse(localStorage.getItem('user'))\n if (loanId) {\n const loanPool = loanPools?.find(\n loanPool => loanPool.id === parseInt(loanId)\n )\n if (!loanPool) {\n setErrorPromptOpen(true)\n return\n }\n initConversations(\n loanPool,\n email,\n entity,\n setBuyer,\n createConversation,\n setCurrentSid,\n location,\n countersigner,\n esignConvSid,\n )\n }\n const conversations = await getConversationsByUser(email)\n setConversations(conversations)\n }\n retrieveConversations()\n }, [loanId, location.state])\n\n const handleLastActivity = (conversationSid, lastActivity) => {\n setConversations(conversations =>\n conversations.map(conversation =>\n conversation.conversationSid === conversationSid\n ? { ...conversation, lastActivity: new Date(lastActivity) }\n : conversation\n )\n )\n }\n\n return (\n <div>\n <LoadingOverlay active={loadingOverlay} spinner>\n {/*<p>Buyer signature: {buyer?.email}</p>*/}\n <AppBar selectedIndex={2} />\n <div className=\"grid grid-cols-messages\">\n <ChatRoster\n conversations={conversations}\n loanPools={loanPools}\n currentSid={currentSid}\n source=\"messages\"\n setCurrentSid={setCurrentSid}\n />\n <Chat\n loanPool={loanPools?.find(\n loanPool => loanPool.id === parseInt(loanId)\n )}\n conversationSid={currentSid}\n buyerDisplayName={buyer?.displayName}\n onLastActivity={handleLastActivity}\n client={client}\n />\n <ChatPanel\n buyerEmail={buyer?.email}\n loanPool={loanPools?.find(\n loanPool => loanPool.id === parseInt(loanId)\n )}\n setLoadingOverlay={setLoadingOverlay}\n currentSid={currentSid}\n />\n </div>\n <ConfirmationModal\n title=\"Conversation doesn't exists\"\n textOk={'Ok'}\n showPrompt={showErrorPrompt}\n handleOK={() => history.push('/')}\n />\n </LoadingOverlay>\n </div>\n )\n}\n\nexport default Messages\n","import Button from '../../components/Button'\n\nconst StepButtons = ({\n // currentStep,\n // firstStep,\n // goToStep,\n // lastStep,\n nextStep,\n previousStep,\n totalSteps,\n step\n}) => (\n <div className=\"mt-10\">\n <hr className=\"mb-5\" />\n <div className=\"flex justify-between\">\n {step > 1 && (\n <Button onClick={previousStep}>Go back</Button>\n )}\n {step < totalSteps ? (\n <Button variant=\"success\" onClick={nextStep}>\n Continue\n </Button>\n ) : (\n <Button variant=\"success\" onClick={nextStep}>\n Upload\n </Button>\n )}\n </div>\n </div>\n)\n\nexport default StepButtons\n","import TextField from '../../components/TextField'\nimport StepButtons from './StepButtons'\nimport { useFormContext } from 'react-hook-form'\n\nconst Details = props => {\n const {\n register,\n handleSubmit,\n formState: { errors }\n } = useFormContext()\n\n const onSubmit = data => {\n Object.keys(data).map(key => props.update(key, data[key]))\n props.nextStep()\n }\n\n return (\n <div className=\"pt-10 mt-10\">\n <h3>Enter the details of your loan pool</h3>\n <br />\n <form>\n <div>\n {errors.title && (\n <div className=\"mb-1 text-sm text-red-600\">\n Please enter a user friendly name for your loan pool'\n </div>\n )}\n <TextField\n className=\"w-full\"\n placeholder=\"e.g. Loan Pool Name\"\n innerRef={register('title', {\n required: props.isActive\n })}\n />\n <p className=\"text-sm text-gray-400\">\n This is the name that appears on the offering sheet\n </p>\n <br />\n </div>\n <div>\n <label className=\"inline-block mt-2 mb-2 text-md\">\n Enter a description of the loan pool\n </label>\n {errors.description && (\n <div className=\"mb-1 text-sm text-red-600\">\n Please enter a description for your loan pool\n </div>\n )}\n <textarea\n className=\"w-full px-3 py-2 text-gray-700 border border-black rounded-lg focus:outline-none\"\n rows=\"4\"\n {...register('description', {\n required: props.isActive\n })}\n ></textarea>\n </div>\n </form>\n <StepButtons step={1} {...props} nextStep={handleSubmit(onSubmit)} />\n </div>\n )\n}\n\nexport default Details\n","import StepButtons from './StepButtons'\nimport { useFormContext } from 'react-hook-form'\n\nconst ListingType = props => {\n const {\n register,\n handleSubmit,\n formState: { errors }\n } = useFormContext({ defaultValues: { listType: 'For sale' } })\n\n const options = ['For Sale', 'Looking to Buy', 'For Participation']\n\n const onSubmit = data => {\n props.update('listType', data.listType)\n props.nextStep()\n }\n\n return (\n <div className=\"pt-10 mt-10 w-96\">\n <h3>Select the listing type</h3>\n <br />\n <form>\n {errors.listType && (\n <div className=\"mb-1 text-sm text-red-600\">\n Please select a listing type\n </div>\n )}\n {options.map(option => (\n <div key={option}>\n <input\n id={option}\n name=\"listType\"\n type=\"radio\"\n value={option}\n {...register('listType', {\n required: props.isActive,\n })}\n />{' '}\n <label htmlFor={option}>{option}</label>\n </div>\n ))}\n </form>\n <StepButtons step={2} {...props} nextStep={handleSubmit(onSubmit)} />\n </div>\n )\n}\n\nexport default ListingType\n","import StepButtons from './StepButtons'\nimport loanClasses from './loanClasses.json'\nimport { useFormContext } from 'react-hook-form'\n\nconst ProductClass = props => {\n const {\n register,\n handleSubmit,\n formState: { errors }\n } = useFormContext()\n\n const onSubmit = data => {\n props.update('loanType', data.loanType)\n props.nextStep()\n }\n\n return (\n <div className=\"pt-10 mt-10\">\n <h3>Select the loan pool class</h3>\n <br />\n {errors.loanType?.loanClass && (\n <div className=\"mb-1 text-sm text-red-600\">\n Please select a loan pool class\n </div>\n )}\n <form>\n {Object.keys(loanClasses).map(loan => (\n <div key={loan}>\n <input\n type=\"radio\"\n value={loan}\n name=\"loanClasses\"\n {...register('loanType.loanClass', {\n required: props.isActive,\n })}\n />{' '}\n <span>{loan}</span>\n </div>\n ))}\n </form>\n <StepButtons step={3} {...props} nextStep={handleSubmit(onSubmit)} />\n </div>\n )\n}\n\nexport default ProductClass\n","import StepButtons from './StepButtons'\nimport { useFormContext } from 'react-hook-form'\n\nconst Tags = props => {\n const { register, handleSubmit } = useFormContext()\n\n const options = [\n 'My Listing',\n 'Non-Performing',\n 'Non-QM',\n 'REO',\n 'Seasoned',\n 'Servicing Released',\n 'Servicing Retained',\n 'CRA Eligible',\n 'Non-Bank Originator',\n 'Non-Owner Occupied',\n 'Owner-Occupied',\n 'Re-Performing',\n 'Scratch & Dent'\n ]\n\n const onSubmit = data => {\n console.log(data)\n props.update('productTags', data.productTags || [])\n props.nextStep()\n }\n\n return (\n <div className=\"pt-10 mt-10\">\n <h3>Add product tags</h3>\n <br />\n <form>\n {options.map((option) => (\n <div key={option}>\n <input\n type=\"checkbox\"\n value={option}\n {...register('productTags')}\n />{' '}\n <span>{option}</span>\n </div>\n ))}\n </form>\n <StepButtons step={5} {...props} nextStep={handleSubmit(onSubmit)} />\n </div>\n )\n}\n\nexport default Tags\n","const SelectRegion = ({ options, onChange }) => {\n return (\n <div>\n <div className=\"relative inline-block w-full mt-2 text-gray-700\">\n <select\n className=\"w-full h-10 pl-3 pr-6 text-base placeholder-gray-600 border rounded-lg appearance-none focus:shadow-outline\"\n placeholder=\"Regular input\"\n onChange={onChange}\n >\n {options.map(option => (\n <option key={option}>{option}</option>\n ))}\n </select>\n <div className=\"absolute inset-y-0 right-0 flex items-center px-2 pointer-events-none\">\n <svg className=\"w-4 h-4 fill-current\" viewBox=\"0 0 20 20\">\n <path\n d=\"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z\"\n clipRule=\"evenodd\"\n fillRule=\"evenodd\"\n ></path>\n </svg>\n </div>\n </div>\n </div>\n )\n}\n\nexport default SelectRegion\n","import states from '../../components//Mapchart/states.json'\n\nconst Compensation = ({ stateInfo, onPercentageChange }) => (\n <li className=\"flex items-center justify-between mb-3\">\n <label className=\"inline-block px-4 py-2 mr-3 text-white rounded bg-pantone\">\n {states[stateInfo.state].name}\n </label>\n <div className=\"relative\">\n <input\n type=\"number\"\n min=\"0\"\n max=\"100\"\n step=\"1\"\n name={stateInfo.state}\n className=\"w-32 py-2 pr-6 text-right border rounded-md border-quickSilver focus:outline-none text-onyx\"\n onChange={onPercentageChange}\n value={stateInfo.percentLoan}\n />\n <span className=\"absolute right-2 top-1/2 transform -translate-y-1/2\">\n %\n </span>\n </div>\n </li>\n)\n\nexport default Compensation\n","import { useState, useEffect } from 'react'\nimport StepButtons from './StepButtons'\nimport Mapchart from '../../components/Mapchart'\nimport SelectRegion from './SelectRegion'\nimport Compensation from '../../components/Compensation'\n\nconst StateCompensation = props => {\n const options = [\n 'All states',\n 'Northeast',\n 'Southeast',\n 'Midwest',\n 'Southwest',\n 'West'\n ]\n const statesInfoData = [\n { state: 'CT', percentLoan: 0, region: 'Northeast' },\n { state: 'MA', percentLoan: 0, region: 'Northeast' },\n { state: 'ME', percentLoan: 0, region: 'Northeast' },\n { state: 'NH', percentLoan: 0, region: 'Northeast' },\n { state: 'NJ', percentLoan: 0, region: 'Northeast' },\n { state: 'NY', percentLoan: 0, region: 'Northeast' },\n { state: 'PR', percentLoan: 0, region: 'Northeast' },\n { state: 'RI', percentLoan: 0, region: 'Northeast' },\n { state: 'VI', percentLoan: 0, region: 'Northeast' },\n { state: 'VT', percentLoan: 0, region: 'Northeast' },\n { state: 'AL', percentLoan: 0, region: 'Southeast' },\n { state: 'DC', percentLoan: 0, region: 'Southeast' },\n { state: 'DE', percentLoan: 0, region: 'Southeast' },\n { state: 'FL', percentLoan: 0, region: 'Southeast' },\n { state: 'GA', percentLoan: 0, region: 'Southeast' },\n { state: 'KY', percentLoan: 0, region: 'Southeast' },\n { state: 'MD', percentLoan: 0, region: 'Southeast' },\n { state: 'MS', percentLoan: 0, region: 'Southeast' },\n { state: 'NC', percentLoan: 0, region: 'Southeast' },\n { state: 'PA', percentLoan: 0, region: 'Southeast' },\n { state: 'SC', percentLoan: 0, region: 'Southeast' },\n { state: 'TN', percentLoan: 0, region: 'Southeast' },\n { state: 'VA', percentLoan: 0, region: 'Southeast' },\n { state: 'WV', percentLoan: 0, region: 'Southeast' },\n { state: 'IL', percentLoan: 0, region: 'Midwest' },\n { state: 'IN', percentLoan: 0, region: 'Midwest' },\n { state: 'IA', percentLoan: 0, region: 'Midwest' },\n { state: 'KS', percentLoan: 0, region: 'Midwest' },\n { state: 'MI', percentLoan: 0, region: 'Midwest' },\n { state: 'MN', percentLoan: 0, region: 'Midwest' },\n { state: 'MO', percentLoan: 0, region: 'Midwest' },\n { state: 'NE', percentLoan: 0, region: 'Midwest' },\n { state: 'OH', percentLoan: 0, region: 'Midwest' },\n { state: 'WI', percentLoan: 0, region: 'Midwest' },\n { state: 'AR', percentLoan: 0, region: 'Southwest' },\n { state: 'LA', percentLoan: 0, region: 'Southwest' },\n { state: 'NM', percentLoan: 0, region: 'Southwest' },\n { state: 'OK', percentLoan: 0, region: 'Southwest' },\n { state: 'TX', percentLoan: 0, region: 'Southwest' },\n { state: 'AK', percentLoan: 0, region: 'West' },\n { state: 'AS', percentLoan: 0, region: 'West' },\n { state: 'AZ', percentLoan: 0, region: 'West' },\n { state: 'CA', percentLoan: 0, region: 'West' },\n { state: 'CO', percentLoan: 0, region: 'West' },\n { state: 'MP', percentLoan: 0, region: 'West' },\n { state: 'GU', percentLoan: 0, region: 'West' },\n { state: 'HI', percentLoan: 0, region: 'West' },\n { state: 'ID', percentLoan: 0, region: 'West' },\n { state: 'MT', percentLoan: 0, region: 'West' },\n { state: 'NV', percentLoan: 0, region: 'West' },\n { state: 'ND', percentLoan: 0, region: 'West' },\n { state: 'OR', percentLoan: 0, region: 'West' },\n { state: 'SD', percentLoan: 0, region: 'West' },\n { state: 'UT', percentLoan: 0, region: 'West' },\n { state: 'WA', percentLoan: 0, region: 'West' },\n { state: 'WY', percentLoan: 0, region: 'West' }\n ]\n\n const [region, setRegion] = useState(options[0])\n const [statesInfo, setStatesInfo] = useState(statesInfoData)\n\n const handleRegionChange = event => {\n setStatesInfo(statesInfoData)\n setRegion(event.target.value)\n }\n\n const handlePercentChange = event => {\n // Never let the input go into empty state\n if (event.target.value === '') event.target.value = 0\n const max = 100\n let total\n let delta\n let percentResult\n\n const value = parseInt(event.target.value)\n\n try {\n // Filter the states for the current region except the one that is being modified\n let regionStates = statesInfo.filter(\n stateInfo =>\n !stateInfo.state.includes(event.target.name) &&\n (stateInfo.region.includes(region) || region.includes('All states'))\n )\n // Get the sum of percentages for the states of the current region\n total = regionStates\n .map(stateInfo => stateInfo.percentLoan)\n .reduce((prev, next) => prev + next)\n delta = max - total\n percentResult = value < delta ? value : delta\n } catch(e) {\n total = statesInfo\n .map(stateInfo => parseInt(stateInfo.percentLoan))\n .reduce((prev, next) => prev + next)\n delta = max - total + value\n percentResult = value < delta ? value : delta - 1\n }\n // If the sum for all the other states and the current state is greater\n // than 100 put the maximum possible value (difference)\n setStatesInfo(statesInfo =>\n statesInfo.map(stateInfo =>\n stateInfo.state.includes(event.target.name)\n ? {\n ...stateInfo,\n percentLoan:\n percentResult\n }\n : stateInfo\n )\n )\n }\n\n useEffect(() => {\n // Filter by non zero percentage\n props.update(\n 'statesInfo',\n statesInfo.filter(obj => obj.percentLoan !== 0)\n )\n // eslint-disable-next-line\n }, [statesInfo])\n\n const statesFilter = data => {\n try {\n return data.filter(\n stateInfo =>\n stateInfo.region.includes(region) || region.includes('All states')\n )\n } catch (e) {\n return data\n }\n }\n\n useEffect(() => {\n if (props.initialData) {\n console.log('initialData', props.initialData)\n setStatesInfo(props.initialData)\n }\n }, [props.initialData])\n\n return (\n <div className=\"pt-10 mt-10\">\n <h3>Select state composition percentage</h3>\n <br />\n <p className=\"text-sm text-gray-400\">Select a region</p>\n <SelectRegion options={options} onChange={handleRegionChange} />\n <Mapchart\n statesInfo={statesFilter(statesInfo)}\n />\n <ul>\n {statesFilter(statesInfo)\n .sort((a, b) => {\n const textA = a.state.toUpperCase()\n const textB = b.state.toUpperCase()\n return textA < textB ? -1 : textA > textB ? 1 : 0\n })\n .map(stateInfo => (\n <Compensation\n key={stateInfo.state}\n stateInfo={stateInfo}\n onPercentageChange={handlePercentChange}\n />\n ))}\n </ul>\n <StepButtons step={6} {...props} />\n </div>\n )\n}\n\nexport default StateCompensation\n","import TextField from '../../components/TextField'\nimport StepButtons from './StepButtons'\nimport { Controller, useFormContext } from 'react-hook-form'\nimport NumberFormat from 'react-number-format'\nimport ReactTooltip from 'react-tooltip'\nimport Icon from '../../components/Icon'\n\nconst waCreditScore = {\n title: 'WA Credit Score',\n tooltip: 'This is the WA Credit Score',\n name: 'loanType.waCreditScore'\n}\n\nconst waDebtToIncome = {\n title: 'WA Debt To Income',\n tooltip: 'This is the WA debt to income',\n name: \"loanType.waDebtToIncome\"\n}\n\nconst waLTV = {\n title: 'WA Loan To Value',\n tooltip: 'This is the WA Loan to value',\n name: \"loanType.waLTV\"\n}\n\nconst waCLTV = {\n title: 'WA Combined Loan To Value',\n tooltip: 'This is the WA combined loan to value',\n name: \"loanType.waCLTV\"\n}\n\nconst classDependentFields = {\n Consumer: [waCreditScore],\n 'Commercial & Industrial': [waDebtToIncome, waLTV, waCLTV],\n Residential: [waCreditScore, waLTV, waCLTV],\n 'Commercial Real Estate': [waDebtToIncome, waLTV, waCLTV],\n Other: [waDebtToIncome, waCreditScore]\n}\n\nconst LabelTooltip = ({ label, tip }) => (\n <div className=\"flex items-center mb-2\">\n <ReactTooltip />\n <label className=\"inline-block mr-1 text-md whitespace-nowrap\">{label}</label>\n <Icon id=\"question\" className=\"w-3 h-3\" data-tip={tip} />\n </div>\n)\n\nconst NumericalDetails = props => {\n const {\n control,\n handleSubmit,\n formState: { errors }\n } = useFormContext()\n\n const loanClass = props.form.loanType?.loanClass\n\n const onSubmit = data => {\n console.log('Data', data)\n props.update('generalInfo', data.generalInfo)\n props.update('loanTerm', data.loanTerm)\n props.update('loanType', data.loanType)\n props.nextStep()\n }\n\n // console.log(formState)\n // console.log(classDependentFields)\n\n return (\n <div className=\"pt-10 mt-10\">\n <h3>Enter numerical details of the loan</h3>\n <br />\n <form className=\"grid grid-cols-2 gap-4\">\n <div className=\"col-span-1\">\n <LabelTooltip\n label=\"Current Balance\"\n tip=\"This is the current balance\"\n />\n {errors.generalInfo?.currentBalance && (\n <div className=\"mb-1 text-sm text-red-600\">\n {errors.generalInfo?.currentBalance?.message}\n </div>\n )}\n <Controller\n render={({ field: { onChange, value } }) => {\n return (\n <NumberFormat\n value={value}\n className=\"w-full mb-2\"\n placeholder=\"#\"\n thousandSeparator={true}\n prefix={'$'}\n control={control}\n fixedDecimalScale={true}\n allowEmptyFormatting={false}\n allowNegative={false}\n customInput={TextField}\n onValueChange={c => {\n onChange(c.value)\n }}\n />\n )\n }}\n name=\"generalInfo.currentBalance\"\n control={control}\n />\n <LabelTooltip label=\"WA Balance\" tip=\"This is the WA balance\" />\n {errors.generalInfo?.waBalance && (\n <div className=\"mb-1 text-sm text-red-600\">\n {errors.generalInfo?.waBalance?.message}\n </div>\n )}\n <Controller\n render={({ field: { onChange, value } }) => {\n return (\n <NumberFormat\n value={value}\n className=\"w-full mb-2\"\n placeholder=\"#\"\n thousandSeparator={true}\n prefix={'$'}\n control={control}\n fixedDecimalScale={true}\n allowEmptyFormatting={false}\n allowNegative={false}\n customInput={TextField}\n onValueChange={c => {\n onChange(c.value)\n }}\n />\n )\n }}\n name=\"generalInfo.waBalance\"\n control={control}\n />\n <LabelTooltip label=\"Loan Count\" tip=\"This is the loan count\" />\n {errors.generalInfo?.count && (\n <div className=\"mb-1 text-sm text-red-600\">\n {errors.generalInfo?.count?.message}\n </div>\n )}\n <Controller\n render={({ field: { onChange, value } }) => {\n return (\n <NumberFormat\n value={value}\n className=\"w-full mb-2\"\n placeholder=\"#\"\n thousandSeparator={true}\n control={control}\n fixedDecimalScale={true}\n allowEmptyFormatting={false}\n allowNegative={false}\n customInput={TextField}\n onValueChange={c => {\n onChange(c.value)\n }}\n />\n )\n }}\n name=\"generalInfo.count\"\n control={control}\n />\n <LabelTooltip\n label=\"WA Remaining Term\"\n tip=\"This is the WA remaining term\"\n />\n {errors.loanTerm?.waRemainingTerm && (\n <div className=\"mb-1 text-sm text-red-600\">\n {errors.loanTerm?.waRemainingTerm?.message}\n </div>\n )}\n <Controller\n render={({ field: { onChange, value } }) => {\n return (\n <NumberFormat\n value={value}\n className=\"w-full mb-2\"\n placeholder=\"#\"\n control={control}\n allowEmptyFormatting={false}\n allowNegative={false}\n customInput={TextField}\n onValueChange={c => {\n onChange(c.value)\n }}\n />\n )\n }}\n name=\"loanTerm.waRemainingTerm\"\n control={control}\n />\n </div>\n <div className=\"col-span-1\">\n <LabelTooltip\n label=\"Original Balance\"\n tip=\"This is the original balance\"\n />\n {errors.generalInfo?.originalBalance && (\n <div className=\"mb-1 text-sm text-red-600\">\n {errors.generalInfo?.originalBalance?.message}\n </div>\n )}\n <Controller\n render={({ field: { onChange, value } }) => {\n return (\n <NumberFormat\n value={value}\n className=\"w-full mb-2\"\n placeholder=\"#\"\n thousandSeparator={true}\n prefix={'$'}\n control={control}\n fixedDecimalScale={true}\n allowEmptyFormatting={false}\n allowNegative={false}\n customInput={TextField}\n onValueChange={c => {\n onChange(c.value)\n }}\n />\n )\n }}\n name=\"generalInfo.originalBalance\"\n control={control}\n />\n <LabelTooltip label=\"Price\" tip=\"This is the price\" />\n <Controller\n render={({ field: { onChange, value } }) => {\n return (\n <NumberFormat\n value={value}\n className=\"w-full mb-2\"\n placeholder=\"Par Value\"\n thousandSeparator={true}\n control={control}\n fixedDecimalScale={true}\n allowEmptyFormatting={false}\n allowNegative={false}\n customInput={TextField}\n onValueChange={c => {\n onChange(c.value)\n }}\n />\n )\n }}\n name=\"generalInfo.price\"\n control={control}\n />\n <LabelTooltip label=\"Gross WAC\" tip=\"This is the gross WAC\" />\n {errors.generalInfo?.grossWAC && (\n <div className=\"mb-1 text-sm text-red-600\">\n {errors.generalInfo?.grossWAC?.message}\n </div>\n )}\n <Controller\n render={({ field: { onChange, value } }) => {\n return (\n <NumberFormat\n value={value}\n className=\"w-full mb-2\"\n placeholder=\"%\"\n control={control}\n allowEmptyFormatting={false}\n allowNegative={false}\n fixedDecimalScale={true}\n decimalScale={2}\n maxLength={6}\n allowLeadingZeros={true}\n customInput={TextField}\n onValueChange={c => {\n onChange(c.value)\n }}\n />\n )\n }}\n name=\"generalInfo.grossWAC\"\n control={control}\n rules={{\n min: {\n value: 0.01,\n message: 'Only values greater than 0.01 allowed'\n },\n max: { value: 100, message: 'Max value not greater than 100' }\n }}\n />\n <LabelTooltip label=\"Servicing Fee\" tip=\"This is the servicing fee\" />\n {errors.generalInfo?.serviceFee && (\n <div className=\"mb-1 text-sm text-red-600\">\n {errors.generalInfo?.serviceFee?.message}\n </div>\n )}\n <Controller\n render={({ field: { onChange, value } }) => {\n return (\n <NumberFormat\n value={value}\n className=\"w-full mb-2\"\n placeholder=\"bps\"\n control={control}\n allowEmptyFormatting={false}\n allowNegative={false}\n decimalScale={0}\n maxLength={3}\n customInput={TextField}\n onValueChange={c => {\n onChange(c.value)\n }}\n />\n )\n }}\n name=\"generalInfo.serviceFee\"\n control={control}\n rules={{\n min: {\n value: 0,\n message: 'Greater or equal than zero values allowed'\n },\n max: { value: 200, message: 'Max value not greater than 200' }\n }}\n />\n </div>\n {/* Class related input fields */}\n {loanClass && classDependentFields[loanClass].map((field,index) => (\n <div key={`field.name-${index}`}>\n <LabelTooltip\n label={field.title}\n tip={field.tooltip}\n />\n <Controller\n render={({ field: { onChange, value } }) => {\n return (\n <NumberFormat\n value={value}\n className=\"w-full mb-2\"\n placeholder=\"#\"\n control={control}\n allowEmptyFormatting={false}\n allowNegative={false}\n customInput={TextField}\n onValueChange={c => {\n onChange(c.value)\n }}\n />\n )\n }}\n name={field.name}\n control={control}\n />\n </div>\n ))}\n <div>\n <LabelTooltip\n label=\"Seller Retained\"\n tip=\"This is the seller retained\"\n />\n {errors.generalInfo?.sellerRetainedPercent && (\n <div className=\"mb-1 text-sm text-red-600\">\n {errors.generalInfo?.sellerRetainedPercent?.message}\n </div>\n )}\n <Controller\n render={({ field: { onChange, value } }) => {\n return (\n <NumberFormat\n className=\"w-full mb-2\"\n placeholder=\"%\"\n control={control}\n allowEmptyFormatting={true}\n allowNegative={false}\n decimalScale={0}\n customInput={TextField}\n value={value === undefined || value === '' ? '0' : value}\n onValueChange={c => {\n onChange(c.value)\n }}\n />\n )\n }}\n name=\"generalInfo.sellerRetainedPercent\"\n control={control}\n rules={{\n min: { value: 0, message: 'Only non zero values allowed' },\n max: { value: 100, message: 'Max value not greater than 100' }\n }}\n defaultValue={'0'}\n />\n </div>\n </form>\n <StepButtons step={7} {...props} nextStep={handleSubmit(onSubmit)} />\n </div>\n )\n}\n\nexport default NumericalDetails\n","import { useDropzone } from 'react-dropzone'\nimport Icon from '../../components/Icon'\n\nconst UploadDropZone = ({ children, text, id, onDrop, accept }) => {\n const { getRootProps, getInputProps } = useDropzone({\n onDrop,\n noClick: true,\n noKeyboard: true,\n accept\n })\n\n return (\n <section className=\"p-4 border rounded-md border-quickSilver\">\n <div\n {...getRootProps({\n className:\n 'h-72 border-2 border-quickSilver rounded-md border-dashed flex flex-col items-center justify-center'\n })}\n >\n <input id={id} {...getInputProps()} />\n <label\n htmlFor={id}\n style={{ backgroundColor: '#59a8ab'}}\n className=\"px-6 py-5 text-white rounded-lg cursor-pointer\"\n >\n <Icon style={{ color: '#59a8ab'}} className=\"inline-block w-4 h-4 mr-2 fill-current\" id=\"upload\" />\n {text}\n </label>\n <span className=\"mt-2 text-quickSilver text-md\">or drag them in</span>\n </div>\n <aside className=\"pt-2\">\n <h2>PDF Files Only</h2>\n </aside>\n {children}\n </section>\n )\n}\n\nexport default UploadDropZone\n","export default __webpack_public_path__ + \"static/media/HELOC_pool.63eeec4c.pdf\";","import { useState, useCallback } from 'react'\nimport StepButtons from './StepButtons'\nimport UploadDropZone from '../../components/UploadDropZone'\nimport heloc_pool from '../../assets/HELOC_pool.pdf'\n\nconst UploadBrochure = props => {\n const [files, setFiles] = useState([])\n\n const onDrop = useCallback(\n acceptedFiles => {\n console.log(acceptedFiles)\n if (acceptedFiles.length > 0) {\n setFiles(acceptedFiles)\n props.update('brochure', acceptedFiles)\n }\n },\n [props]\n )\n\n return (\n <div className=\"pt-10 mt-10\">\n <h3 className=\"text-xl font-bold\">Upload brochure (optional)</h3>\n <p className=\"inline-block my-2 font-bold text-md text-onyx\">\n Upload sales sheet of the assets within the loan pool.\n </p>\n <p className=\"inline-block mb-2 font-bold text-md text-onyx\">\n This will be downloadable in the marketplace\n </p>\n <UploadDropZone\n id=\"documents\"\n text=\"Upload Brochure\"\n onDrop={onDrop}\n accept=\".pdf\"\n >\n <ul className=\"flex flex-wrap\">\n {files.map(file => (\n <li key={file.path}>{file.path}</li>\n ))}\n </ul>\n </UploadDropZone>\n <p className=\"inline-block mt-4 text-md\">\n Download a sample brochure{' '}\n <a\n className=\"underline\"\n href={heloc_pool}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n here\n </a>\n </p>\n <StepButtons step={8} {...props} />\n </div>\n )\n}\n\nexport default UploadBrochure\n","import LoanCard from '../../components/LoanCard'\nimport StepButtons from './StepButtons'\n\nconst Submit = props => {\n const isUploading = props.isUploading\n const isSuccess = props.isSuccess\n const isErrorUpload = props.isErrorUpload\n const isErrorBrochure = props.ErrorBrochure\n const loanpool = props.loanpool\n\n return (\n <div className=\"pt-10 mt-10\">\n <h3>Review loan pool</h3>\n <br />\n <label className=\"inline-block mb-2 text-md\">\n Double check that all information is entered correctly before loan pool\n is entered into the marketplace.\n </label>\n <br />\n <LoanCard loanPool={loanpool} footer={false} />\n {isSuccess ? (\n <div className=\"mt-10 text-center text-pantone\">\n Uploaded successfully\n </div>\n ) : null}\n {isErrorBrochure ? (\n <div className=\"my-3 text-sm text-center text-red-600\">\n Error uploading brochure, please try again later\n </div>\n ) : null}\n {isErrorUpload ? (\n <div className=\"my-3 text-sm text-center text-red-600\">\n Something went wrong, please try again later\n </div>\n ) : null}\n {isUploading ? (\n <div className=\"my-10 text-center animate-pulse\">Uploading...</div>\n ) : isSuccess ? null : (\n <StepButtons step={9} {...props} nextStep={props.submit} />\n )}\n </div>\n )\n}\n\nexport default Submit\n","import StepButtons from './StepButtons'\nimport loanClasses from './loanClasses.json'\nimport { useFormContext } from 'react-hook-form'\n\nconst ProductType = props => {\n const {\n register,\n handleSubmit,\n formState: { errors }\n } = useFormContext()\n const loanType = props.form.loanType?.loanClass\n\n const onSubmit = data => {\n props.update('loanType', data.loanType )\n props.nextStep()\n }\n\n return (\n <div className=\"pt-10 mt-10\">\n <h3>Select the loan pool type</h3>\n <br />\n {errors.loanType?.type && (\n <div className=\"mb-1 text-sm text-red-600\">\n Please select a loan pool type\n </div>\n )}\n <form>\n {loanType &&\n loanClasses[loanType].map((item, index) => (\n <div key={item.id + '-' + index}>\n <input\n type=\"radio\"\n value={item.name}\n name=\"loanTypes\"\n {...register('loanType.type', {\n required: props.isActive,\n })}\n />{' '}\n <span>{item.name}</span>\n </div>\n ))}\n </form>\n <StepButtons step={4} {...props} nextStep={handleSubmit(onSubmit)} />\n </div>\n )\n}\n\nexport default ProductType\n","const ProgressBar = props => {\n return (\n <div className=\"absolute left-1/2 transform -translate-x-1/2 -translate-y-1/2 mt-3 w-screen overflow-hidden\">\n <div className=\"overflow-hidden h-2 mb-4 text-xs flex bg-gray-200\">\n <div\n style={{ width: `${(100 / props.totalSteps) * props.currentStep}%` }}\n className=\"shadow-none flex flex-col text-center whitespace-nowrap text-white rounded-md justify-center bg-pantone\"\n ></div>\n </div>\n </div>\n )\n}\n\nexport default ProgressBar\n","import React, { useCallback, useEffect, useState } from 'react'\nimport { useHistory } from 'react-router'\nimport ConfirmationModal from './ConfirmationModal'\n\nexport function RouterPrompt(props) {\n const { when, onOK, onCancel, title, textOk, textCancel } = props\n\n const history = useHistory()\n\n const [showPrompt, setShowPrompt] = useState(false)\n const [currentPath, setCurrentPath] = useState('')\n\n useEffect(() => {\n if (when) {\n history.block(prompt => {\n setCurrentPath(prompt.pathname)\n setShowPrompt(true)\n return 'true'\n })\n } else {\n history.block(() => {})\n }\n\n return () => {\n history.block(() => {})\n }\n }, [history, when])\n\n const handleOK = useCallback(async () => {\n if (onOK) {\n const canRoute = await Promise.resolve(onOK())\n if (canRoute) {\n history.block(() => {})\n history.push(currentPath)\n }\n }\n }, [currentPath, history, onOK])\n\n const handleCancel = useCallback(async () => {\n if (onCancel) {\n const canRoute = await Promise.resolve(onCancel())\n if (canRoute) {\n history.block(() => {})\n history.push(currentPath)\n }\n }\n setShowPrompt(false)\n }, [currentPath, history, onCancel])\n\n return showPrompt ? (\n <ConfirmationModal\n title={title}\n textOk={textOk}\n textCancel={textCancel}\n showPrompt={showPrompt}\n handleOK={handleOK}\n handleCancel={handleCancel}\n />\n ) : null\n}\n","import { useState, useEffect } from 'react'\nimport AppBar from '../../components/AppBar'\nimport StepWizard from 'react-step-wizard'\nimport Details from './Details'\nimport ListingType from './ListingType'\nimport ProductClass from './ProductClass'\nimport Tags from './Tags'\nimport StateCompensation from './StateCompensation'\nimport NumericalDetails from './NumericalDetails'\nimport UploadBrochure from './UploadBrochure'\nimport Submit from './Submit'\nimport ProductType from './ProductType'\nimport ProgressBar from './ProgressBar'\nimport { RouterPrompt } from '../../components/RouterPrompt'\nimport { useForm, FormProvider } from 'react-hook-form'\nimport { updateLoanPool } from '../../data/loanPools'\nimport { uploadDoc } from '../../data/documents'\nimport toaster from 'react-hot-toast';\n\nconst Upload = ({ location }) => {\n const methods = useForm({ defaultValues: { productTags: [] } })\n const formState = methods.formState\n const trigger = methods.trigger\n const { email, entity } = JSON.parse(localStorage.getItem('user'))\n const [showSubmitPrompt, setSubmitPrompt] = useState(false)\n const [showLeavePrompt, setLeavePrompt] = useState(false)\n const [currentStep, setCurrentStep] = useState()\n const [mapData, setMapData] = useState(null)\n\n // From submit component\n const [isUploading, setIsUploading] = useState(false)\n const [isSuccess, setIsSuccess] = useState(false)\n const [isErrorUpload, setIsErrorUpload] = useState(false)\n const [isErrorBrochure, setIsErrorBrochure] = useState(false)\n\n const [state, updateState] = useState({\n form: {\n conversationSid: null,\n owner: { email, entity, displayName: email },\n brochure: null\n }\n })\n\n const updateForm = (key, value) => {\n const { form } = state\n\n form[key] = value\n updateState({\n ...state,\n form\n })\n }\n\n const onStepChange = stats => {\n setCurrentStep(stats.activeStep)\n if (stats.activeStep > 4) {\n // Trigger validation manually for all screens\n trigger()\n }\n\n if (\n (stats.previousStep === 6 && stats.activeStep === 5) ||\n (stats.previousStep === 6 && stats.activeStep === 7)\n ) {\n window.scrollTo({\n top: 0,\n behavior: 'smooth'\n })\n }\n }\n\n useEffect(() => {\n // Load loanpool from history.push state\n if (location.state) {\n console.log('Location state', location.state)\n methods.reset(location.state)\n setMapData(location.state.statesInfo)\n }\n }, [location.state])\n\n useEffect(() => {\n window.addEventListener('beforeunload', alertUser)\n // logic after leaving the page\n // window.addEventListener('unload', afterLeavePage)\n return () => {\n window.removeEventListener('beforeunload', alertUser)\n // logic after leaving the page\n // window.removeEventListener('unload', afterLeavePage)\n // handleEndConcert()\n }\n }, [])\n\n const alertUser = e => {\n e.preventDefault()\n e.returnValue = ''\n }\n\n // const afterLeavePage = async () => {\n // await fetcher({\n // url: endConcert(concert.id),\n // method: 'PUT'\n // })\n // }\n const handleSubmitOk = () => {\n // console.log('Ok')\n submit()\n return true\n }\n\n const handleSubmitCancel = () => {\n // console.log('Cancel')\n return true\n }\n\n const handleLeaveOk = () => {\n // console.log('Leave Ok')\n return true\n }\n\n const handleLeaveCancel = () => {\n // console.log('Leave Cancel')\n return false\n }\n\n const submit = async () => {\n const loanpool = state.form\n\n if (currentStep === 9) {\n loanpool.status = 'not started'\n }\n\n setIsUploading(true)\n setIsErrorUpload(false)\n setIsErrorBrochure(false)\n updateLoanPool(loanpool)\n .then(loanRes => {\n if (loanpool.brochure) {\n const file = loanpool.brochure[0]\n const formData = new FormData()\n formData.append('name', file.name.substr(0, file.name.indexOf('.')))\n formData.append('description', 'brochure')\n formData.append('filetype', file.type)\n formData.append('data', file)\n formData.append('accessType', file.accessType | 'ALL_ACCESS')\n uploadDoc(loanRes.id, formData)\n .then(res => {\n console.log('Successful upload', res)\n setIsErrorBrochure(false)\n })\n .catch(e => {\n console.log('Error uploading brochure', e)\n setIsErrorBrochure(true)\n })\n }\n setTimeout(() => {\n setIsSuccess(true)\n setIsUploading(false)\n setIsErrorUpload(false)\n setSubmitPrompt(false)\n toaster.success('Loan pool saved')\n }, 3000)\n })\n .catch(e => {\n console.log(e)\n toaster.error('Something went wrong')\n setIsUploading(false)\n setIsErrorUpload(true)\n })\n }\n\n useEffect(() => {\n if (currentStep > 4 && formState.isValid) {\n setSubmitPrompt(true)\n setLeavePrompt(false)\n } else {\n setSubmitPrompt(false)\n setLeavePrompt(true)\n }\n // Disable prompts after successfull loan upload\n if (isSuccess) {\n setSubmitPrompt(false)\n setLeavePrompt(false)\n }\n }, [formState])\n\n return (\n <div>\n <AppBar />\n {showSubmitPrompt ? (\n <>\n <RouterPrompt\n title=\"Do you want to save your loan pool\\n and come back to it later?\"\n textOk=\"Save loan pool\"\n textCancel=\"Delete\"\n when={showSubmitPrompt}\n onOK={handleSubmitOk}\n onCancel={handleSubmitCancel}\n />\n </>\n ) : null}\n {showLeavePrompt ? (\n <>\n <RouterPrompt\n title=\"Discard your changes?\"\n textOk=\"Accept\"\n textCancel=\"Cancel\"\n when={showLeavePrompt}\n onOK={handleLeaveOk}\n onCancel={handleLeaveCancel}\n />\n </>\n ) : null}\n <div className=\"container relative mx-auto\">\n <div className=\"md:flex md:justify-center mb-7\">\n <FormProvider {...methods}>\n <StepWizard\n className=\"min-w-wizard max-w-wizard\"\n onStepChange={onStepChange}\n nav={<ProgressBar />}\n >\n <Details update={updateForm} />\n <ListingType update={updateForm} />\n <ProductClass update={updateForm} />\n <ProductType update={updateForm} form={state.form} />\n <Tags update={updateForm} />\n <StateCompensation update={updateForm} initialData={mapData} />\n <NumericalDetails update={updateForm} form={state.form}/>\n <UploadBrochure update={updateForm} />\n <Submit\n isUploading={isUploading}\n isSuccess={isSuccess}\n isErrorUpload={isErrorUpload}\n isErrorBrochure={isErrorBrochure}\n loanpool={state.form}\n submit={submit}\n />\n </StepWizard>\n </FormProvider>\n </div>\n </div>\n </div>\n )\n}\n\nexport default Upload\n","export default __webpack_public_path__ + \"static/media/three-dots.47158f33.svg\";","import _ from 'lodash'\nimport dots from '../../assets/three-dots.svg'\n\nconst DocumentItem = ({\n doc,\n index,\n handleSelectDoc,\n handleVersion\n}) => {\n return (\n <div className=\"flex-shrink-0 mx-2 my-3\" key={index}>\n <img\n className=\"w-32 h-32 shadow cursor-pointer rounded-md\"\n onClick={() => handleSelectDoc(index)}\n src={doc.thumbnail}\n alt={doc.filename}\n />\n <div className=\"flex justify-between mt-2\">\n <div className=\"pt-1 text-sm font-bold whitespace-nowrap\">\n {_.truncate(doc.filename, { length: 16 })}\n </div>\n <div>\n <img\n className=\"w-6 cursor-pointer\"\n onClick={() => handleVersion(index)}\n src={dots}\n alt=\"dots\"\n />\n </div>\n </div>\n </div>\n )\n}\n\nexport default DocumentItem\n","import classNames from 'classnames'\n\nconst classes = {\n button: 'p-2 text-xs bg-white border rounded-full',\n disabled: 'opacity-50 cursor-default'\n}\n\nconst ButtonSmall = ({\n label,\n isLoading,\n loadingLabel,\n onClick,\n disabled,\n}) => {\n return (\n <>\n <button\n disabled={isLoading || disabled}\n onClick={onClick}\n className={classNames(\n {[classes['disabled']]: disabled},\n classes['button']\n )}\n >\n {isLoading ? (\n <span className=\"text-pantone animate-pulse\">{loadingLabel}</span>\n ) : (\n <span>{label}</span>\n )}\n </button>\n </>\n )\n}\n\nexport default ButtonSmall\n","import _ from 'lodash'\nimport { useState } from 'react'\nimport api from '../../data/api'\nimport toaster from 'react-hot-toast'\nimport { restoreDoc } from '../../data/documents'\nimport ButtonSmall from './ButtonSmall'\nimport useAllDocuments from '../../data/hooks/useAllDocuments'\n\nconst VersionItem = ({\n name,\n date,\n link,\n filename,\n version,\n loanId,\n currentVersion,\n source,\n reviewContract,\n setModalContractOpen,\n contractSigned,\n showButtonsReviewContract\n}) => {\n const [isDownloading, setIsDownloading] = useState(false)\n const [isRestoring, setIsRestoring] = useState(false)\n const uploadDate = new Date(date).toLocaleString()\n const { refetch } = useAllDocuments(loanId)\n\n const handleDownload = async () => {\n setIsDownloading(true)\n try {\n // Current version for first item in the list\n const file = await api().get(link, {\n responseType: 'blob',\n responseEncoding: 'binary'\n })\n\n const doc = await URL.createObjectURL(file.data)\n const a = document.createElement('a')\n a.href = doc\n a.download = name\n setTimeout(() => {\n a.click()\n URL.revokeObjectURL(doc)\n setIsDownloading(false)\n }, 3000)\n } catch (e) {\n setIsDownloading(false)\n console.log(e)\n toaster.error('Unable to get file')\n }\n }\n\n // /loanpool/pool/:id/restoreDoc --> with\n // { \"docName\": \"string\", \"version\": \"string\" }\n // version is the desired version\n const handleRestore = () => {\n setIsRestoring(true)\n const data = {\n docName: filename,\n version: version\n }\n restoreDoc(loanId, data)\n .then(res => {\n console.log(res)\n setTimeout(() => {\n setIsRestoring(false)\n toaster.success('Document restored!')\n refetch()\n }, 2000)\n })\n .catch(err => {\n console.log(err)\n setTimeout(() => {\n setIsRestoring(false)\n toaster.error(err.response.data.message || err.response.data.error)\n }, 2000)\n })\n }\n\n return (\n <>\n <li className=\"px-6 pt-4 overflow-hidden bg-gray-100 border border-gray-300 rounded-lg\">\n <p className=\"text-xl font-bold\">{_.truncate(name, { length: 25 })}</p>\n <p className=\"text-sm\">{uploadDate}</p>\n {!currentVersion ? <p className=\"text-sm\">Version: {version}</p> : null}\n <div className=\"flex justify-between pt-2 my-2\">\n {currentVersion ? (\n <>\n <ButtonSmall label={`Current version: ${currentVersion}`} />\n <ButtonSmall\n label=\"Download\"\n onClick={handleDownload}\n isLoading={isDownloading}\n loadingLabel=\"Downloading\"\n />\n {source === 'contract' ? (\n <>\n <ButtonSmall\n disabled={contractSigned || !showButtonsReviewContract}\n label={contractSigned ? 'Signed' : 'Sign'}\n onClick={reviewContract}\n />\n <ButtonSmall\n label=\"View All\"\n onClick={() => setModalContractOpen(true)}\n />\n </>\n ) : null}\n </>\n ) : (\n <>\n <ButtonSmall\n label=\"Restore\"\n onClick={handleRestore}\n isLoading={isRestoring}\n loadingLabel=\"Restoring\"\n />\n <ButtonSmall\n label=\"Download\"\n onClick={handleDownload}\n isLoading={isDownloading}\n loadingLabel=\"Downloading\"\n />\n <button className=\"p-2 text-xs bg-white border rounded-full\">\n Audit log\n </button>\n </>\n )}\n </div>\n </li>\n </>\n )\n}\n\nexport default VersionItem\n","const VersionContainer = ({ title, filename, children }) => {\n return (\n <div className=\"w-400\">\n <div className=\"px-2 py-4 mb-3 bg-white border-b border-gray-200 sm:px-2\">\n <h3 className=\"font-medium font-bold text-gray-900 leading-6\">\n {filename}\n </h3>\n <p className=\"pt-1 text-sm text-gray-600\">{title}</p>\n </div>\n <ul className=\"px-3 pb-4 overflow-y-auto space-y-3 h-screen/2\">\n {children}\n </ul>\n </div>\n )\n}\n\nexport default VersionContainer\n","import VersionItem from './VersionItem'\nimport VersionContainer from './VersionContainer'\n\nconst DocumentVersion = props => {\n const versions = props.doc?.links.versionedDocs.slice(0).reverse()\n const latest = versions[0]\n const doc = props.doc\n const filename = props.doc?.filename\n\n return (\n <VersionContainer title=\"Version History\" filename={filename}>\n <VersionItem\n name={doc?.filename}\n date={doc?.created}\n filename={doc?.name}\n loanId={doc?.poolId}\n link={latest?.link}\n currentVersion={doc?.currentVersion}\n />\n {versions.length > 1 &&\n versions.map((item, index) => (\n <VersionItem\n key={index}\n date={item.uploadDate}\n name={item.link.split('/').pop()}\n link={item.link}\n filename={doc?.name}\n version={item.version}\n loanId={doc?.poolId}\n />\n ))}\n </VersionContainer>\n )\n}\n\nexport default DocumentVersion\n","import Modal from 'react-modal'\nimport dateFormat from 'dateformat'\nimport classNames from 'classnames'\nimport _ from 'lodash'\nimport { useEffect, useState } from 'react'\nimport Button from '../Button'\nimport { getDocthumbnail } from '../../data/documents'\nimport useAllDocuments from '../../../src/data/hooks/useAllDocuments'\nimport api from '../../data/api'\nimport DocumentItem from './DocumentItem'\nimport DocumentVersion from '../DocumentVersion'\nimport modalStyles from '../../assets/styles/modalStyles'\nimport toaster from 'react-hot-toast'\n\nconst DocumentHistory = ({ loanId, carousel = false }) => {\n const [documents, setDocuments] = useState([])\n const [selectedDoc, setSelectedDoc] = useState(null)\n const [isModalOpen, setModalOpen] = useState(false)\n const [selectedVersion, setSelectedVersion] = useState(null)\n const [isModalVersionOpen, setModalVersionOpen] = useState(false)\n const [isLoadingInfo, setIsLoadingInfo] = useState(false)\n const { isLoading, isSuccess, data, refetch, error } = useAllDocuments(loanId)\n\n useEffect(() => {\n setDocuments([])\n if (isSuccess) {\n setIsLoadingInfo(true)\n const docsInfo = data\n docsInfo.forEach(async docInfo => {\n const links = await getDocthumbnail(loanId, docInfo.name)\n // Show latest version\n const file = await api().get(links.versionedDocs[0].link, {\n responseType: 'blob',\n responseEncoding: 'binary'\n })\n const thumbnail = await api().get(links.thumbnail, {\n responseType: 'blob'\n })\n const blob = URL.createObjectURL(thumbnail.data)\n setDocuments(documents => [\n ...documents,\n {\n ...docInfo,\n file: file.data,\n thumbnail: blob,\n filename: docInfo.originalFilename,\n links\n }\n ])\n })\n setIsLoadingInfo(false)\n }\n }, [loanId, data, isSuccess])\n\n useEffect(() => {\n // Documents service\n if (error) {\n if (error.response?.status === 403) {\n toaster.error(error.response.data.message)\n }\n }\n }, [error])\n\n const handleSelectDoc = index => {\n const selected = documents[index]\n const doc = URL.createObjectURL(documents[index].file)\n\n if (\n selected.file.type.match('image.*') ||\n selected.file.type === 'application/pdf'\n ) {\n setSelectedDoc(doc)\n setModalOpen(true)\n } else {\n const a = document.createElement('a')\n a.href = doc\n a.download = selected.filename || 'download'\n a.click()\n URL.revokeObjectURL(doc)\n }\n }\n\n const handleCloseModal = () => {\n setModalOpen(false)\n };\n\n const handleVersion = index => {\n const version = documents[index]\n setSelectedVersion(version)\n setModalVersionOpen(true)\n }\n\n useEffect(() => {\n refetch()\n }, [refetch])\n\n return (\n <div className={classNames('p-8 h-64 border-t border-r')}>\n <div className=\"flex items-center justify-between\">\n <h2\n className={classNames(\n 'font-bold',\n { 'text-md text-pantone pt-2': !carousel },\n { 'text-xl': carousel }\n )}\n >\n Document History\n </h2>\n <div className=\"flex items-center\">\n <Button className=\"text-right underline\" variant=\"link\">\n View all\n </Button>\n </div>\n </div>\n {isLoading || isLoadingInfo ? <p>Loading documents...</p> : null}\n\n {carousel ? (\n <div className=\"flex w-auto overflow-x-auto\">\n {documents &&\n documents.map((document, index) => (\n <DocumentItem\n key={`document-${index}`}\n loanId={loanId}\n doc={document}\n index={index}\n handleSelectDoc={handleSelectDoc}\n handleVersion={handleVersion}\n />\n ))}\n </div>\n ) : (\n <table className=\"w-full mt-8 table-fixed\">\n <thead>\n <tr className=\"pb-3 border-b border-platinum\">\n <th className=\"w-3/5 pb-3 text-xs font-bold text-left uppercase text-onyx\">\n Document\n </th>\n <th className=\"w-2/5 pb-3 text-xs font-bold text-center uppercase text-onyx\">\n Date\n </th>\n </tr>\n </thead>\n <tbody className=\"h-32\">\n {documents.map((doc, index) => {\n const dobj = Date.parse(doc.created)\n return (\n <tr\n key={`document-${index}`}\n className=\"border-b border-platinum\"\n >\n <td className=\"py-6 mr-5 text-sm font-bold whitespace-nowrap\">\n <Button\n variant=\"link\"\n onClick={() => handleSelectDoc(index)}\n >\n {_.truncate(doc.originalFilename, { length: 18 })}\n </Button>\n </td>\n <td className=\"py-6 text-sm\">\n {dateFormat(dobj, 'mmmm d, yyyy h:MM:ss TT')}\n </td>\n </tr>\n )\n })}\n </tbody>\n </table>\n )}\n\n <Modal\n isOpen={isModalOpen}\n onRequestClose={() => setModalOpen(false)}\n style={modalStyles}\n >\n <button\n className=\"uk-button uk-button-danger uk-button-small\"\n onClick={handleCloseModal}\n >\n Close\n </button>\n <iframe\n title=\"selectedDoc\"\n src={selectedDoc}\n width=\"900px\"\n height=\"500px\"\n ></iframe>\n </Modal>\n <Modal\n isOpen={isModalVersionOpen}\n onRequestClose={() => setModalVersionOpen(false)}\n style={modalStyles}\n >\n <DocumentVersion doc={selectedVersion} />\n </Modal>\n </div>\n )\n}\n\nexport default DocumentHistory\n","import { useEffect, useState } from 'react'\nimport { createConversation } from '../../data/conversations'\nimport { getLoanPoolById } from '../../data/loanPools'\nimport AppBar from '../../components/AppBar'\nimport Chat from '../../components/Chat'\nimport ChatPanel from '../../components/ChatPanel'\nimport DocumentHistory from '../../components/DocumentHistory'\nimport ChatRoster from '../../components/ChatRoster'\nimport LoadingOverlay from 'react-loading-overlay-ts'\nimport { initConversations } from '../../data/utils'\nimport useTwilioClient from '../../data/hooks/useTwilioClient'\n\nconst LoanDetail = ({ match, location }) => {\n const { loanId } = match.params\n const [loanPool, setLoanPool] = useState(null)\n const [currentSid, setCurrentSid] = useState('')\n const [buyer, setBuyer] = useState('')\n const { email, entity } = JSON.parse(localStorage.getItem('user'))\n const [loadingOverlay, setLoadingOverlay] = useState(false)\n const client = useTwilioClient(email)\n\n const countersigner = new URLSearchParams(\n document.location.search.substring(1)\n ).get('buyerSign')\n\n const esignConvSid = new URLSearchParams(\n document.location.search.substring(1)\n ).get('currentSid')\n\n useEffect(() => {\n const retrieveLoanPool = async () => {\n const loanPool = await getLoanPoolById(loanId)\n setLoanPool(loanPool)\n }\n retrieveLoanPool()\n }, [loanId])\n\n useEffect(() => {\n if (loanPool)\n initConversations(\n loanPool,\n email,\n entity,\n setBuyer,\n createConversation,\n setCurrentSid,\n location,\n countersigner,\n esignConvSid,\n )\n }, [loanPool, location.state])\n\n return (\n <div>\n <LoadingOverlay active={loadingOverlay} spinner>\n {/*<p>Buyer signature: {buyer?.email}</p>*/}\n <AppBar />\n <div className=\"min-h-messages grid grid-cols-messages\">\n <div className=\"flex flex-col justify-between\">\n <ChatRoster\n conversations={\n loanPool?.conversations ? loanPool.conversations : []\n }\n loanPools={[loanPool]}\n currentSid={currentSid}\n source=\"detail\"\n />\n <DocumentHistory loanId={loanId} />\n </div>\n <Chat\n loanPool={loanPool}\n conversationSid={currentSid}\n buyerDisplayName={buyer?.displayName}\n client={client}\n />\n <ChatPanel\n loanPool={loanPool}\n buyerEmail={buyer?.email}\n setLoadingOverlay={setLoadingOverlay}\n currentSid={currentSid}\n />\n </div>\n </LoadingOverlay>\n </div>\n )\n}\n\nexport default LoanDetail\n","import { Redirect, Route } from 'react-router-dom'\nimport { routes } from '../../router'\n\nconst PrivateRoute = ({ component: Component, ...props }) => {\n const isUserLoggedIn = localStorage.getItem('user')\n\n return (\n <Route\n {...props}\n render={renderProps =>\n isUserLoggedIn ? (\n <Component {...renderProps} />\n ) : (\n <Redirect to={routes.login} />\n )\n }\n />\n )\n}\n\nexport default PrivateRoute\n","import Button from '../../components/Button'\n\nconst SectionModal = ({ title, onCancel, onSave, children, isLoading, disableSave = false }) => {\n return (\n <div className=\"text-center\">\n <h4 className=\"text-xl font-bold text-pantone\">{title}</h4>\n <div className=\"my-6 border-b\"></div>\n <div className=\"my-6\">{children}</div>\n <div className=\"my-6 border-b\"></div>\n <div className=\"flex h-12 space-x-4\">\n <Button variant=\"outlined\" className=\"flex-1\" onClick={onCancel} >Cancel</Button>\n <Button variant=\"contained\" className=\"flex-1\" onClick={onSave} isLoading={isLoading} disabled={disableSave}>Save</Button>\n </div>\n </div>\n )\n}\n\nexport default SectionModal\n","import { useState } from 'react'\nimport toaster from 'react-hot-toast'\nimport TextField from '../../components/TextField'\nimport SectionModal from '../Settings/SectionModal'\nimport { useForm } from 'react-hook-form'\nimport { updateBusiness } from '../../data/loanPools'\n\nconst EditFinancial = ({ entity, data, onCancel, reload }) => {\n const [isLoading, setIsLoading] = useState(false)\n const {\n register,\n handleSubmit,\n formState: { isDirty },\n reset\n } = useForm({\n defaultValues: {\n name: entity,\n }\n })\n\n const onSave = async data => {\n setIsLoading(true)\n try {\n await updateBusiness(data)\n setTimeout(() => {\n setIsLoading(false)\n // set to isDirty to false\n reset(data)\n reload()\n toaster.success('Saved')\n }, 2000)\n } catch (e) {\n setIsLoading(false)\n if (e.response.data.message) {\n toaster.error(e.response.data.message)\n } else {\n toaster.error('Something went wrong, please try again later')\n }\n console.log(e)\n // set isSubmitSuccessful to false :)\n throw e\n }\n }\n\n return (\n <SectionModal\n isLoading={isLoading}\n onCancel={onCancel}\n onSave={handleSubmit(onSave)}\n title=\"Financial Highlights\"\n disableSave={!isDirty}\n >\n <div style={{ minWidth: 470 }} className=\"p-3 text-left space-y-5\">\n <div className=\"grid grid-cols-2 gap-4\">\n {data &&\n Object.keys(data).map((item, index) => (\n <div key={index} className=\"col-span-1\">\n <div className=\"px-1\">\n <h5 className=\"mb-3 font-bold\">{data[item].title}</h5>\n <TextField\n type=\"number\"\n defaultValue={data[item].value}\n innerRef={register(data[item].name)} />\n </div>\n </div>\n ))}\n </div>\n </div>\n </SectionModal>\n )\n}\n\nexport default EditFinancial\n","import { BeatLoader } from 'react-spinners'\nimport Icon from '../Icon'\n\nconst EditIcon = ({ isLoading=false, setOpen }) => {\n return (\n <>\n {isLoading ? (\n <BeatLoader\n size={5}\n color={'black'}\n />\n ) : (\n <Icon\n id=\"edit\"\n className=\"w-4 h-4 cursor-pointer\"\n onClick={() => setOpen(true)}\n />\n )}\n </>\n )\n}\n\nexport default EditIcon\n","import numeral from 'numeral'\nimport { useState } from 'react'\nimport Modal from 'react-modal'\nimport modalStyles from '../../assets/styles/modalStyles'\nimport EditFinancial from './EditFinancial'\nimport EditIcon from '../../components/Button/EditIcon'\n\nconst FinancialHighlights = ({ business, reload, isLoading }) => {\n const [isEditOpen, setEditOpen] = useState(false)\n\n const highlights = [\n {\n title: 'Assets',\n text: numeral(business?.financials?.assets).format('$0,0'),\n value: business?.financials?.assets,\n name: 'financials.assets'\n },\n {\n title: 'Shares/Total Deposits',\n text: numeral(business?.financials?.totalDeposits).format('$0,0'),\n value: business?.financials?.totalDeposits,\n name: 'financials.totalDeposits'\n },\n {\n title: 'Loans',\n text: numeral(business?.financials?.loans).format('$0,0'),\n value: business?.financials?.loans,\n name: 'financials.loans'\n },\n {\n title: '# of Members',\n text: numeral(business?.financials?.members).format('0,0'),\n value: business?.financials?.members,\n name: 'financials.members'\n },\n {\n title: 'Share Growth',\n // text: numeral(business?.financials?.shareGrowth).format('0.00%'),\n text: business?.financials?.shareGrowth ? business?.financials?.shareGrowth + '%' : '0%',\n value: business?.financials?.shareGrowth,\n name: 'financials.shareGrowth'\n },\n {\n title: 'Loan Growth',\n text: business?.financials?.loanGrowth ? business?.financials?.loanGrowth + '%' : '0%',\n value: business?.financials?.loanGrowth,\n name: 'financials.loanGrowth'\n },\n {\n title: 'Net Worth Ratio',\n text: business?.financials?.netWorthRatio ? business?.financials?.netWorthRatio + '%' : '0%',\n value: business?.financials?.netWorthRatio,\n name: 'financials.netWorthRatio'\n },\n {\n title: 'Loan-to-Share',\n text: business?.financials?.loanToShare ? business?.financials?.loanToShare + '%' : '0%',\n value: business?.financials?.loanToShare,\n name: 'financials.loanToShare'\n }\n ]\n return (\n <div>\n <Modal\n isOpen={isEditOpen}\n style={modalStyles}\n onRequestClose={() => setEditOpen(false)}\n >\n <EditFinancial\n entity={business?.name}\n data={highlights}\n onCancel={() => setEditOpen(false)}\n reload={reload}\n />\n </Modal>\n <div className=\"flex justify-between\">\n <h2 className=\"mb-4 text-lg font-bold\">Financial Highlights</h2>\n <EditIcon isLoading={isLoading} setOpen={() => setEditOpen(true)} />\n </div>\n <div className=\"flex flex-wrap text-sm\">\n {highlights.map((highlight, index) => (\n <div\n key={highlight.title + index}\n style={{ width: 175 }}\n className=\"flex flex-col justify-between px-5 py-3 mb-3 mr-3 border border-gray-300 rounded-md\"\n >\n <h1 className=\"mb-2 font-bold\">{highlight.title}</h1>\n <p className=\"font-bold text-pantone\">{highlight.text}</p>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nexport default FinancialHighlights\n","// import { routes } from '../../router'\n// import { Link } from 'react-router-dom'\nimport Button from '../../components/Button'\nimport UserImage from '../../components/UserImage';\n\nconst styles = {\n select: [\n 'capitalize',\n 'w-48',\n 'h-10',\n 'pl-3',\n 'pr-6',\n 'text-base',\n 'placeholder-gray-600',\n 'border',\n 'bg-white',\n 'rounded-lg',\n 'appearance-none',\n 'focus:shadow-outline',\n ].join(' ')\n}\n\nconst Person = ({ person, handleClick, innerRef, edit = false, ...props }) => {\n const options = [\n 'pending',\n 'active (in network)',\n 'active (3rd party)',\n 'approved',\n 'disabled'\n ]\n\n return (\n <>\n <figure className=\"my-2 md:flex\">\n <UserImage className=\"w-16 rounded-full\" person={person} />\n <div className=\"px-6 py-4 text-center md:text-left space-y-2\">\n <blockquote>\n <Button\n className=\"text-lg font-semibold\"\n variant=\"link\"\n onClick={edit ? null : () => handleClick()}\n >\n {person.displayName}\n </Button>\n <p className=\"text-sm capitalize\">\n {edit ? person.role : person.status}\n </p>\n </blockquote>\n </div>\n </figure>\n <div>\n {edit ? (\n <select\n name={person.email}\n className={styles.select}\n {...innerRef}\n {...props}\n >\n {options.map((item, key) => (\n <option\n key={'option-' + key}\n value={JSON.stringify({ user: person.email, value: item })}\n >\n {item}\n </option>\n ))}\n </select>\n ) : null}\n </div>\n </>\n )\n}\n\nexport default Person\n","import Icon from '../../components/Icon'\n\nconst InNetwork = ({ status }) => {\n return (\n <div className=\"flex items-center justify-center mt-1\">\n {status ? (\n <>\n <Icon\n id=\"available\"\n className=\"w-4 h-4 mr-1 fill-current text-pantone\"\n />\n In-Network\n </>\n ) : (\n <>\n <Icon\n id=\"unavailable\"\n className=\"w-4 h-4 mr-1 fill-current text-error\"\n />\n Out-of-Network\n </>\n )}\n </div>\n )\n}\n\nexport default InNetwork\n","import Icon from '../../components/Icon'\nimport InNetwork from '../Settings/InNetwork'\nimport UserImage from '../../components/UserImage'\n\nconst PersonDetail = ({ person }) => {\n return (\n <>\n <div className=\"flex\">\n <UserImage className=\"w-20 rounded-full\" person={person} />\n <div className=\"my-auto ml-6\">\n <h1 className=\"text-lg font-bold\">{person.displayName}</h1>\n <p className=\"\">{person.role}</p>\n <div className=\"flex items-center text-md\">\n <InNetwork status={person.inNetwork} />\n </div>\n </div>\n </div>\n <div className=\"mt-5 border-b\"></div>\n <div className=\"pt-6 pl-6 ml-20\">\n <h2 className=\"text-lg\">Contact Info</h2>\n <div className=\"mt-4\">\n {person.linkedInProfile ? (\n <>\n <div className=\"flex items-center\">\n <Icon\n id=\"linked_in\"\n className=\"w-4 h-4 mr-1 text-black fill-current\"\n />\n <p className=\"font-bold text-md\">LinkedIn Profile</p>\n </div>\n <a\n href={person.linkedInProfile}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"inline-block mt-2 text-blue-600 text-md\"\n >\n {person.linkedInProfile}\n </a>\n </>\n ) : null}\n </div>\n <div className=\"mt-4\">\n <div className=\"flex items-center\">\n <Icon id=\"email\" className=\"w-4 h-4 mr-1 text-black fill-current\" />\n <p className=\"font-bold text-md\">Email</p>\n </div>\n <a\n href={\"mailto:\" + person.email}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"inline-block mt-2 text-blue-600 text-md\"\n >\n {person.email}\n </a>\n </div>\n </div>\n </>\n )\n}\n\nexport default PersonDetail\n","import { useState } from 'react'\nimport Modal from 'react-modal'\nimport toaster from 'react-hot-toast'\nimport { useForm } from 'react-hook-form'\nimport modalStyles from '../../assets/styles/modalStyles'\nimport Person from './Person'\nimport Button from '../../components/Button'\nimport PersonDetail from './PersonDetail'\nimport EditIcon from '../../components/Button/EditIcon'\nimport { uploadUser } from '../../data/loanPools'\n\nconst People = ({ business, reload, isLoading }) => {\n const people = business?.team.sort((a,b) => a.email > b.email ? 1 : -1)\n const [isOpen, setOpen] = useState(false)\n const [isEditOpen, setEditOpen] = useState(false)\n const [person, setPerson] = useState(null)\n const { register, handleSubmit, formState, reset } = useForm({\n mode: 'onChange'\n })\n const [isSaving, setIsSaving] = useState(false)\n\n const handleClick = index => {\n setPerson(people[index])\n setOpen(true)\n }\n\n const dirtyValues = (touchedFields, allValues) => {\n if (touchedFields === true || Array.isArray(touchedFields)) {\n return allValues\n }\n return Object.fromEntries(\n Object.keys(touchedFields).map(key => [\n key,\n dirtyValues(touchedFields[key], allValues[key])\n ])\n )\n }\n\n const onUpdate = async data => {\n setIsSaving(true)\n const dirtyFields = dirtyValues(formState.touchedFields, data)\n const values = Object.entries(dirtyFields).map(item => JSON.parse(item[1]))\n let usersData = []\n for (const item in values) {\n const formData = new FormData()\n formData.append('email', values[item].user)\n formData.append('entity', business.name)\n formData.append('status', values[item].value)\n usersData.push(formData)\n }\n\n const promises = usersData.map(userData => uploadUser(userData))\n\n try {\n await Promise.all(promises)\n setTimeout(() => {\n setIsSaving(false)\n reset()\n reload()\n toaster.success('Saved')\n }, 2000)\n } catch (e) {\n reload()\n setIsSaving(false)\n if (e.response.data.message) {\n toaster.error(e.response.data.message)\n } else {\n toaster.error('Something went wrong, please try again later')\n }\n console.log(e)\n throw e\n }\n }\n\n return (\n <div>\n <div className=\"flex justify-between\">\n <h2 className=\"mb-4 text-lg font-bold\">People</h2>\n <EditIcon isLoading={isLoading} setOpen={() => {reset(); setEditOpen(true)}} />\n </div>\n {people &&\n people.map((person, index) => (\n <Person\n key={index}\n person={person}\n handleClick={() => handleClick(index)}\n />\n ))}\n {person && (\n // Show team member info\n <Modal\n isOpen={isOpen}\n onRequestClose={() => setOpen(false)}\n style={modalStyles}\n >\n <PersonDetail person={person} />\n </Modal>\n )}\n <Modal\n isOpen={isEditOpen}\n onRequestClose={() => setEditOpen(false)}\n style={modalStyles}\n >\n {people &&\n people.map((person, index) => (\n <div\n key={'selector-' + index}\n className=\"flex items-center justify-between\"\n >\n <Person\n person={person}\n edit={true}\n defaultValue={JSON.stringify({\n user: person.email,\n value: person.status\n })}\n innerRef={register('user-' + index)}\n />\n </div>\n ))}\n <Button\n disabled={!formState.isDirty}\n isLoading={isSaving}\n variant=\"contained\"\n className=\"w-full mt-2\"\n onClick={handleSubmit(onUpdate)}\n >\n Update\n </Button>\n </Modal>\n </div>\n )\n}\n\nexport default People\n","import Mapchart from '../../components/Mapchart'\nimport { Link } from 'react-router-dom'\nimport { routes } from '../../router'\n\nconst MarketplaceListings = ({ business }) => {\n return (\n <div className=\"\">\n <h2 className=\"mb-5 text-lg font-bold\">Marketplace Listings</h2>\n <div className=\"overflow-y-auto\">\n {business?.listings?.map((loanPool, index) => (\n <Link key={index} to={`${routes.detail}/${loanPool.id}`}>\n <div className=\"flex justify-start mb-4 overflow-y-auto text-sm max-h-32\">\n <div className=\"w-16\">\n <Mapchart statesInfo={loanPool.statesInfo} />\n </div>\n <div className=\"ml-4\">\n <h3 className=\"mb-1 text-base font-bold\">{loanPool.title}</h3>\n <p>{loanPool.description}</p>\n </div>\n </div>\n </Link>\n ))}\n </div>\n </div>\n )\n}\n\nexport default MarketplaceListings\n","import { useState } from 'react'\nimport toaster from 'react-hot-toast'\nimport TextField from '../../components/TextField'\nimport SectionModal from '../Settings/SectionModal'\nimport { useForm, Controller } from 'react-hook-form'\nimport { updateBusiness } from '../../data/loanPools'\nimport NumberFormat from 'react-number-format'\n\nconst EditAbout = ({ data, onCancel, reload }) => {\n const [isLoading, setIsLoading] = useState(false)\n const {\n control,\n register,\n handleSubmit,\n formState: { isDirty },\n reset\n } = useForm({\n defaultValues: {\n name: data?.name,\n 'profile.about': data?.about,\n 'profile.phone': data?.phone,\n 'profile.website': data?.website,\n 'profile.ceo': data?.ceo,\n 'profile.identification': data?.identification,\n 'profile.numEmployeesRange': data?.numEmployeesRange,\n 'profile.address.city': data?.address.city,\n 'profile.address.country': data?.address.country,\n 'profile.address.state': data?.address.state,\n 'profile.address.street': data?.address.street,\n 'profile.address.zipCode': data?.address.zipCode\n }\n })\n\n const onSave = async data => {\n console.log('postData: ', data)\n setIsLoading(true)\n try {\n await updateBusiness(data)\n setTimeout(() => {\n setIsLoading(false)\n // set to isDirty to false\n reset(data)\n reload()\n toaster.success('Saved')\n }, 2000)\n } catch (e) {\n setIsLoading(false)\n if (e.response.data.message) {\n toaster.error(e.response.data.message)\n } else {\n toaster.error('Something went wrong, please try again later')\n }\n console.log(e)\n // set isSubmitSuccessful to false :)\n throw e\n }\n }\n\n return (\n <SectionModal\n isLoading={isLoading}\n onCancel={onCancel}\n onSave={handleSubmit(onSave)}\n title=\"About\"\n disableSave={!isDirty}\n >\n <div style={{ minWidth: 470 }} className=\"p-3 text-left space-y-5\">\n <div>\n <h5 className=\"mb-3 font-bold\">Description</h5>\n <textarea\n className=\"w-full px-3 py-2 text-gray-700 border border-black rounded-lg focus:outline-none\"\n rows=\"3\"\n {...register('profile.about')}\n ></textarea>\n </div>\n <div className=\"flex\">\n <div className=\"px-1\">\n <h5 className=\"mb-3 font-bold\">City</h5>\n <TextField innerRef={register('profile.address.city')} />\n </div>\n <div className=\"px-1\">\n <h5 className=\"mb-3 font-bold\">Country</h5>\n <TextField innerRef={register('profile.address.country')} />\n </div>\n </div>\n <div className=\"flex\">\n <div className=\"px-1\">\n <h5 className=\"mb-3 font-bold\">Street</h5>\n <TextField innerRef={register('profile.address.street')} />\n </div>\n <div className=\"px-1\">\n <h5 className=\"mb-3 font-bold\">State</h5>\n <TextField innerRef={register('profile.address.state')} />\n </div>\n </div>\n <div className=\"flex\">\n <div className=\"px-1\">\n <h5 className=\"mb-3 font-bold\">Zip Code</h5>\n <TextField innerRef={register('profile.address.zipCode')} />\n </div>\n <div className=\"px-1\">\n <h5 className=\"mb-3 font-bold\">Phone</h5>\n <Controller\n render={({ field: { onChange, value } }) => {\n return (\n <NumberFormat\n value={value}\n control={control}\n format=\"+1 (###) ###-####\"\n mask=\"_\"\n customInput={TextField}\n onValueChange={c => {\n onChange(c.value)\n }}\n />\n )\n }}\n name=\"profile.phone\"\n control={control}\n />\n </div>\n </div>\n <div className=\"flex\">\n <div className=\"px-1\">\n <h5 className=\"mb-3 font-bold\">Website</h5>\n <TextField type=\"url\" innerRef={register('profile.website')} />\n </div>\n <div className=\"px-1\">\n <h5 className=\"mb-3 font-bold\">CEO</h5>\n <TextField innerRef={register('profile.ceo')} />\n </div>\n </div>\n <div className=\"flex\">\n <div className=\"px-1\">\n <h5 className=\"mb-3 font-bold\">FI Number (CU or Bank ID)</h5>\n <TextField innerRef={register('profile.identification')} />\n </div>\n <div className=\"px-1\">\n <h5 className=\"mb-3 font-bold\">No. of Employees</h5>\n <TextField innerRef={register('profile.numEmployeesRange')} />\n </div>\n </div>\n </div>\n </SectionModal>\n )\n}\n\nexport default EditAbout\n","import { useState } from 'react'\nimport Modal from 'react-modal'\nimport EditAbout from './EditAbout'\nimport modalStyles from '../../assets/styles/modalStyles'\nimport EditIcon from '../../components/Button/EditIcon'\nimport numeral from 'numeral'\n\nif (numeral.formats['phone'] === undefined) {\n numeral.register('format', 'phone', {\n regexps: {\n // eslint-disable-next-line\n format: /\\+?N?[\\.\\ \\-]?\\(?NNN\\)?[\\.\\ \\-]?NNN[\\.\\ \\-]?NNNN/\n },\n format: function (value, formatString) {\n function normalize(phoneNumber) {\n return phoneNumber.toString().replace(\n // eslint-disable-next-line\n /^[\\+\\d{1,3}\\-\\s]*\\(?([0-9]{3})\\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/,\n '$1$2$3'\n )\n }\n\n function format(phoneNumber, formatString) {\n phoneNumber = normalize(phoneNumber)\n for (var i = 0, l = phoneNumber.length; i < l; i++) {\n formatString = formatString.replace('N', phoneNumber[i])\n }\n return formatString\n }\n\n return format(value, formatString)\n }\n })\n}\n\nconst About = ({ business, reload, isLoading }) => {\n const profile = business?.profile\n const [isEditOpen, setEditOpen] = useState(false)\n\n return (\n <div>\n <Modal\n isOpen={isEditOpen}\n style={modalStyles}\n onRequestClose={() => setEditOpen(false)}\n >\n <EditAbout\n data={profile}\n onCancel={() => setEditOpen(false)}\n reload={reload}\n />\n </Modal>\n <div className=\"flex justify-between\">\n <h2 className=\"mb-4 text-lg font-bold\">About</h2>\n <EditIcon isLoading={isLoading} setOpen={() => setEditOpen(true)} />\n </div>\n <p className=\"text-sm\">{profile?.about}</p>\n <table className=\"flex mt-6 text-sm\">\n <thead>\n <tr className=\"flex flex-col mr-4\">\n <td className=\"py-2 font-bold\">Address</td>\n <td className=\"py-2 font-bold\">Phone</td>\n <td className=\"py-2 font-bold\">Website</td>\n <td className=\"py-2 font-bold\">CEO</td>\n <td className=\"py-2 font-bold\">FI Number (CU or Bank ID)</td>\n <td className=\"py-2 font-bold\">No. of Employees</td>\n </tr>\n </thead>\n <tbody>\n <tr className=\"flex flex-col\">\n <td className=\"py-2\">\n {profile?.address?.street} {profile?.address?.zipCode}\n </td>\n <td className=\"py-2\">\n {profile?.phone && numeral(profile?.phone).format('+1 (NNN) NNN-NNNN')}\n </td>\n <td className=\"py-2\">{profile?.website}</td>\n <td className=\"py-2\">{profile?.ceo}</td>\n <td className=\"py-2\">{profile?.identification}</td>\n <td className=\"py-2\">{profile?.numEmployeesRange}</td>\n </tr>\n </tbody>\n </table>\n </div>\n )\n}\n\nexport default About\n","import { useEffect, useState } from 'react'\nimport { getBusiness } from '../../data/loanPools'\nimport classNames from 'classnames'\nimport api from '../../data/api'\nimport placeholder from '../../assets/images/placeholder-company.png'\n\nconst BusinessImage = ({ className, entity }) => {\n const [src, setSrc] = useState(null)\n\n useEffect(() => {\n const retrieveBusiness = async () => {\n if (entity) {\n try {\n const business = await getBusiness(entity)\n if (business.image) {\n const data = await api().get(business.image, {\n responseType: 'blob'\n })\n const photo = URL.createObjectURL(data.data)\n setSrc(photo)\n }\n } catch (e) {\n console.log(e)\n }\n }\n }\n retrieveBusiness()\n }, [entity])\n\n return (\n <img\n className={classNames('my-auto h-168', className)}\n src={src ? src : placeholder}\n alt=\"\"\n width=\"100\"\n height=\"100\"\n ></img>\n )\n}\n\nexport default BusinessImage\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAEsCAMAAADaaRXwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkJBRUI4RTMxMzQ0MzExRTVCMDRGRjg3Qjg4NzVCRTNBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkJBRUI4RTMyMzQ0MzExRTVCMDRGRjg3Qjg4NzVCRTNBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RDc4N0Q2RjgzM0I2MTFFNUIwNEZGODdCODg3NUJFM0EiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QkFFQjhFMzAzNDQzMTFFNUIwNEZGODdCODg3NUJFM0EiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4SMnOmAAAAGFBMVEXY2NjMzMzz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\"","import BusinessImage from '../../components/BusinessImage'\n\nconst Header = ({ business }) => {\n return (\n <div className=\"flex items-end\">\n <BusinessImage className=\"p-1 border rounded-md w-36\" entity={business?.name} />\n <h1 className=\"mb-1 ml-6 text-3xl font-bold text-eerie\">\n {business?.name}\n </h1>\n </div>\n )\n}\n\nexport default Header\n","import { useEffect, useState } from 'react'\nimport { useParams } from 'react-router-dom'\nimport AppBar from '../../components/AppBar'\nimport FinancialHighlights from './FinancialHighlights'\nimport People from './People'\nimport MarketplaceListings from './MarketplaceListings'\nimport About from './About'\nimport Header from './Header'\nimport { getBusiness } from '../../data/loanPools'\n\nconst EntityProfile = () => {\n const { entity } = useParams()\n const [businessProfile, setBusinessProfile] = useState(null)\n const [reload, setReload] = useState(false)\n const [isLoadingUser, setIsLoadingUser] = useState(false)\n\n useEffect(() => {\n const retrieveBusiness = async () => {\n setIsLoadingUser(true)\n try {\n const businessResponse = await getBusiness(entity)\n setBusinessProfile(businessResponse)\n setIsLoadingUser(false)\n } catch (error) {\n setIsLoadingUser(false)\n console.log(error)\n }\n }\n retrieveBusiness()\n }, [reload])\n\n const reloadBusinessInfo = () => {\n setReload(!reload)\n }\n\n return (\n <div>\n <AppBar />\n <div className=\"px-12 my-6\">\n <div className=\"container py-8 mx-auto\">\n <div className=\"flex items-end justify-between mb-5\">\n <Header business={businessProfile} />\n </div>\n <div className=\"grid grid-cols-7 gap-x-4\">\n <div className=\"p-4 mt-6 mb-3 border border-gray-200 rounded-md col-span-4\">\n <About\n isLoading={isLoadingUser}\n business={businessProfile}\n reload={reloadBusinessInfo}\n />\n </div>\n <div className=\"p-4 mt-6 mb-3 border border-gray-200 rounded-md col-span-3\">\n <MarketplaceListings business={businessProfile} />\n </div>\n </div>\n <div className=\"grid grid-cols-7 gap-x-4\">\n <div className=\"p-4 mt-3 mb-3 border border-gray-200 rounded-md col-span-4\">\n <FinancialHighlights\n isLoading={isLoadingUser}\n business={businessProfile}\n reload={reloadBusinessInfo}\n />\n </div>\n <div className=\"p-4 mt-3 mb-3 border border-gray-200 rounded-md col-span-3\">\n <People\n isLoading={isLoadingUser}\n business={businessProfile}\n reload={reloadBusinessInfo}\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\nexport default EntityProfile\n","export default __webpack_public_path__ + \"static/media/audit_frame.0ca5f522.png\";","import { useState } from 'react'\nimport classNames from 'classnames'\nimport Mapchart from '../../components/Mapchart'\nimport TextField from '../../components/TextField'\nimport Button from '../../components/Button'\nimport { useForm, Controller } from 'react-hook-form'\nimport { settlement } from '../../data/loanPools'\nimport toaster from 'react-hot-toast'\nimport NumberFormat from 'react-number-format'\n\nconst SettlementCard = ({ loanPool }) => {\n const {\n control,\n handleSubmit,\n formState: { errors }\n } = useForm({ defaultValues: loanPool, mode: 'onChange' })\n\n const [isUploading, setIsUploading] = useState(false)\n const [isSuccess, setIsSuccess] = useState(false)\n const [statesInfo, setStatesInfo] = useState(loanPool?.statesInfo)\n\n const onPercentageChange = event => {\n if (event.target.value === '') event.target.value = 0\n\n const max = 100\n const total = statesInfo\n .map(stateInfo => parseInt(stateInfo.percentLoan))\n .reduce((prev, next) => prev + next)\n const value = parseInt(event.target.value)\n const delta = max - total + value\n\n setStatesInfo(statesInfo =>\n statesInfo.map(stateInfo =>\n stateInfo.state.includes(event.target.name)\n ? {\n ...stateInfo,\n percentLoan: value < delta ? value : delta - 1\n }\n : stateInfo\n )\n )\n }\n\n const onSubmit = data => {\n setIsUploading(true)\n settlement(data)\n .then(() => {\n setTimeout(() => {\n setIsUploading(false)\n setIsSuccess(true)\n toaster.success('Settlement saved')\n }, 3000)\n })\n .catch(e => {\n console.log(e)\n setIsUploading(false)\n toaster.error(e.response.data.message)\n })\n }\n\n return (\n <>\n <div\n className={classNames(\n 'flex flex-col px-6 min-w-loan-card max-w-loan-card pt-2'\n )}\n >\n <div>\n <header>\n <div className=\"flex justify-between\">\n <h1 className=\"text-2xl font-bold\">{loanPool.title}</h1>\n </div>\n <p className=\"pt-3 text-md\">\n Originated by{' '}\n <a className=\"underline\" href=\"/#\">\n {loanPool.owner?.displayName}\n </a>\n </p>\n <p className=\"pt-4 text-md\">{loanPool.description}</p>\n </header>\n <section>\n <ul className=\"flex pt-5 text-center\">\n <li className=\"flex items-center px-3 py-2 text-sm rounded-full bg-cultured\">\n {loanPool.listType}\n </li>\n <li className=\"flex items-center px-3 py-2 ml-3 text-sm rounded-full bg-cultured\">\n {loanPool.loanType?.loanClass}\n </li>\n <li className=\"flex items-center px-3 py-2 ml-3 text-sm rounded-full bg-cultured\">\n {loanPool.loanType?.type}\n </li>\n </ul>\n </section>\n <section className=\"flex px-6 py-4 mt-4\">\n <Mapchart statesInfo={loanPool.statesInfo} />\n <table className=\"ml-5\">\n <thead>\n <tr className=\"text-left\">\n <th className=\"text-sm font-normal\">States</th>\n <th className=\"text-sm font-normal\">Compositions</th>\n </tr>\n </thead>\n <tbody>\n {statesInfo\n .sort((a, b) => {\n const textA = a.state.toUpperCase()\n const textB = b.state.toUpperCase()\n return textA < textB ? -1 : textA > textB ? 1 : 0\n })\n .map((stateInfo, index) => (\n <tr key={index}>\n <td className=\"text-sm\">{stateInfo.state}</td>\n <td className=\"text-sm text-right\">\n <TextField\n name={stateInfo.state}\n type=\"number\"\n min=\"0\"\n max=\"100\"\n step=\"1\"\n value={stateInfo.percentLoan}\n className=\"w-full !p-0\"\n onChange={onPercentageChange}\n />\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </section>\n <section className=\"mb-6\">\n <ul className=\"col\">\n {loanPool.generalInfo?.currentBalance && (\n <li className=\"flex items-center py-1 text-md\">\n <span className=\"w-1/2\">Current Balance</span>\n <span className=\"w-1/2\">\n <Controller\n render={({ field: { onChange, value } }) => {\n return (\n <NumberFormat\n value={value}\n className=\"w-full\"\n placeholder=\"#\"\n thousandSeparator={true}\n prefix={'$'}\n control={control}\n fixedDecimalScale={true}\n allowEmptyFormatting={false}\n allowNegative={false}\n customInput={TextField}\n onValueChange={c => {\n onChange(c.value)\n }}\n />\n )\n }}\n name=\"generalInfo.currentBalance\"\n control={control}\n />\n </span>\n </li>\n )}\n {loanPool.generalInfo?.originalBalance && (\n <li className=\"flex items-center py-1 text-md\">\n <span className=\"w-1/2\">Original Balance</span>\n <span className=\"w-1/2\">\n <Controller\n render={({ field: { onChange, value } }) => {\n return (\n <NumberFormat\n value={value}\n className=\"w-full\"\n placeholder=\"#\"\n thousandSeparator={true}\n prefix={'$'}\n control={control}\n fixedDecimalScale={true}\n allowEmptyFormatting={false}\n allowNegative={false}\n customInput={TextField}\n onValueChange={c => {\n onChange(c.value)\n }}\n />\n )\n }}\n name=\"generalInfo.originalBalance\"\n control={control}\n />\n </span>\n </li>\n )}\n {errors.generalInfo?.grossWAC && (\n <li className=\"text-sm text-red-600\">\n {errors.generalInfo?.grossWAC?.message}\n </li>\n )}\n {loanPool.generalInfo?.grossWAC && (\n <li className=\"flex items-center py-1 text-md\">\n <span className=\"w-1/2\">Gross WAC</span>\n <span className=\"w-1/2\">\n <Controller\n render={({ field: { onChange, value } }) => {\n return (\n <NumberFormat\n value={value}\n className=\"w-full\"\n placeholder=\"%\"\n control={control}\n allowEmptyFormatting={false}\n allowNegative={false}\n fixedDecimalScale={true}\n decimalScale={2}\n maxLength={6}\n allowLeadingZeros={true}\n customInput={TextField}\n onValueChange={c => {\n onChange(c.value)\n }}\n />\n )\n }}\n name=\"generalInfo.grossWAC\"\n control={control}\n rules={{\n min: {\n value: 0.01,\n message: 'Only values greater than 0.01 allowed'\n },\n max: {\n value: 100,\n message: 'Max value not greater than 100'\n }\n }}\n />\n </span>\n </li>\n )}\n {loanPool.generalInfo?.price && (\n <li className=\"flex items-center py-1 text-md\">\n <span className=\"w-1/2\">Price</span>\n <span className=\"w-1/2\">\n <Controller\n render={({ field: { onChange, value } }) => {\n return (\n <NumberFormat\n value={value}\n className=\"w-full\"\n placeholder=\"Par Value\"\n thousandSeparator={true}\n control={control}\n fixedDecimalScale={true}\n allowEmptyFormatting={false}\n allowNegative={false}\n customInput={TextField}\n onValueChange={c => {\n onChange(c.value)\n }}\n />\n )\n }}\n name=\"generalInfo.price\"\n control={control}\n />\n </span>\n </li>\n )}\n {errors.generalInfo?.sellerRetainedPercent && (\n <li className=\"text-sm text-red-600\">\n {errors.generalInfo?.sellerRetainedPercent?.message}\n </li>\n )}\n {Number(loanPool.generalInfo?.sellerRetainedPercent) !== 0 && (\n <li className=\"flex items-center py-1 text-md\">\n <span className=\"w-1/2\">Seller Retained</span>\n <span className=\"w-1/2\">\n <Controller\n render={({ field: { onChange, value } }) => {\n return (\n <NumberFormat\n className=\"w-full mb-2\"\n placeholder=\"%\"\n control={control}\n allowEmptyFormatting={true}\n allowNegative={false}\n decimalScale={0}\n customInput={TextField}\n value={\n value === undefined || value === '' ? '0' : value\n }\n onValueChange={c => {\n onChange(c.value)\n }}\n />\n )\n }}\n name=\"generalInfo.sellerRetainedPercent\"\n control={control}\n rules={{\n min: {\n value: 0,\n message: 'Only non zero values allowed'\n },\n max: {\n value: 100,\n message: 'Max value not greater than 100'\n }\n }}\n defaultValue={'0'}\n />\n </span>\n </li>\n )}\n {errors.generalInfo?.serviceFee && (\n <li className=\"text-sm text-red-600\">\n {errors.generalInfo?.serviceFee?.message}\n </li>\n )}\n {loanPool.generalInfo?.serviceFee && (\n <li className=\"flex items-center py-1 text-md\">\n <span className=\"w-1/2\">Service Fee</span>\n <span className=\"w-1/2\">\n <Controller\n render={({ field: { onChange, value } }) => {\n return (\n <NumberFormat\n value={value}\n className=\"w-full\"\n placeholder=\"bps\"\n control={control}\n allowEmptyFormatting={false}\n allowNegative={false}\n decimalScale={0}\n maxLength={3}\n customInput={TextField}\n onValueChange={c => {\n onChange(c.value)\n }}\n />\n )\n }}\n name=\"generalInfo.serviceFee\"\n control={control}\n rules={{\n min: {\n value: 0,\n message: 'Greater or equal than zero values allowed'\n },\n max: {\n value: 200,\n message: 'Max value not greater than 200'\n }\n }}\n />\n </span>\n </li>\n )}\n {loanPool.generalInfo?.waBalance && (\n <li className=\"flex items-center py-1 text-md\">\n <span className=\"w-1/2\">WA Balance</span>\n <span className=\"w-1/2\">\n <Controller\n render={({ field: { onChange, value } }) => {\n return (\n <NumberFormat\n value={value}\n className=\"w-full\"\n placeholder=\"#\"\n control={control}\n allowEmptyFormatting={false}\n allowNegative={false}\n customInput={TextField}\n onValueChange={c => {\n onChange(c.value)\n }}\n />\n )\n }}\n name=\"generalInfo.waBalance\"\n control={control}\n />\n </span>\n </li>\n )}\n {loanPool.loanType?.waCreditScore && (\n <li className=\"flex items-center py-1 text-md\">\n <span className=\"w-1/2\">WA Credit Score</span>\n <span className=\"w-1/2\">\n <Controller\n render={({ field: { onChange, value } }) => {\n return (\n <NumberFormat\n value={value}\n className=\"w-full\"\n placeholder=\"#\"\n control={control}\n allowEmptyFormatting={false}\n allowNegative={false}\n customInput={TextField}\n onValueChange={c => {\n onChange(c.value)\n }}\n />\n )\n }}\n name=\"loanType.waCreditScore\"\n control={control}\n />\n </span>\n </li>\n )}\n {loanPool.loanType?.waDebtToIncome && (\n <li className=\"flex items-center py-1 text-md\">\n <span className=\"w-1/2\">WA Debt To Income</span>\n <span className=\"w-1/2\">\n <Controller\n render={({ field: { onChange, value } }) => {\n return (\n <NumberFormat\n value={value}\n className=\"w-full\"\n placeholder=\"#\"\n control={control}\n allowEmptyFormatting={false}\n allowNegative={false}\n customInput={TextField}\n onValueChange={c => {\n onChange(c.value)\n }}\n />\n )\n }}\n name=\"loanType.waDebtToIncome\"\n control={control}\n />\n </span>\n </li>\n )}\n {loanPool.loanType?.waLTV && (\n <li className=\"flex items-center py-1 text-md\">\n <span className=\"w-1/2\">WA Loan To Value</span>\n <span className=\"w-1/2\">\n <Controller\n render={({ field: { onChange, value } }) => {\n return (\n <NumberFormat\n value={value}\n className=\"w-full\"\n placeholder=\"#\"\n control={control}\n allowEmptyFormatting={false}\n allowNegative={false}\n customInput={TextField}\n onValueChange={c => {\n onChange(c.value)\n }}\n />\n )\n }}\n name=\"loanType.waLTV\"\n control={control}\n />\n </span>\n </li>\n )}\n {loanPool.loanType?.waCLTV && (\n <li className=\"flex items-center py-1 text-md\">\n <span className=\"w-1/2\">WA Combined Loan To Value</span>\n <span className=\"w-1/2\">\n <Controller\n render={({ field: { onChange, value } }) => {\n return (\n <NumberFormat\n value={value}\n className=\"w-full\"\n placeholder=\"#\"\n control={control}\n allowEmptyFormatting={false}\n allowNegative={false}\n customInput={TextField}\n onValueChange={c => {\n onChange(c.value)\n }}\n />\n )\n }}\n name=\"loanType.waCLTV\"\n control={control}\n />\n </span>\n </li>\n )}\n {loanPool.generalInfo?.count && (\n <li className=\"flex items-center py-1 text-md\">\n <span className=\"w-1/2\">Count</span>\n <span className=\"w-1/2\">\n <Controller\n render={({ field: { onChange, value } }) => {\n return (\n <NumberFormat\n value={value}\n className=\"w-full\"\n placeholder=\"#\"\n thousandSeparator={true}\n control={control}\n fixedDecimalScale={true}\n allowEmptyFormatting={false}\n allowNegative={false}\n customInput={TextField}\n onValueChange={c => {\n onChange(c.value)\n }}\n />\n )\n }}\n name=\"generalInfo.count\"\n control={control}\n />\n </span>\n </li>\n )}\n {loanPool.loanTerm?.waRemainingTerm && (\n <li className=\"flex items-center py-1 text-md\">\n <span className=\"w-1/2\">WA Remaining Term</span>\n <span className=\"w-1/2\">\n <Controller\n render={({ field: { onChange, value } }) => {\n return (\n <NumberFormat\n value={value}\n className=\"w-full\"\n placeholder=\"#\"\n control={control}\n allowEmptyFormatting={false}\n allowNegative={false}\n customInput={TextField}\n onValueChange={c => {\n onChange(c.value)\n }}\n />\n )\n }}\n name=\"loanTerm.waRemainingTerm\"\n control={control}\n />\n </span>\n </li>\n )}\n </ul>\n </section>\n </div>\n <div>\n <Button\n isLoading={isUploading}\n disabled={isSuccess}\n onClick={handleSubmit(onSubmit)}\n variant=\"outlined\"\n className=\"block w-48 h-12 mx-auto mt-2\"\n >\n Submit\n </Button>\n </div>\n </div>\n </>\n )\n}\n\nexport default SettlementCard\n","import { useState, useRef, useEffect, memo } from 'react'\nimport { useHistory } from 'react-router-dom'\nimport FadeLoader from 'react-spinners/ClipLoader'\nimport Button from '../../components/Button'\nimport Icon from '../../components/Icon'\nimport { updateDealRoom } from '../../data/loanPools'\nimport { routes } from '../../router'\nimport SettlementCard from './SettlementCard'\nimport { uploadContract } from '../../data/documents'\nimport BeatLoader from 'react-spinners/BeatLoader'\nimport toaster from 'react-hot-toast'\n\nconst ManageMenu = ({ isOwner, loanPool, buyer, proposedBuyers }) => {\n const manageContainer = useRef()\n const [isManageOpen, setManageOpen] = useState(false)\n const [isSaleEnding, setSaleEnding] = useState(false)\n const [isSettlement, setSettlement] = useState(false)\n const [isEndingLoading, setEndingLoading] = useState(false)\n const [isUploading, setIsUploading] = useState(false)\n const { email } = JSON.parse(localStorage.getItem('user'))\n const history = useHistory()\n const inputContractFile = useRef()\n\n useEffect(() => {\n if (\n proposedBuyers?.buyer?.signature === 'contract signed' &&\n proposedBuyers?.seller?.signature === 'contract signed'\n ) {\n setSettlement(true)\n }\n }, [proposedBuyers])\n\n const handleClickOutside = event => {\n if (\n manageContainer.current &&\n !manageContainer.current.contains(event.target) &&\n // Need this because of button not being a parte of manageContainer\n // anymore when switching views with isSaleEnding\n !event.target.dataset.end\n ) {\n setManageOpen(false)\n setSaleEnding(false)\n }\n }\n\n useEffect(() => {\n document.addEventListener('click', handleClickOutside)\n return () => document.removeEventListener('click', handleClickOutside)\n }, [])\n\n const handleManageClick = () => setManageOpen(isManageOpen => !isManageOpen)\n\n const handleEndSaleWanted = () => setSaleEnding(true)\n\n const handleEndSale = async signature => {\n setEndingLoading(true)\n console.log('buyer:', buyer)\n const data = {\n loanId: loanPool.id,\n docType: 'End Sale',\n buyer: {\n role: 'buyer',\n email: buyer.email,\n entity: buyer.entity\n },\n seller: {\n role: 'seller',\n email: loanPool.owner.email,\n entity: loanPool.owner.entity\n }\n }\n if (email === loanPool.owner.email) {\n console.log('Ending sale as a seller')\n data.seller.signature = signature\n } else {\n console.log('Ending sale as a buyer')\n data.buyer.signature = signature\n }\n try {\n const response = await updateDealRoom(data)\n setEndingLoading(false)\n // After seller end sale\n if (signature === 'end sale edit') {\n // Redirect to loanpool edit page\n history.push(routes.upload, response)\n } else {\n history.push(routes.marketplace)\n }\n } catch (e) {\n setEndingLoading(false)\n console.log(e)\n }\n }\n\n const uploadFile = async (loanId, file) => {\n const formData = new FormData()\n formData.append('data', file)\n formData.append('filetype', file.type)\n const response = await uploadContract(loanId, formData)\n return response\n }\n\n const handleContractChange = async (e) => {\n console.log('e: ', e.target.value);\n setIsUploading(true)\n const file = inputContractFile.current.files[0]\n console.log('the contract file is ->', file)\n if (!file) return\n const formData = new FormData()\n formData.append('file', file)\n try {\n await uploadFile(loanPool?.id, file)\n setTimeout(() => {\n setManageOpen(false)\n setIsUploading(false)\n toaster.success('Saved')\n }, 2000)\n } catch (error) {\n setIsUploading(false)\n if (error.response.status === 304) {\n toaster.success('The dcument is identical to the previous version')\n } else {\n console.log('Error when uploading document', error)\n\n toaster.error('Something went wrong, please try again later')\n }\n }\n }\n\n const MenuSettlement = () => {\n return (\n <>\n {isSaleEnding ? (\n <SettlementCard loanPool={loanPool} />\n ) : (\n <div className=\"h-12 mt-8 text-center\">\n <Button\n data-end={true}\n variant=\"contained\"\n className=\"whitespace-nowrap\"\n onClick={handleEndSaleWanted}\n >\n Settle Loan Pool\n </Button>\n </div>\n )}\n </>\n )\n }\n\n const MenuContent = () => {\n // buyer ends loanpool: Issue contract, end sale -> buyer cancels : End sale\n // seller ends loanpool: Issue contract, end sale, -> seller cancels (ends) loanpool: Relist, Edit (ends loanpool)\n\n const ConfirmAction = () => {\n let actor = ''\n isOwner ? (actor = 'seller') : (actor = 'buyer')\n\n if (actor === 'buyer') {\n return (\n <div>\n <p className=\"whitespace-nowrap\">\n You've chosen to end the sale without closing. Please confirm,\n <br />\n this action cannot be undone.\n </p>\n <Button\n variant=\"contained\"\n className=\"block w-48 h-12 mx-auto mt-8\"\n onClick={() => handleEndSale('end sale request')}\n >\n End Sale\n </Button>\n </div>\n )\n }\n if (actor === 'seller') {\n return (\n <div>\n <p className=\"whitespace-nowrap\">\n You've chosen to end the sale without closing. Please confirm,\n <br />\n this action cannot be undone.\n </p>\n <div className=\"flex\">\n <Button\n variant=\"contained\"\n className=\"block w-48 h-12 mx-auto mt-8\"\n onClick={() => handleEndSale('end sale relist')}\n data-end={true}\n >\n Relist Loanpool\n </Button>\n <Button\n variant=\"contained\"\n className=\"block w-48 h-12 mx-auto mt-8\"\n onClick={() => handleEndSale('end sale edit')}\n data-end={true}\n >\n Edit Loanpool\n </Button>\n </div>\n </div>\n )\n }\n }\n\n return (\n <>\n {isSaleEnding ? (\n <ConfirmAction />\n ) : (\n <div className=\"flex space-x-4\">\n <label\n htmlFor=\"contract-upload\"\n className=\"p-2 font-semibold text-white bg-black border border-black rounded cursor-pointer whitespace-nowrap text-md\"\n >\n {isUploading ? (\n <BeatLoader size={7} color=\"white\" />\n ) : (\n <span>Issue Contract</span>\n )}\n </label>\n <input\n disabled={isUploading}\n id=\"contract-upload\"\n className=\"hidden\"\n type=\"file\"\n ref={inputContractFile}\n onChange={handleContractChange}\n />\n <Button\n data-end={true}\n variant=\"contained\"\n className=\"whitespace-nowrap\"\n onClick={handleEndSaleWanted}\n >\n End Sale\n </Button>\n </div>\n )}\n </>\n )\n }\n\n return (\n <div className=\"relative\" ref={manageContainer}>\n <Icon\n id=\"menu\"\n className=\"w-4 h-4 ml-4 cursor-pointer\"\n onClick={handleManageClick}\n />\n {isManageOpen && (\n <div className=\"absolute right-0 p-6 overflow-y-auto bg-white border rounded border-onyx top-8\">\n <h3 className=\"text-lg font-bold text-center text-pantone whitespace-nowrap\">\n Manage Loan Pool Sale\n </h3>\n <div className=\"my-6 border-b\"></div>\n {isSettlement ? (\n <MenuSettlement />\n ) : isEndingLoading ? (\n <div className=\"flex justify-center\">\n <FadeLoader />\n </div>\n ) : (\n <MenuContent />\n )}\n </div>\n )}\n </div>\n )\n}\n\nexport default memo(ManageMenu)\n","import { useQuery } from 'react-query'\nimport { getContract } from '../../data/documents'\n\nconst useContract = id => {\n return useQuery(['contract', parseInt(id)], () => getContract(id), {\n enabled: true\n })\n}\n\nexport default useContract\n","import { useEffect, useState } from 'react'\nimport VersionItem from '../../components/DocumentVersion/VersionItem'\nimport VersionContainer from '../../components/DocumentVersion/VersionContainer'\nimport useContract from '../../data/hooks/useContract'\n\nconst ContractVersion = ({ loanId }) => {\n const [contract, setContract] = useState(null)\n const [latest, setLatest] = useState(null)\n const contractQuery = useContract(loanId)\n\n useEffect(() => {\n if (contractQuery.isSuccess) {\n setLatest(contractQuery.data.versionedDocs.at(-1))\n setContract(contractQuery.data)\n }\n }, [loanId, contractQuery?.data])\n\n return (\n <>\n <VersionContainer title=\"Version History\" filename={contract?.filename}>\n <VersionItem\n date={latest?.uploadDate}\n name={contract?.filename}\n filename={contract?.filename}\n link={latest?.link}\n version={latest?.version}\n loanId={loanId}\n currentVersion={contract?.currentVersion}\n />\n {contract?.versionedDocs?.length > 1 &&\n contract?.versionedDocs?.slice(0).reverse().map((item, index) => (\n <VersionItem\n key={index}\n date={item.uploadDate}\n name={item.link.split('/').pop()}\n link={item.link}\n filename={contract?.filename}\n version={item.version}\n loanId={loanId}\n />\n ))}\n </VersionContainer>\n </>\n )\n}\n\nexport default ContractVersion\n","import { useEffect, useState } from 'react'\nimport VersionItem from '../../components/DocumentVersion/VersionItem'\nimport useContract from '../../data/hooks/useContract'\nimport Modal from 'react-modal'\nimport modalStyles from '../../assets/styles/modalStyles'\nimport ContractVersion from './ContractVersion'\n\nconst Contract = ({ loanId, reviewContract, contractSigned, showButtonsReviewContract }) => {\n const [contract, setContract] = useState(null)\n const [latest, setLatest] = useState(null)\n const [isModalContractOpen, setModalContractOpen] = useState(false)\n const contractQuery = useContract(loanId)\n\n useEffect(() => {\n if (contractQuery.isSuccess) {\n console.log('contractQuery: ', contractQuery.data);\n setLatest(contractQuery.data.versionedDocs.at(-1))\n setContract(contractQuery.data)\n }\n }, [loanId, contractQuery?.data])\n\n return (\n <div>\n {contractQuery.isLoading ? (\n <p className=\"pt-4 text-center text-md\">Loading contract</p>\n ) : latest === null ? (\n <p className=\"pt-4 text-center text-md\">Not started</p>\n ) : null}\n {latest && (\n <>\n <h3 className=\"pb-2 pl-1 font-medium font-bold text-gray-900 leading-6\">\n Manage Sale Contract\n </h3>\n <ul className=\"pb-4 space-y-3\">\n <VersionItem\n date={latest?.uploadDate}\n name={contract?.filename}\n filename={contract?.filename}\n link={latest?.link}\n version={latest?.version}\n loanId={loanId}\n currentVersion={contract?.currentVersion}\n source=\"contract\"\n reviewContract={reviewContract}\n setModalContractOpen={setModalContractOpen}\n contractSigned={contractSigned}\n showButtonsReviewContract={showButtonsReviewContract}\n />\n </ul>\n </>\n )}\n <Modal\n isOpen={isModalContractOpen}\n onRequestClose={() => setModalContractOpen(false)}\n style={modalStyles}\n >\n <ContractVersion loanId={loanId} />\n </Modal>\n </div>\n )\n}\n\nexport default Contract\n","import _ from 'lodash'\nimport { useEffect, useState } from 'react'\nimport event from '../../context/eventBus'\nimport LoanCard from '../../components/LoanCard'\nimport Button from '../../components/Button'\nimport { updateDealRoom, getProposedBuyers } from '../../data/loanPools'\nimport { getESign } from '../../data/documents'\nimport audit_image from '../../assets/images/audit.png'\nimport audit_frame from '../../assets/images/audit_frame.png'\nimport Modal from 'react-modal'\nimport ManageMenu from './ManageMenu'\nimport { getDocEsign } from '../../data/documents'\nimport { uploadDoc } from '../../data/documents'\nimport useAllDocuments from '../../../src/data/hooks/useAllDocuments'\nimport toaster from 'react-hot-toast'\nimport ConfirmationModal from '../../components/ConfirmationModal'\nimport { useHistory } from 'react-router-dom'\nimport { cleanUrlParams } from './../../data/utils'\nimport modalStyles from './../../assets/styles/modalStyles'\nimport Contract from './Contract'\nimport { getContract } from '../../data/documents'\nimport api from '../../data/api'\n\nModal.setAppElement('#root')\n\nconst DealAction = ({\n loanPool,\n email,\n buyer,\n setProposedLoaded,\n setLoadingOverlay,\n // currentSid\n}) => {\n const [esign, setESign] = useState({\n accountId: '',\n envelopeId: '',\n redirectUrl: ''\n })\n const [contractBuyer, setContractBuyer] = useState({})\n const [contractSeller, setContractSeller] = useState({})\n // const [signatureTypeContractSeller, setSignatureTypeContractSeller] =\n useState()\n // const [signatureTypeContractBuyer, setSignatureTypeContractBuyer] = useState()\n const [contractSigned, setContractSigned] = useState(false)\n const [showButtonsReviewContract, setShowButtonsReviewContract] =\n useState(false)\n const [refreshKey, setRefreshKey] = useState(0)\n //const accountId = 'dfd56213-7d61-4704-89a7-ac1bcd3e767c'\n const accountId = '75692d6a-37ce-4fc8-8d21-cff9fece7aae'\n\n const docusignevent = new URLSearchParams(\n document.location.search.substring(1)\n ).get('event')\n\n const docusignEnvelopeId = new URLSearchParams(\n document.location.search.substring(1)\n ).get('envelopeId')\n\n const [isAuditOpen, setAuditOpen] = useState(false)\n const [proposedBuyers, setProposedBuyers] = useState({})\n const { refetch } = useAllDocuments(loanPool?.id)\n const [showErrorPrompt, setErrorPromptOpen] = useState(false)\n const [promptMessage, setPromptMessage] = useState('')\n const history = useHistory()\n\n useEffect(() => {\n if (loanPool) {\n getProposedBuyers(loanPool.id)\n .then(res => {\n setProposedBuyers(res)\n setProposedLoaded(true)\n if (loanPool.owner.email === email) {\n // Seller\n res.buyer.signature === 'contract signed' &&\n res.seller.signature === 'loi signed'\n ? setShowButtonsReviewContract(true)\n : setShowButtonsReviewContract(false)\n res.buyer.signature === 'contract signed' &&\n res.seller.signature === 'contract signed'\n ? setContractSigned(true)\n : setContractSigned(false)\n setContractBuyer(res.buyer)\n setContractSeller(res.seller)\n // setSignatureTypeContractBuyer('contract signed')\n // setSignatureTypeContractSeller('contract signed')\n if (res.docuSignId && res.docType === 'Contract') {\n setESign({\n accountId: accountId,\n envelopeId: res.docuSignId\n })\n }\n } else {\n // Buyer\n setShowButtonsReviewContract(true)\n setContractBuyer(res.buyer)\n setContractSeller(res.seller)\n setESign({\n accountId: accountId,\n envelopeId: '',\n redirectUrl: ''\n })\n // setSignatureTypeContractBuyer('contract signed')\n // setSignatureTypeContractSeller('loi signed')\n // // Switch to payment panel?\n if (\n res.buyer.signature === 'contract signed' &&\n res.seller.signature === 'loi signed'\n ) {\n setShowButtonsReviewContract(false)\n }\n if (\n res.buyer.signature === 'contract signed' &&\n res.seller.signature === 'contract signed'\n ) {\n setShowButtonsReviewContract(false)\n setContractSigned(true)\n }\n }\n })\n .catch(e => {\n setProposedLoaded(false)\n if (e?.response?.data?.message) {\n setPromptMessage(e.response.data.message)\n } else {\n setPromptMessage('Something went wrong, please try again later')\n }\n setErrorPromptOpen(true)\n setShowButtonsReviewContract(false)\n setContractSigned(false)\n })\n }\n }, [loanPool, email, refreshKey])\n\n const getMessage = () => {\n setTimeout(() => {\n setRefreshKey(oldKey => oldKey + 1)\n }, 3000)\n }\n\n useEffect(() => {\n event.on(\n 'refetch',\n _.throttle(getMessage, 1000, { leading: true, trailing: false })\n )\n }, [])\n\n const reviewContract = async () => {\n setLoadingOverlay(true)\n\n if (esign.envelopeId === '') {\n const buyer = JSON.stringify({\n email: contractBuyer.email,\n name: contractBuyer.entity,\n role: 'Buyer'\n })\n const seller = JSON.stringify({\n email: loanPool.owner.email,\n name: loanPool.owner.entity,\n role: 'Seller'\n })\n\n const data = new FormData()\n\n try {\n const contract = await getContract(loanPool.id)\n const latest = contract.versionedDocs.at(-1)\n const file = await api().get(latest.link, {\n responseType: 'blob',\n responseEncoding: 'binary'\n })\n data.append('file', file.data)\n // data.append('fileExtension', file.type)\n if (email === contractBuyer.email) {\n data.append('signer', buyer), data.append('counterSigner', seller)\n } else {\n data.append('signer', seller), data.append('counterSigner', buyer)\n }\n data.append('templateName', 'Contract')\n data.append('dsReturnUrl', location.href)\n } catch (e) {\n console.log('e: ', e)\n setLoadingOverlay(false)\n toaster.error('Something went wrong, please try again later')\n throw e\n }\n try {\n const esignRes = await getESign(data)\n console.log('esignRes: ', esignRes);\n if (esignRes.err) {\n console.log('esign Err: ', esignRes.err);\n }\n window.location.href = esignRes.redirectUrl\n } catch (e) {\n setESign({})\n setLoadingOverlay(false)\n console.log(e)\n }\n // console.log(err)\n // setLoadingOverlay(false)\n // if (err.response.data.message) {\n // toaster.error(err.response.data.message)\n // } else {\n // toaster.error('Something went wrong, please try again later')\n // }\n } else {\n const data = new FormData()\n data.append('envelopeId', esign.envelopeId)\n data.append('dsReturnUrl', location.href)\n data.append('templateName', 'Contract')\n try {\n const esignRes = await getESign(data)\n if (esignRes.err) {\n console.log('esign Err: ', esignRes.err);\n }\n window.location.href = esignRes.redirectUrl\n } catch (e) {\n setLoadingOverlay(false)\n console.log('e:', e)\n }\n }\n }\n\n useEffect(() => {\n const contractSignAgreed = signStatus => {\n const isOwner = loanPool.owner.email === email\n\n let signature = ''\n if (signStatus === 'signing_complete' || signStatus === 'viewing_complete') {\n signature = 'contract signed'\n }\n if (signStatus === 'decline') {\n signature = 'contract rejected'\n }\n if (signStatus === 'cancel') {\n cleanUrlParams()\n return\n }\n\n // console.log('is owner?', isOwner)\n // console.log('loanpool status', loanPool.status)\n // console.log('contractSeller->', contractSeller)\n // console.log('contractBuyer->', contractBuyer)\n // console.log('signatureTypeContractSeller->', signatureTypeContractSeller)\n // console.log('signatureTypeContractBuyer->', signatureTypeContractBuyer)\n if (\n Object.entries(contractBuyer).length === 0 ||\n Object.entries(contractSeller).length === 0\n )\n return\n if (\n (contractBuyer.signature === 'contract signed' && !isOwner) ||\n contractSeller.signature === 'contract signed'\n )\n return\n\n console.log('contract agreed')\n\n const data = {\n loanId: loanPool.id,\n docType: 'contract',\n docuSignId: docusignEnvelopeId,\n buyer: {\n role: 'buyer',\n email: contractBuyer.email,\n entity: contractBuyer.entity,\n signature: isOwner ? contractBuyer.signature : signature\n },\n seller: {\n role: 'seller',\n email: loanPool.owner.email,\n entity: loanPool.owner.entity,\n signature: isOwner ? signature : 'loi signed'\n }\n }\n console.log('payload for contract', data)\n setLoadingOverlay(true)\n updateDealRoom(data)\n .then(() => {\n if (isOwner) {\n // upload signed document to backend\n let filename = 'Contract_' + loanPool.id + '_Signed'\n getDocEsign(docusignEnvelopeId, filename).then(file => {\n const formData = new FormData()\n formData.append('name', filename)\n formData.append('description', 'Loi signed')\n formData.append('filetype', file.type)\n formData.append('data', file, filename + '.pdf')\n formData.append('accessType', file.accessType | 'ALL_ACCESS')\n uploadDoc(loanPool.id, formData).then(res => {\n // refetch files from document history\n console.log('Upload contract signed seller', res)\n refetch()\n })\n })\n }\n setContractSigned(true)\n cleanUrlParams()\n setTimeout(() => {\n setLoadingOverlay(false)\n }, 2000)\n })\n .then(e => {\n console.log(e)\n setLoadingOverlay(false)\n // TODO: Fix error message after success\n // toaster.error('Error saving signature, please try again later')\n })\n }\n // Wait for objects to be ready before attempting to update a deal\n // Sign: signing_complete\n // Later: cancel\n // Decline: decline.\n if (loanPool && docusignevent) contractSignAgreed(docusignevent)\n }, [loanPool, docusignevent, contractBuyer])\n\n const handleAuditClick = () => setAuditOpen(true)\n\n // const manageMenu = useMemo(() => (\n // <ManageMenu\n // buyer={buyer}\n // isOwner={loanPool?.owner?.email === email}\n // loanPool={loanPool}\n // proposedBuyers={proposedBuyers}\n // />\n // ), [])\n\n return (\n <div id=\"deal-action\" className=\"py-6\">\n <div id=\"ds-terms-of-service\"></div>\n <div className=\"flex items-center justify-between px-6\">\n <h2 className=\"text-lg font-bold text-pantone\">Loan Details</h2>\n <div className=\"flex items-center\">\n <div>\n <img src={audit_image} className=\"w-8\" />\n <Button\n variant=\"link\"\n className=\"underline\"\n onClick={handleAuditClick}\n >\n Audit\n </Button>\n </div>\n <ManageMenu\n buyer={buyer}\n isOwner={loanPool?.owner?.email === email}\n loanPool={loanPool}\n proposedBuyers={proposedBuyers}\n />\n </div>\n </div>\n <div className=\"flex-grow overflow-y-auto h-screen/2\">\n {loanPool && (\n <LoanCard\n className=\"border-none shadow-none\"\n loanPool={loanPool}\n footer={false}\n />\n )}\n </div>\n <div className=\"p-6 border-t-4 rounded-xl border-platinun\">\n <Contract\n loanId={loanPool?.id}\n reviewContract={reviewContract}\n contractSigned={contractSigned}\n showButtonsReviewContract={showButtonsReviewContract}\n />\n {showButtonsReviewContract ? null : (\n <p className=\"pt-6 text-center text-pantone\">\n {contractSigned ? (\n <span>Contract signed</span>\n ) : (\n <span>Waiting for counterparty response</span>\n )}\n </p>\n )}\n </div>\n <Modal\n isOpen={isAuditOpen}\n onRequestClose={() => setAuditOpen(false)}\n style={modalStyles}\n >\n <h2 className=\"text-xl font-bold\">Audit Log</h2>\n <div className=\"py-2 border-b\"></div>\n <iframe\n src={audit_frame}\n className=\"pt-4\"\n width=\"900px\"\n height=\"500px\"\n ></iframe>\n </Modal>\n <ConfirmationModal\n title={promptMessage}\n textOk={'Ok'}\n showPrompt={showErrorPrompt}\n handleOK={() => history.push('/')}\n />\n </div>\n )\n}\n\nexport default DealAction\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAuCAYAAABEbmvDAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAtJSURBVHgB3VkJWJVVGn7vDnfjAiLIIsgiiwqUCigqMm7VTGY5ZiZWmpXlqD1S2TKl5ehUTuZSOcRTKphamlNjWKlkISjiBsa+b7LLctm5yz/fOSiTgijozDPPfM9zH/7Lf/7/fOc73/e+73cu8D9qItwFi5g39b4uSNd2GcX5dhrT+uiY+Fzcod2RY39e6j8iT2+3y1bZOeWFsEyUN6iwJ8ULgiCK+r1/4drH3yiqxiBt0I5tXzNmzHfpLqfnjytUPRGcA4lY4P/Xd8ix7rtxKKxV53z77VEfDNKkGKS1dsgc1RZG1YkcR8glJswJKEJ9mwKfnfJFu0ECC5kwDHdgYgzCBAGiqlaLEPchevx9YQIMJjGWxIbjzX8GYaZvOT557CQUMpNq2VMhbhikDdixV5aG+P5x7syTjW3ydeQglDIjnpqQg0meVVg9/RImuldBRAliMIolTW3qgsULwjee2uxsiQHabTt2ZJundvGCsI2levXF5yZnhq79w3m0dcl67ktFZpi704xH0EJuxJZ5SWIfx8bX/pbol/lu5D33YwAmudUAtm11pZNWJhfYfjN1ZNWMNbNSpX7DGiivzCis0+Lri+5wtm5FWYMa9poOZFRaY9OxQMzyK0eQWw1CPaoweliDLrHAYaHjiFGTfX19ErOy8hpuNe91VRm5M9LnfOf4NRK5eFP8kkcz31kVOD61bOiHXnZNoSvD0+Goa+31gnMldvgkYRT07XKIqTI97fR4YUoGOdty3TizIMLxbCfsTfESqILfWz0xY8Oo2tq2FSWhq1sNcv3nsSeiKQWE6xyjbVLsUL7yYkZHwKuzNXG6463hkNWV/TQyY0/4kpBM0XTvy3zSmxkBK94+Mg6TPSsxi5JfJLr52PpWC0Sf8kFCnkOx1sJY72bTfC/b+iq9MlMwdD6491BiIRsnnb97+/0r9GPfDxOfHh3vOhdusnLUmbZis2bZ7+KH/Alm+83kVDn6M7nUDGtlJ3ztG/t1iplSboBWYcAwbbtbRFCeW5hXJX8mIW+Y395zXgWPzZu2a8G4tJXirDafRVfMNqM1khZYiZu6HxZ1Qi4yosDggZjGebibdoUidojykm2Wvaa9ZyFaSwMVkxS1zZZP1bZb2UvFYrOwwX49qo0OCCv5Bkt0e7G7aT6mKJMR6/Q8djUtwN00MTni7dCARcG5VCQBuHd4HVrIofwaK6yZmYot8WMgkchFUrFgNmvE7XhhyAd4RBOH6SVfY5/zUkxXnkZKuz8lrQS3YyzPDOZbMxxzjOFfMFWsHzn4PlWwiqDlo/mJxBYmHkELwaAW0+tgvgpnYxQ5sJI0YoLFRf5dQthkugXUNRANvX80EDnVOrwdNx7x2c584v4cM5m736mxMMBraBP/MKe67wOdEMRiK4m+ekf9YpzrGM1LlDnDHC3oGo53aiNRWmJGfq1VrwnMFJ1jWU54ft9kuNo0IzriF2yYnYIfs5zx4sFQXG5S93rGRM8cz3FGab0aBy+4w0jV2B1jEbroev85D9S0WLQrxKiRFB0+dDRwztTaTRXLJ9XAziK904dHaW3dGiy1jsUieQy20r5XN1vCh6qOVSAD1r98P5ZAlf6SM0FutVxdWFl2YQbBhVph5CDbRErD274JMgLj7Cod3okbR6khRuT0NCQWDMO+sySRyLPmDhm+Ou+J9Erbk4FOddOf35hV2pMUD8+9P9F72ojQA+YIROgOYJX157CWdFdpp1GCuPThiPvVFTaqDqIcCZ4OzWKIflN4YBV2+JIrvs8cTvDQBbnMjGfomZG0bdeeYQv8kCU7Lcpa1YXmdlHEB9Fnv2D3/i17BBOe1cZivW0U8Z7pukkUUhMeCSziEVv55SSMp8RluNUfZsnElJ8UHRYNB20b/vpQSq/xTJ1sm58EFradp72R2a7pudcrs2906remImCc5FWFCe7VePlQCHae8uaEfaNlVVnjub1TUFKvwkZyyEJquuki2Jb1dW9AQpFVlJjobLZ/MaZ4VXCgXL5/Mo/mTN8ylBKRx5zxQkOrJV6akQZG9oyCGE8O1AbkGNNZwtU60lGiL5mYzZN9B5H4wYsj0E559QRps5k+l3uiQAA+KMcGJBTFfYTchVTExofOwE7dwSv0RhJnizELGLAN0DGmz/qexZLQWyEz9TGBAPznHRN6trK39e2AaODT9H6ioV3B+8KKJlWfg7OJdtgYxot9OdCX0+WNKobmvIO60Rh7HCcK+znXsdeaOEPvWeupTa+0efJMkYMzA9D95zzR3CkjDtNz1K7UKwkIA3Ce1OoI22bsSvaGLeWUi66N5xAzhuT+jvUc/ZlRs0LY5EPS2wOBznXYnezDGmGOXRKKfFG9Bh/E+6OIQDaPKC8hzxEahSE+JbXsLF/oK88Fz8it1sWGelbZLyVkZtXGsOlLoojvM1zg73SF08myyVlcw7PErm5SIirJF5cpGq/OSiVn9Xj3x3swf2w+XGxacSTdBQcueND3AjwwqpSr3xZa6Be0G2eKh3Lniq5osSr8V/5+ZpmVNqQ0/FmDcyBi/MWnpeV6dUSbQWLPmgvJ1Wpi5c22i626hFb20WNJJE0MPWG2t2rDWw+cx4XSIVhLXXewWzXXVJcqbLmMYUi/9dEk2BA7XDM1gTN1VxjrWofX/hGE4TYtREXmnvudNJ9ATNHQqphHQvF1ScBo9zmLgvMCmRRheMRYfstP/rBVdeLxoHxUNCp5E9uXDSMHZ/qVIbfGmpSGM41V8cguGJ8PS1nfDML6jUxiBsa122ketvCfcp1wNNMFkTMu8d1x0HZ8JKVKMyup1B8OzOKTLN8/Ce8SLvk5NlB4rYnv+gdHJvIWT8hGXasCcwMLaZua+x3PtlWgpA9yrcUoEofbfh5DWsyIj6l7Z8qFpYqV3KAm5DebriGzM7VnKoUJ7nbdL+fwYL491O7Wcrcex3Dt2mIZ9zrpWvjimFPdc14VinKZqPSbNDeuQLsnYEIRPLFZ9Q2hJvZuGlOq9RTdg1QcBqOoB2auCUXSfc0ahahaciGtOGHyWKeSH7KcRxfXa2wK66x4BW0heLhneC1WTM3ogYT+7FShA0YRaeuUXf2OU1BkJnhUUx6PwbFsF37McIVwLi7dzXi22O7TQKfKJ5dtyC7hOJZ8sSz1UnrxdlevkUJbpyy4qkkZNWKoPoomC6jWq3RMhzHKuZkxqcyOCho7FLzBUEjNNx2bWm6L9whaJGIc1io7V11uUE+sarIsd9J2PL4jJuHjEyk1/PigVyyEdVOlonU/cy+ORblb7Usc/qbZJFq9MChPNM378nUEzcIfe2YkR+6I4DyUkYO/0PXCoNxuMv9N987PzpJ8kFxsX+Sk1T+7fWfy8Z45aS9/ezzQp2N9WcS8WZ6tRnM0VdzUJaE5PCqsO1p9cCL1iI1YHpZBqN29heWNarx1eCw8qIBev+8CjIRPh9NdSdO7NwoiydbZvoWbI97O199qzttqGi9lFtRnZxfufjDcPm3PGc8QOtnRaS26EJ/jxPODmlOu5VmXzU4UmdPUUfMqZ8eeaRW2nwV41M/ZFpV05NAv9Z23M+eAFdyJD910MWfd3qAOKJJOdkSrp6Xh0yQ/FNRqedMyJ6CYMLEICz//HXt9vqOuedm2z07H479l61eMf+SlZ0ME4Qfwz6bIAOHsp3b82kyfZxaFCWkx9qrBvn9QZ7DMrDWtTUxKXzMGktKr3MfkjIkuDX7OXRikDdqx8gabC7SdBRt/uJc3w4xqGN+yE8Xl1OIRmxwYN+68AYO0O/oB4lwUZJ+cDHuzhfKN+E7JOvCaZkWVo037qm3RSV/hDuyu/GTz4rIQN32z4mUphIoJXqUfL15X3Ij/V/sXzWflMXq5YS0AAAAASUVORK5CYII=\"","import DealAction from './DealAction'\nimport { useEffect, useState } from 'react'\nimport { createConversation } from '../../data/conversations'\nimport { getLoanPoolById } from '../../data/loanPools'\nimport AppBar from '../../components/AppBar'\nimport Chat from '../../components/Chat'\nimport Icon from '../../components/Icon'\nimport DocumentHistory from '../../components/DocumentHistory'\nimport ConfirmationModal from '../../components/ConfirmationModal'\nimport { useHistory } from 'react-router-dom'\nimport { getProposedBuyers } from '../../data/loanPools'\nimport LoadingOverlay from 'react-loading-overlay-ts'\nimport useTwilioClient from '../../data/hooks/useTwilioClient'\n\nconst DealRoom = ({ match }) => {\n const { loanId } = match.params\n const [loanPool, setLoanPool] = useState(null)\n const [conversationSid, setConversationSid] = useState('')\n const [buyer, setBuyer] = useState('')\n const { email, entity } = JSON.parse(localStorage.getItem('user'))\n const [proposedLoaded, setProposedLoaded] = useState(false)\n const [showErrorPrompt, setErrorPromptOpen] = useState(false)\n const [promptMessage, setPromptMessage] = useState('')\n const history = useHistory()\n const [loadingOverlay, setLoadingOverlay] = useState(false)\n const client = useTwilioClient(email)\n\n useEffect(() => {\n const retrieveLoanPool = async () => {\n try {\n const loanPool = await getLoanPoolById(loanId)\n setLoanPool(loanPool)\n } catch (e) {\n if (e.response.data.message) {\n setPromptMessage(e.response.data.message)\n } else {\n setPromptMessage('Something went wrong, please try again later')\n }\n setErrorPromptOpen(true)\n }\n }\n retrieveLoanPool()\n }, [loanId])\n\n useEffect(() => {\n if (loanPool) {\n const getBuyer = async () => {\n try {\n const res = await getProposedBuyers(loanPool.id)\n setBuyer(res.buyer)\n } catch (e) {\n console.log(e)\n }\n }\n getBuyer()\n }\n }, [loanPool])\n\n useEffect(() => {\n const retrieveConversation = async () => {\n const existingConversation = loanPool.conversations.find(\n c => c.conversationSid === buyer.conversationSid\n )\n const participants = await createConversation({\n loanId: loanPool.id,\n email,\n entity,\n conversationSid: existingConversation?.conversationSid\n })\n setConversationSid(participants[0].conversationSid)\n }\n if (loanPool && loanPool.conversations) retrieveConversation()\n // eslint-disable-next-line\n }, [buyer])\n\n return (\n <div>\n <LoadingOverlay active={loadingOverlay} spinner>\n <AppBar />\n <div className=\"flex\">\n <div className=\"w-full\">\n <div id=\"ds-terms-of-service\"></div>\n <div className=\"flex\">\n <div style={{ minWidth: 300 }}>\n <header className=\"justify-between p-6\">\n <h2 className=\"text-xl font-bold text-pantone\">Deal Room</h2>\n <h3 className=\"block mt-4 text-xl font-bold\">Message</h3>\n </header>\n <section className=\"\">\n <div className=\"flex items-center p-3\">\n <div className=\"inline-block p-3 bg-black border rounded-full\">\n <Icon className=\"w-3 h-3\" id=\"profile\" fill=\"white\" />\n </div>\n <div className=\"ml-2\">\n <strong className=\"block text-base\">\n {loanPool?.owner.email === email\n ? buyer.displayName\n : loanPool?.owner.displayName}\n </strong>\n <div className=\"flex items-center text-md\">\n <Icon\n id=\"available\"\n className=\"w-4 h-4 mr-1 fill-current text-pantone\"\n />\n In-Network\n </div>\n </div>\n </div>\n </section>\n </div>\n <Chat\n loanPool={loanPool}\n conversationSid={conversationSid}\n buyerDisplayName={buyer.displayName}\n client={client}\n dealroom\n />\n </div>\n <div>\n {proposedLoaded ? (\n <DocumentHistory loanId={loanId} carousel />\n ) : null}\n </div>\n </div>\n <DealAction\n setProposedLoaded={setProposedLoaded}\n loanPool={loanPool}\n email={email}\n entity={entity}\n buyer={buyer}\n setLoadingOverlay={setLoadingOverlay}\n currentSid={conversationSid}\n />\n </div>\n <ConfirmationModal\n title={promptMessage}\n textOk={'Ok'}\n showPrompt={showErrorPrompt}\n handleOK={() => history.push('/')}\n />\n </LoadingOverlay>\n </div>\n )\n}\n\nexport default DealRoom\n","import Button from '../Button'\n\nconst RegistrationStep = ({ children, stepQuestion, currentStep, nextStep, previousStep}) => {\n console.log('currentStep', currentStep)\n return (\n <div className=\"text-center w-500\">\n <div className=\"shadow-lg text-center rounded-xl\">\n <div className=\"p-10 border-b\">\n <p className=\"text-onyx text-md mb-3\">{currentStep} / 3</p>\n <h1 className=\"text-pantone text-lg font-bold\">Account Registration</h1>\n <p className=\"text-xl font-bold mt-8 mb-6\">{stepQuestion}</p>\n {children}\n </div>\n <div className=\"flex\">\n <Button className=\"flex-1 h-12 rounded-tr-none rounded-br-none rounded-tl-none rounded-bl-xl\" disabled={currentStep === 1 ? true : false} onClick={previousStep}>Back</Button>\n <Button className=\"flex-1 h-12 bg-davys text-cultured rounded-tl-none rounded-bl-none rounded-tr-none rounded-br-xl\" onClick={nextStep}>Next</Button>\n </div>\n </div>\n <Button variant=\"link\" className=\"text-pantone underline font-bold mt-7\">Save and finish later</Button>\n </div>\n )\n}\n\nexport default RegistrationStep\n","import { useHistory } from \"react-router-dom\";\nimport StepWizard from \"react-step-wizard\";\nimport AppBar from \"../../components/AppBar\";\nimport RegistrationStep from \"../../components/RegistrationStep\";\nimport Button from \"../../components/Button\";\nimport TextField from \"../../components/TextField\";\nimport { routes } from \"../../router\";\nimport { useState } from \"react\";\n\nconst Register = () => {\n const history = useHistory();\n const [isDecisionMaker, setDecisionMaker] = useState(true)\n\n const handleDecisionMaker = () => {\n setDecisionMaker(!isDecisionMaker);\n }\n\n return (\n <div>\n <AppBar />\n <div className=\"container mx-auto mt-10\">\n <div className=\"md:flex md:justify-center\">\n <StepWizard>\n <RegistrationStep stepQuestion=\"What kind of institution are you?\">\n <select\n className=\"w-full h-10 pl-3 pr-6 text-base bg-white border rounded-lg focus:shadow-outline focus:outline-none\"\n placeholder=\"Regular input\"\n >\n <option className=\"bg-white\">Asset Manager</option>\n <option className=\"bg-white\">Bank</option>\n <option className=\"bg-white\">Broker</option>\n <option className=\"bg-white\">Credit Union</option>\n <option className=\"bg-white\">Due Diligence Firm</option>\n </select>\n </RegistrationStep>\n <RegistrationStep stepQuestion=\"Will you be the primary decision maker for your institution?\">\n <div className=\"text-left\">\n <div className=\"mb-3\">\n <input\n name=\"DecisionMaker\"\n id=\"Yes\"\n type=\"radio\"\n value=\"Yes\"\n checked={isDecisionMaker}\n onChange={handleDecisionMaker}\n />\n <label className=\"ml-2\" htmlFor=\"Yes\">\n Yes\n </label>\n </div>\n <div>\n <input\n name=\"DecisionMaker\"\n id=\"No\"\n type=\"radio\"\n value=\"No\"\n checked={!isDecisionMaker}\n onChange={handleDecisionMaker}\n />\n <label className=\"ml-2\" htmlFor=\"No\">\n No\n </label>\n </div>\n {!isDecisionMaker && (\n <div className=\"mt-3\">\n <p className=\"text-sm\">\n Please enter the email address of the primary decision\n maker\n </p>\n <TextField\n className=\"w-full mt-1\"\n type=\"email\"\n placeholder=\"Email Address\"\n />\n </div>\n )}\n </div>\n </RegistrationStep>\n <RegistrationStep stepQuestion=\"What is your primary responsability within your organization?\">\n <select\n className=\"w-full h-10 pl-3 pr-6 text-base bg-white border rounded-lg focus:shadow-outline focus:outline-none\"\n placeholder=\"Regular input\"\n >\n <option className=\"bg-white\">Conduct Transactions</option>\n <option className=\"bg-white\">Research Loans</option>\n <option className=\"bg-white\">Office Administrator</option>\n <option className=\"bg-white\">Others</option>\n </select>\n </RegistrationStep>\n <div className=\"w-500\">\n <div className=\"px-10 py-16 shadow-lg rounded-xl\">\n <p className=\"mb-8 text-2xl font-bold\">\n Thank you for your interest in registering with DATE!\n </p>\n <p className=\"mb-4\">\n We will contact you shortly with additional information to\n complete the registration process. <br />\n Once completed, you will have access to DATE.\n </p>\n <p>\n Until then, your account will not be active.\n <br />\n Thank you got yout understanding and we look forward to having\n you join the DATE marketplace!\n </p>\n </div>\n <div className=\"text-center\">\n <Button\n variant=\"link\"\n className=\"font-bold underline text-pantone mt-7\"\n onClick={() => history.push(routes.root)}\n >\n Return to Homepage\n </Button>\n </div>\n </div>\n </StepWizard>\n </div>\n </div>\n </div>\n );\n};\n\nexport default Register;\n","import api from './api'\n\nexport const signup = async data => {\n console.log('payload', data)\n const response = await api().post('/signup/loanpool', data)\n return response.data\n}\n","import api from \"./api\";\n\nexport const search = async (term, authToken) => {\n const data = await api().get(`loanpool/business/wildcard/${term}`, {\n headers: { Authorization: `Bearer ${authToken}` },\n });\n console.log(data.data)\n return data.data;\n};\n","import TextField from '../../components/TextField'\nimport Button from '../../components/Button'\nimport { signup } from '../../data/auth'\nimport { useEffect, useState } from 'react'\nimport { useForm } from 'react-hook-form'\nimport { useHistory } from 'react-router-dom'\nimport { routes } from '../../router'\nimport { useQuery } from 'react-query'\nimport { search } from '../../data/wildcard'\nimport { app } from '../../data/firebaseConfig'\n\nconst SignUp = () => {\n const {\n register,\n handleSubmit,\n setValue,\n watch,\n } = useForm()\n const [isLoading, setLoading] = useState(false)\n const [error, setError] = useState('')\n const history = useHistory()\n const [term, setTerm] = useState('')\n const [token, setToken] = useState('')\n const [selected, setSelected] = useState(false)\n\n const fieldsQuery = useQuery(['fields', term], () => search(term, token), {\n enabled: false\n })\n\n useEffect(() => {\n if (term && !selected) {\n fieldsQuery.refetch()\n }\n }, [term])\n\n useEffect(() => {\n const init = async () => {\n const { user } = await app\n .auth()\n .signInWithEmailAndPassword('admin@permissionednetworks.com', 'test123')\n const authToken = await user.getIdToken()\n setToken(authToken)\n }\n init()\n }, [])\n\n const handleSignUpSubmit = async ({\n firstName,\n lastName,\n email,\n password,\n financialInstitution\n }) => {\n try {\n setError('')\n setLoading(true)\n const { user } = await app\n .auth()\n .createUserWithEmailAndPassword(email, password)\n console.log('user', user)\n const authToken = await user.getIdToken()\n console.log(authToken)\n localStorage.setItem(\n 'user',\n JSON.stringify({\n email: email.toLowerCase(),\n authToken,\n entity: financialInstitution\n })\n )\n const data = await signup({\n email,\n password,\n confirmPassword: password,\n entity: financialInstitution,\n displayName: `${firstName} ${lastName}`\n })\n setLoading(false)\n console.log(data)\n history.push(routes.register)\n } catch (error) {\n setError(error.message)\n setLoading(false)\n }\n }\n\n const handleBankChange = e => {\n setTerm(e.target.value)\n setSelected(false)\n }\n\n const handleItemClick = e => {\n setValue('financialInstitution', e.target.innerText)\n setSelected(true)\n }\n\n return (\n <div className=\"flex items-center min-h-screen\">\n <div className=\"mx-auto border-t shadow-lg rounded-xl w-500\">\n <div className=\"p-4 border-b\">\n <h1 className=\"text-2xl font-bold text-center text-pantone\">date</h1>\n </div>\n <div className=\"p-4\">\n <h2 className=\"mb-6 text-lg font-bold\">Sign Up</h2>\n <form\n className=\"space-y-4\"\n onSubmit={handleSubmit(handleSignUpSubmit)}\n >\n <div className=\"flex space-x-4\">\n <TextField\n className=\"w-1/2\"\n placeholder=\"First name\"\n innerRef={register('firstName')}\n />\n <TextField\n className=\"w-1/2\"\n placeholder=\"Last name\"\n innerRef={register('lastName')}\n />\n </div>\n <div className=\"relative\">\n <TextField\n type=\"select\"\n className=\"w-full\"\n placeholder=\"Financial Institution\"\n innerRef={register('financialInstitution')}\n onChange={handleBankChange}\n />\n <ul className=\"absolute z-10 truncate bg-white border-b border-l border-r whitespace-nowrap\">\n {fieldsQuery.data?.map((institution, index) => {\n return (\n term && !selected && (\n <li\n key={index}\n className=\"p-2 cursor-default hover:bg-gray-100\"\n onClick={handleItemClick}\n >\n {institution.name}\n </li>\n )\n )\n })}\n </ul>\n </div>\n <TextField\n className=\"w-full\"\n placeholder=\"Work email address\"\n type=\"email\"\n innerRef={register('email')}\n />\n <TextField\n className=\"w-full\"\n placeholder=\"Password\"\n type=\"password\"\n innerRef={register('password')}\n />\n <Button\n className=\"w-full rounded-lg\"\n variant=\"contained\"\n isLoading={isLoading}\n disabled={\n !watch().firstName ||\n !watch().lastName ||\n !watch().email ||\n !watch().password\n }\n >\n Create an account\n </Button>\n <span className=\"block text-sm text-center text-error\">\n {error}\n </span>\n <p className=\"text-sm text-center\">\n Already have an account?{' '}\n <Button className=\"text-sm font-bold underline\" variant=\"link\">\n Sign In\n </Button>\n </p>\n </form>\n </div>\n </div>\n </div>\n )\n}\n\nexport default SignUp\n","import { Link } from 'react-router-dom'\nimport Button from '../../components/Button'\nimport { routes } from '../../router'\n\nconst renderItems = items => {\n if (items.length > 1) {\n return items.map((item, index) => (\n <span key={index}>\n {item}\n {index ? '' : ', '}\n </span>\n ))\n }\n return items\n}\n\nconst renderBool = item => {\n return item ? 'Yes' : 'No'\n}\n\nconst Section = ({ title, data, onEdit, isLoading, children }) => {\n return (\n <div className=\"px-8 py-12 border-t shadow-md\">\n {children ? (\n <>\n <div className=\"flex justify-between\">\n <h3 className=\"text-xl font-bold text-pantone\">{title}</h3>\n </div>\n <div className=\"mt-8\">{children}</div>\n </>\n ) : (\n <>\n <div className=\"flex justify-between\">\n <h3 className=\"text-xl font-bold text-pantone\">{title}</h3>\n <Button\n isLoading={isLoading}\n variant=\"link\"\n className=\"underline\"\n onClick={onEdit}\n >\n Edit\n </Button>\n </div>\n <table className=\"flex w-full mt-8\">\n <thead>\n <tr className=\"flex flex-col items-start mr-16 space-y-3\">\n {Object.keys(data).map((key, index) => (\n <th key={index}>{key}:</th>\n ))}\n </tr>\n </thead>\n <tbody>\n <tr className=\"flex flex-col space-y-3\">\n {Object.keys(data).map((key, index) => (\n <td key={index}>\n {key === 'Financial Institution' ? (\n <Link\n to={`${routes.profile}/${data[key]}`}\n className=\"underline\"\n >\n {data[key]}\n </Link>\n ) : typeof data[key] === 'object' ? (\n renderItems(data[key])\n ) : typeof data[key] === 'boolean' ? (\n renderBool(data[key])\n ) : (\n data[key]\n )}\n </td>\n ))}\n </tr>\n </tbody>\n </table>\n </>\n )}\n </div>\n )\n}\n\nexport default Section\n","import { useState } from 'react'\nimport { app } from '../../../src/data/firebaseConfig'\nimport { yupResolver } from '@hookform/resolvers/yup'\nimport toaster from 'react-hot-toast'\nimport * as Yup from 'yup'\nimport SectionModal from './SectionModal'\nimport TextField from '../../components/TextField'\nimport Button from '../../components/Button'\nimport { useForm } from 'react-hook-form'\nimport { uploadUser } from '../../data/loanPools'\n\nconst Account = ({ data, onCancel, reloadSettings }) => {\n const [isLoading, setIsLoading] = useState(false)\n\n const user = app.auth().currentUser\n\n const validationSchema = Yup.object().shape({\n password: Yup.string()\n .required('Password is required')\n .min(6, 'Password must be at least 6 characters'),\n confirmPassword: Yup.string()\n .required('Confirm password is required')\n .oneOf([Yup.ref('password')], 'Passwords must match')\n })\n const formOptions = { resolver: yupResolver(validationSchema) }\n\n const {\n register,\n handleSubmit,\n reset,\n formState: { isDirty, errors }\n } = useForm(formOptions)\n\n const {\n register: register1,\n handleSubmit: handleSubmit1,\n reset: reset1,\n formState: { isDirty: isDirty1 }\n } = useForm({\n defaultValues: { displayName: data.displayName, entity: data.entity }\n })\n\n const onUpdate = data => {\n user\n .updatePassword(data.password)\n .then(() => {\n toaster.success('Password updated!')\n reset({ password: '', confirmPassword: '' })\n })\n .catch(e => {\n toaster.error(e.message)\n })\n }\n\n const onSave = async data => {\n setIsLoading(true)\n const { email } = JSON.parse(localStorage.getItem('user'))\n const formData = new FormData()\n\n formData.append('email', email)\n formData.append('displayName', `${data.firstName} ${data.lastName}`)\n formData.append('entity', data.entity)\n\n try {\n await uploadUser(formData)\n setTimeout(() => {\n setIsLoading(false)\n // set to isDirty to false\n reset1(data)\n reloadSettings()\n toaster.success('Saved')\n }, 2000)\n } catch (e) {\n setIsLoading(false)\n if (e.response.data.message) {\n toaster.error(e.response.data.message)\n } else {\n toaster.error('Something went wrong, please try again later')\n }\n console.log(e)\n // set isSubmitSuccessful to false :)\n throw e\n }\n }\n\n return (\n <SectionModal\n title=\"Account Settings\"\n onCancel={onCancel}\n onSave={handleSubmit1(onSave)}\n isLoading={isLoading}\n disableSave={!isDirty1}\n >\n <div className=\"space-y-5\">\n <div className=\"flex space-x-4\">\n <div className=\"relative w-1/2\">\n <label className=\"absolute text-sm text-quickSilver top-2 left-4\">\n First name\n </label>\n <TextField\n className=\"w-full px-4 pt-7\"\n defaultValue={data.Name.split(' ')[0]}\n innerRef={register1('firstName')}\n />\n </div>\n <div className=\"relative w-1/2\">\n <label className=\"absolute text-sm text-quickSilver top-2 left-4\">\n Last name\n </label>\n <TextField\n className=\"w-full px-4 pt-7\"\n defaultValue={data.Name.split(' ')[1]}\n innerRef={register1('lastName')}\n />\n </div>\n </div>\n <div className=\"relative w-full\">\n <label className=\"absolute text-sm text-quickSilver top-2 left-4\">\n Financial institution\n </label>\n <TextField\n className=\"w-full px-4 pt-7\"\n defaultValue={data['Financial Institution']}\n innerRef={register1('entity')}\n />\n </div>\n <div className=\"relative w-full\">\n <label className=\"absolute text-sm text-quickSilver top-2 left-4\">\n Password\n </label>\n <TextField\n className=\"w-full px-4 pt-7\"\n type=\"password\"\n autoComplete=\"new-password\"\n innerRef={register('password')}\n />\n <span className=\"block text-sm text-center text-error\">\n {errors.password?.message}\n </span>\n </div>\n <div className=\"relative w-full\">\n <label className=\"absolute text-sm text-quickSilver top-2 left-4\">\n Confirm password\n </label>\n <TextField\n className=\"w-full px-4 pt-7\"\n type=\"password\"\n autoComplete=\"new-password\"\n innerRef={register('confirmPassword')}\n />\n <span className=\"block text-sm text-center text-error\">\n {errors.confirmPassword?.message}\n </span>\n </div>\n <div className=\"flex space-x-4\">\n <Button\n disabled={!isDirty}\n variant=\"outlined\"\n className=\"flex-1\"\n onClick={handleSubmit(onUpdate)}\n >\n Update password\n </Button>\n <Button\n disabled={!isDirty}\n variant=\"outlined\"\n className=\"flex-1\"\n onClick={() => reset({ password: '', confirmPassword: '' })}\n >\n Reset\n </Button>\n </div>\n </div>\n </SectionModal>\n )\n}\nexport default Account\n","import { useState } from 'react'\nimport toaster from 'react-hot-toast'\nimport SectionModal from './SectionModal'\nimport TextField from '../../components/TextField'\nimport { useForm } from 'react-hook-form'\nimport { uploadUser } from '../../data/loanPools'\n\nconst Organization = ({ data, onCancel, reloadSettings }) => {\n const [isLoading, setIsLoading] = useState(false)\n const { register, watch, handleSubmit, formState, reset } = useForm({\n defaultValues: {\n entityType: data['Institution Type'],\n role: data['Primary Responsability'],\n decisionMaker: data['Decision Maker']\n }\n })\n\n const { isDirty } = formState;\n const isDesicionMaker = watch(\"decisionMaker\")\n\n const institutionTypes = [\n 'Asset Manager',\n 'Bank',\n 'Broker',\n 'Credit Union',\n 'Due Diligence Firm'\n ]\n\n const responsabilities = [\n 'Conduct Transactions',\n 'Review Loan Sales',\n 'Support Loan Sale Activities',\n ]\n\n const onSave = async (data) => {\n setIsLoading(true)\n const { email } = JSON.parse(localStorage.getItem('user'))\n const formData = new FormData()\n formData.append('email', email)\n formData.append('role', data.role)\n formData.append('entityType', data.entityType)\n formData.append('decisionMaker', data.decisionMaker)\n\n try {\n await uploadUser(formData)\n setTimeout(() => {\n setIsLoading(false)\n // set to isDirty to false\n reset(data)\n reloadSettings()\n toaster.success('Saved')\n }, 2000)\n } catch (e) {\n setIsLoading(false)\n if (e.response.data.message) {\n toaster.error(e.response.data.message)\n } else {\n toaster.error('Something went wrong, please try again later')\n }\n console.log(e)\n // set isSubmitSuccessful to false :)\n throw e;\n }\n }\n\n return (\n <SectionModal\n title=\"Organization Profile\"\n onCancel={onCancel}\n onSave={handleSubmit(onSave)}\n isLoading={isLoading}\n disableSave={!isDirty}\n >\n <div style={{ minWidth: 470 }} className=\"p-3 text-left space-y-5\">\n <div>\n <h5 className=\"mb-3 font-bold\">Institution Type:</h5>\n <select\n {...register('entityType')}\n className=\"w-full h-10 pl-3 pr-6 text-base placeholder-gray-600 bg-white border rounded-lg focus:shadow-outline border-quickSilver\"\n >\n {institutionTypes.map((type, index) => (\n <option key={index} value={type}>\n {type}\n </option>\n ))}\n </select>\n </div>\n <div>\n <h5 className=\"mb-3 font-bold\">Primary Decision Maker:</h5>\n <div className=\"mb-3\">\n <input\n name=\"DecisionMaker\"\n type=\"checkbox\"\n {...register('decisionMaker')}\n />\n <label className=\"ml-2\">\n I am the Primary Decision Maker\n </label>\n </div>\n {!isDesicionMaker && (\n <div className=\"mt-3 ml-5\">\n <p className=\"text-sm\">\n Please enter the email address of the primary decision maker\n </p>\n <TextField\n className=\"w-full mt-1\"\n type=\"email\"\n placeholder=\"Email Address\"\n />\n </div>\n )}\n </div>\n <div>\n <h5 className=\"mb-3 font-bold\">Primary Responsability:</h5>\n <select\n {...register('role')}\n className=\"w-full h-10 pl-3 pr-6 text-base placeholder-gray-600 bg-white border rounded-lg focus:shadow-outline border-quickSilver\"\n >\n {responsabilities.map((responsability, index) => (\n <option key={index} value={responsability}>\n {responsability}\n </option>\n ))}\n </select>\n </div>\n </div>\n </SectionModal>\n )\n}\n\nexport default Organization\n","import { useState } from 'react'\nimport toaster from 'react-hot-toast'\nimport SectionModal from './SectionModal'\nimport { useForm } from 'react-hook-form'\nimport { uploadUser } from '../../data/loanPools'\n\nconst Transaction = ({ data, onCancel, reloadSettings }) => {\n const [isLoading, setIsLoading] = useState(false)\n const { register, handleSubmit, formState, reset } = useForm({\n defaultValues: {\n assetClass: data['Loan Class'],\n productTags: data['Tag'],\n geographicInterests: data['Geographic Interests'],\n listType: data['Transaction Interests']\n }\n })\n const { isDirty } = formState\n\n const loanClasses = [\n 'Consumer',\n 'Residential',\n 'Commercial & Industrial',\n 'Commercial Real Estate',\n 'Other'\n ]\n\n const tags = [\n 'My Listing',\n 'Non Performing',\n 'Non-QM',\n 'REO',\n 'Seasoned',\n 'Servicing Released',\n 'Servicing Retained',\n 'CRA Eligible',\n 'Non-Bank Originator',\n 'Non-Owner Occupied',\n 'Owner-Occupied',\n 'Re-Performing',\n 'Scratch & Dent'\n ]\n\n const transactionInterests = {\n Sell: 'For Sale',\n Buy: 'Looking to Buy'\n // 'Looking to finance',\n // 'Looking for finance',\n // 'Forward Flow',\n // 'For Participation'\n }\n\n const regions = [\n 'All states',\n 'Northeast',\n 'Southeast',\n 'Midwest',\n 'Southwest',\n 'West'\n ]\n\n const onSave = async data => {\n console.log('postData: ', data)\n setIsLoading(true)\n const { email } = JSON.parse(localStorage.getItem('user'))\n const formData = new FormData()\n formData.append('email', email)\n formData.append('preferences', JSON.stringify(data))\n\n try {\n await uploadUser(formData)\n setTimeout(() => {\n setIsLoading(false)\n // set to isDirty to false\n reset(data)\n reloadSettings()\n toaster.success('Saved')\n }, 2000)\n } catch (e) {\n setIsLoading(false)\n if (e.response.data.message) {\n toaster.error(e.response.data.message)\n } else {\n toaster.error('Something went wrong, please try again later')\n }\n console.log(e)\n // set isSubmitSuccessful to false :)\n throw e\n }\n }\n\n return (\n <SectionModal\n title=\"Transaction Preferences\"\n onCancel={onCancel}\n onSave={handleSubmit(onSave)}\n isLoading={isLoading}\n disableSave={!isDirty}\n >\n <div style={{ width: 470 }} className=\"p-3 text-left space-y-5\">\n <div>\n <h5 className=\"mb-3 font-bold\">Transaction Interest:</h5>\n <div className=\"flex space-x-2.5\">\n {Object.keys(transactionInterests).map(item => (\n <div key={item} className=\"flex items-center space-x-1\">\n <input\n type=\"checkbox\"\n value={transactionInterests[item]}\n {...register('listType')}\n />\n <label htmlFor=\"Buy\">{item}</label>\n </div>\n ))}\n </div>\n </div>\n <div>\n <h5 className=\"mb-3 font-bold\">Loan Class:</h5>\n <div className=\"flex flex-wrap\">\n {loanClasses.map((loanClass, index) => (\n <div\n key={index}\n className=\"flex items-center mb-1 mr-3 space-x-1\"\n >\n <input\n name=\"loanClass\"\n type=\"checkbox\"\n value={loanClass}\n {...register('assetClass')}\n />\n <label htmlFor={loanClass}>{loanClass}</label>\n </div>\n ))}\n </div>\n </div>\n <div>\n <h5 className=\"mb-3 font-bold\">Associated Tag:</h5>\n <div className=\"flex flex-wrap\">\n {tags.map((tag, index) => (\n <div\n key={index}\n className=\"flex items-center mb-1 mr-3 space-x-1\"\n >\n <input\n type=\"checkbox\"\n value={tag}\n {...register('productTags')}\n />\n <label htmlFor={tag}>{tag}</label>\n </div>\n ))}\n </div>\n </div>\n <div>\n <h5 className=\"mb-3 font-bold\">Geographic Interests:</h5>\n <div className=\"flex flex-wrap\">\n {regions.map((region, index) => (\n <div\n key={index}\n className=\"flex items-center mb-1 mr-3 space-x-1\"\n >\n <input\n type=\"checkbox\"\n value={region}\n {...register('geographicInterests')}\n />\n <label>{region}</label>\n </div>\n ))}\n </div>\n </div>\n </div>\n </SectionModal>\n )\n}\n\nexport default Transaction\n","import { useState } from 'react'\nimport SectionModal from './SectionModal'\nimport TextField from '../../components/TextField'\nimport { useForm } from 'react-hook-form'\nimport { uploadUser } from '../../data/loanPools'\nimport toaster from 'react-hot-toast'\nimport * as Yup from 'yup'\nimport { yupResolver } from '@hookform/resolvers/yup'\n\nconst Profile = ({ data, onCancel, reloadSettings }) => {\n const [isLoading, setIsLoading] = useState(false)\n // eslint-disable-next-line\n const regMatch = /^((http|https):\\/\\/)?(www.)?(?!.*(http|https|www.))[a-zA-Z0-9_-]+(\\.[a-zA-Z]+)+(\\/)?.([\\w\\?[a-zA-Z-_%\\/@?]+)*([^\\/\\w\\?[a-zA-Z0-9_-]+=\\w+(&[a-zA-Z0-9_]+=\\w+)*)?$/;\n\n const validationSchema = Yup.object().shape({\n linkedInProfile: Yup.string().matches(regMatch, \"Website should be a valid URL\")\n })\n\n const {\n register,\n handleSubmit,\n reset,\n formState: { isDirty, errors }\n } = useForm({\n defaultValues: {\n linkedInProfile: data['LinkedIn Profile']\n },\n resolver: yupResolver(validationSchema) \n })\n\n const onSave = async data => {\n setIsLoading(true)\n const { email } = JSON.parse(localStorage.getItem('user'))\n const formData = new FormData()\n formData.append('email', email)\n formData.append('linkedInProfile', data.linkedInProfile)\n\n try {\n await uploadUser(formData)\n setTimeout(() => {\n setIsLoading(false)\n reset(data)\n reloadSettings()\n toaster.success('Saved')\n }, 2000)\n } catch (e) {\n setIsLoading(false)\n if (e.response.data.message) {\n toaster.error(e.response.data.message)\n } else {\n toaster.error('Something went wrong, please try again later')\n }\n console.log(e)\n // set isSubmitSuccessful to false :)\n throw e\n }\n }\n\n return (\n <SectionModal\n title=\"Profile Preferences\"\n onCancel={onCancel}\n onSave={handleSubmit(onSave)}\n isLoading={isLoading}\n disableSave={!isDirty}\n >\n <div style={{ minWidth: 470 }} className=\"p-3 text-left space-y-5\">\n <div>\n <h5 className=\"mb-3 font-bold\">Linkedin Profile:</h5>\n <TextField\n className=\"w-full\"\n innerRef={register('linkedInProfile')}\n />\n <span className=\"block text-sm text-center text-error\">\n {errors.linkedInProfile?.message}\n </span>\n </div>\n </div>\n </SectionModal>\n )\n}\n\nexport default Profile\n","import { useState } from 'react'\nimport Icon from '../../components/Icon'\nimport Avatar from 'react-avatar-edit'\nimport Button from '../../components/Button'\nimport toaster from 'react-hot-toast'\n\nconst AvatarEdit = ({ children, entity, email, onSave, square=false }) => {\n const [change, setChange] = useState(false)\n const [preview, setPreview] = useState(null)\n\n const handlePhotoChange = () => setChange(true)\n\n const handleCrop = preview => setPreview(preview)\n\n const dataUriToBlob = dataUri => {\n const splitDataUri = dataUri.split(',')\n const byteString =\n splitDataUri[0].indexOf('base64') >= 0\n ? atob(splitDataUri[1])\n : decodeURI(splitDataUri[1])\n const mimeString = splitDataUri[0].split(':')[1].split(';')[0]\n const ia = new Uint8Array(byteString.length)\n for (let i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i)\n }\n return new Blob([ia], { type: mimeString })\n }\n\n const handlePhotoSave = async () => {\n const formData = new FormData()\n if (email) {\n formData.append('email', email)\n }\n if (entity) {\n formData.append('name', entity)\n }\n formData.append('picture', dataUriToBlob(preview))\n try {\n await onSave(formData)\n setChange(false)\n setPreview(null)\n } catch (err) {\n if (err.response.data.message) {\n toaster.error(err.response.data.message)\n } else {\n toaster.error('Something went wrong, please try again later')\n }\n }\n }\n\n return (\n <div className=\"flex flex-col items-center\">\n {!change ? (\n <>\n <div className=\"flex ml-9\">\n {children}\n <div>\n <label\n htmlFor=\"photo\"\n className=\"shadow-md ml-3 p-2.5 border-t inline-block rounded-full cursor-pointer right-3 bottom-3 bg-white\"\n onClick={handlePhotoChange}\n >\n <Icon id=\"camera\" className=\"w-4 h-4\" />\n </label>\n </div>\n </div>\n </>\n ) : (\n <>\n <Avatar\n width={160}\n height={160}\n label=\"Click to select\"\n exportAsSquare={square}\n onCrop={handleCrop}\n />\n <div className=\"mt-3 space-x-3\">\n <Button\n variant=\"contained\"\n onClick={() => setChange(false)}\n >\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n onClick={handlePhotoSave}\n disabled={!preview}\n >\n Save\n </Button>\n </div>\n </>\n )}\n </div>\n )\n}\n\nexport default AvatarEdit\n","import Modal from 'react-modal'\nimport AppBar from '../../components/AppBar'\nimport Icon from '../../components/Icon'\nimport Button from '../../components/Button'\nimport Section from './Section'\nimport Account from './Account'\nimport Organization from './Organization'\nimport Transaction from './Transaction'\nimport { useEffect, useState } from 'react'\nimport { getUser } from '../../data/loanPools'\nimport modalStyles from '../../assets/styles/modalStyles'\nimport Profile from './Profile'\nimport InNetwork from './InNetwork'\nimport AvatarEdit from './AvatarEdit'\nimport UserImage from './../../components/UserImage'\nimport { uploadUser } from '../../data/loanPools'\nimport { updateBusiness } from '../../data/loanPools'\nimport BusinessImage from '../../components/BusinessImage'\n\nModal.setAppElement('#root')\n\nconst Settings = () => {\n const [isAccountOpen, setAccountOpen] = useState(false)\n const [isOrganizationOpen, setOrganizationOpen] = useState(false)\n const [isTransactionOpen, setTransactionOpen] = useState(false)\n const [isProfileOpen, setProfileOpen] = useState(false)\n const [user, setUser] = useState({})\n const [reload, setReload] = useState(false)\n const [isLoadingUser, setLoadingUser] = useState(false)\n\n useEffect(() => {\n const retrieveUser = async () => {\n setLoadingUser(true)\n const { entity, email } = JSON.parse(localStorage.getItem('user'))\n try {\n const userResponse = await getUser(entity, email)\n setUser(userResponse)\n setLoadingUser(false)\n } catch (error) {\n console.log(error.message)\n setLoadingUser(false)\n }\n }\n retrieveUser()\n }, [reload])\n\n const account = {\n Name: user.displayName,\n 'Financial Institution': user.entity,\n Email: user.email,\n Password: '*******'\n }\n\n const organization = {\n 'Institution Type': user.entityType,\n 'Decision Maker': user.decisionMaker,\n 'Primary Responsability': user.role\n }\n\n const transaction = {\n 'Transaction Interests': user.preferences?.listType,\n 'Loan Class': user.preferences?.assetClass,\n Tag: user.preferences?.productTags,\n 'Geographic Interests': user.preferences?.geographicInterests\n }\n\n const profile = {\n 'LinkedIn Profile': user.linkedInProfile,\n Email: user.email,\n 'In Network': user.inNetwork\n }\n\n const reloadSettings = () => {\n setReload(!reload)\n }\n\n return (\n <div>\n <AppBar />\n <div className=\"flex\">\n {/* TODO: change height for a proper class name with no magic values*/}\n <div className=\"inline-block px-12 py-16 text-center shadow-md\">\n <h1 className=\"mb-10 text-xl font-bold\">Profile</h1>\n <div>\n <AvatarEdit email={user.email} onSave={uploadUser}>\n <UserImage className=\"w-40\" person={user} />\n </AvatarEdit>\n <h2 className=\"text-lg font-bold mt-7\">{user.displayName}</h2>\n <p>Executive Vice President</p>\n <InNetwork status={user.inNetwork} />\n <div className=\"my-4\">\n <h2 className=\"mb-4 font-bold\">Contact Info</h2>\n <div className=\"space-y-2\">\n {user.linkedInProfile ? (\n <div>\n <div className=\"flex items-center justify-center\">\n <Icon\n id=\"linked_in\"\n className=\"w-4 h-4 mr-1 text-black fill-current\"\n />\n <p className=\"text-md\">LinkedIn Profile</p>\n </div>\n <a\n href={'https://' + user.linkedInProfile}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"inline-block text-blue-600 text-md\"\n >\n {user.linkedInProfile}\n </a>\n </div>\n ) : null}\n <div>\n <div className=\"flex items-center justify-center\">\n <Icon\n id=\"email\"\n className=\"w-4 h-4 mr-1 text-black fill-current\"\n />\n <p className=\"text-md\">Email</p>\n </div>\n <a\n href={'mailto:' + user.email}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"inline-block text-blue-600 text-md\"\n >\n {user.email}\n </a>\n </div>\n </div>\n </div>\n <Button\n isLoading={isLoadingUser}\n variant=\"link\"\n className=\"underline\"\n onClick={() => setProfileOpen(true)}\n >\n Edit\n </Button>\n </div>\n <div className=\"mt-8 border-b\"></div>\n <div>\n <ul className=\"my-6\">\n <li>\n <Button\n variant=\"link\"\n className=\"mb-2 text-base\"\n onClick={() => setAccountOpen(true)}\n >\n Account Settings\n </Button>\n </li>\n <li>\n <Button\n variant=\"link\"\n className=\"mb-2 text-base\"\n onClick={() => setOrganizationOpen(true)}\n >\n Organization Profile\n </Button>\n </li>\n <li>\n <Button\n variant=\"link\"\n className=\"text-base\"\n onClick={() => setTransactionOpen(true)}\n >\n Transaction Preferences\n </Button>\n </li>\n </ul>\n </div>\n <div className=\"mt-8 border-b\"></div>\n <Button variant=\"contained\" className=\"mt-16\">\n Log Out\n </Button>\n </div>\n <div className=\"flex-1 py-12 pl-12 pr-48 mr-20 space-y-12\">\n <Section\n isLoading={isLoadingUser}\n title=\"Account Settings\"\n onEdit={() => setAccountOpen(true)}\n data={account}\n />\n <Section\n isLoading={isLoadingUser}\n title=\"Organization Profile\"\n onEdit={() => setOrganizationOpen(true)}\n data={organization}\n />\n <Section\n isLoading={isLoadingUser}\n title=\"Transaction Preferences\"\n onEdit={() => setTransactionOpen(true)}\n data={transaction}\n />\n <Section title=\"Institution Logo\">\n <AvatarEdit\n entity={user.entity}\n square={true}\n onSave={updateBusiness}\n >\n <BusinessImage className=\"w-40\" entity={user.entity} />\n </AvatarEdit>\n </Section>\n </div>\n </div>\n <Modal\n isOpen={isAccountOpen}\n style={modalStyles}\n onRequestClose={() => setAccountOpen(false)}\n >\n <Account\n data={account}\n onCancel={() => setAccountOpen(false)}\n reloadSettings={reloadSettings}\n />\n </Modal>\n <Modal\n isOpen={isOrganizationOpen}\n style={modalStyles}\n onRequestClose={() => setOrganizationOpen(false)}\n >\n <Organization\n data={organization}\n onCancel={() => setOrganizationOpen(false)}\n reloadSettings={reloadSettings}\n />\n </Modal>\n <Modal\n isOpen={isTransactionOpen}\n style={modalStyles}\n onRequestClose={() => setTransactionOpen(false)}\n >\n <Transaction\n data={transaction}\n onCancel={() => setTransactionOpen(false)}\n reloadSettings={reloadSettings}\n />\n </Modal>\n <Modal\n isOpen={isProfileOpen}\n style={modalStyles}\n onRequestClose={() => setProfileOpen(false)}\n >\n <Profile\n data={profile}\n onCancel={() => setProfileOpen(false)}\n reloadSettings={reloadSettings}\n />\n </Modal>\n </div>\n )\n}\n\nexport default Settings\n","import { BrowserRouter as Router, Switch, Route } from 'react-router-dom'\nimport Portal from './pages/Portal'\nimport Login from './pages/Login'\nimport Marketplace from './pages/Marketplace'\nimport Messages from './pages/Messages'\nimport Upload from './pages/Upload'\nimport LoanDetail from './pages/LoanDetail'\nimport PrivateRoute from './components/PrivateRoute'\nimport EntityProfile from './pages/EntityProfile'\nimport DealRoom from './pages/DealRoom'\nimport Register from './pages/Register'\nimport SignUp from './pages/SignUp'\nimport Settings from './pages/Settings'\n\nexport const routes = {\n root: '/',\n login: '/login',\n marketplace: '/marketplace',\n messages: '/messages',\n upload: '/upload',\n detail: '/detail',\n profile: '/profile',\n dealroom: '/dealroom',\n register: '/register',\n signup: '/signup',\n settings: '/settings'\n}\n\nconst AppRouter = () => (\n <Router\n getUserConfirmation={() => {\n /* Empty callback to block the default browser prompt */\n }}\n >\n <Switch>\n <PrivateRoute path={routes.root} exact component={Portal} />\n <Route path={routes.login} component={Login} />\n <PrivateRoute path={routes.marketplace} component={Marketplace} />\n <PrivateRoute path={`${routes.messages}/:loanId?`} component={Messages} />\n <PrivateRoute path={routes.upload} component={Upload} />\n <PrivateRoute path={`${routes.detail}/:loanId`} component={LoanDetail} />\n <PrivateRoute path={`${routes.profile}/:entity`} component={EntityProfile} />\n <PrivateRoute path={`${routes.dealroom}/:loanId`} component={DealRoom} />\n <PrivateRoute path={`${routes.register}`} component={Register} />\n <PrivateRoute path={`${routes.settings}`} component={Settings} />\n <Route path={`${routes.signup}`} component={SignUp} />\n </Switch>\n </Router>\n)\n\nexport default AppRouter\n","import { useState, useEffect } from 'react'\nimport { app } from '../src/data/firebaseConfig'\nimport { QueryClient, QueryClientProvider } from 'react-query'\nimport AppRouter from './router'\nimport '@fontsource/inter'\nimport { Toaster } from 'react-hot-toast'\nimport PropagateLoader from 'react-spinners/PropagateLoader'\n// import { ReactQueryDevtools } from 'react-query/devtools'\n\nconst queryClient = new QueryClient()\n\nconst App = () => {\n const [initializing, setInitializing] = useState(true)\n\n // Handle user state changes\n function onIdTokenChanged(user) {\n if (user) {\n user\n .getIdToken()\n .then(() => {\n app\n .auth()\n .currentUser.getIdTokenResult()\n .then(res => {\n localStorage.setItem(\n 'user',\n JSON.stringify({\n email: user.email.toLowerCase(),\n entity: res.claims.entity\n })\n )\n if (initializing) {\n setTimeout(() => {\n setInitializing(false)\n }, 2000)\n }\n })\n })\n .catch(err => {\n console.log(err)\n })\n } else {\n // not logged in\n localStorage.removeItem('user')\n if (initializing) {\n setTimeout(() => {\n setInitializing(false)\n }, 2000)\n }\n }\n }\n\n useEffect(() => {\n const subscriber = app.auth().onIdTokenChanged(onIdTokenChanged)\n return subscriber // unsubscribe on unmount\n }, [])\n\n if (initializing) return (\n <div className=\"flex items-center justify-center h-screen\">\n <div className=\"text-center\">\n <PropagateLoader />\n </div>\n </div>\n )\n\n return (\n <QueryClientProvider client={queryClient}>\n <AppRouter />\n {/* <ReactQueryDevtools initialIsOpen={false} /> */}\n <Toaster position=\"top-right\" />\n </QueryClientProvider>\n )\n}\n\nexport default App\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport './index.css'\nimport App from './App'\n\nReactDOM.render(\n <React.StrictMode>\n <App />\n </React.StrictMode>,\n document.getElementById('root')\n)\n"],"sourceRoot":""}