{"version":3,"sources":["reportWebVitals.ts","contexts/Auth/Auth.tsx","contexts/HeaderContent.tsx","components/App/Providers.tsx","components/colors.ts","components/App/GlobalStyle.ts","img/logo.svg","services/apiService.ts","env.ts","hooks/useAuthContext.ts","hooks/useApi.ts","hooks/useDocumentList.ts","hooks/useHeaderContent.tsx","components/FlexSpacer.tsx","components/Header/Header.tsx","types.ts","components/Main/DocumentList.tsx","img/shield.svg","components/Main/Signup.tsx","components/Footer/Footer.tsx","components/Main/PrivateRoute.tsx","components/Main/FallbackRoute.tsx","components/Main/Spinner.tsx","components/Main/Oauth.tsx","components/Main/CreateDocument.tsx","components/Main/Main.tsx","components/App/App.tsx","index.tsx"],"names":["reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","USER_STORAGE_KEY","AuthContext","createContext","isAuthenticated","email","token","onAuthenticated","onLogout","AuthProvider","children","useState","setIsAuthenticated","setEmail","setToken","useCallback","user","oauthToken","localStorage","setItem","JSON","stringify","removeItem","useEffect","logoutTimeout","parse","getItem","timeToExpiration","Date","oauthTokenExpirationDate","getTime","setTimeout","clearTimeout","Provider","value","HeaderContentContext","content","setContent","HeaderContentProvider","Providers","Auth","HeaderContent","skyblue","cerulean","applegreen","Style","div","createGlobalStyle","client","Number","process","REACT_APP_CHAIN_ID","REACT_APP_RPC_URL","axios","create","baseURL","getAuthHeader","Authorization","api","setOauthToken","oauth","code","state","post","data","listDocuments","page","pageSize","get","headers","createAndSend","form","formData","FormData","append","file","title","message","signers","forEach","signer","useAuthContext","useContext","useApi","apiService","useMemo","res","error","with401Handler","fn","a","response","status","CONFIG_STORAGE_KEY","useDocumentList","config","items","setItems","setPage","setPageSize","total","setTotal","loading","setLoading","restoreConfig","storedPage","storedPageSize","storeConfig","params","fetchData","meta","cfg","onPaginationChange","useHeaderContent","defaultContent","setDefaultContent","resetContent","Spacer","styled","FlexSpacer","DocumentStatus","Logo","LoginButton","Header","location","useLocation","menu","Item","onClick","trigger","overlay","DownOutlined","href","window","origin","src","logo","alt","Title","Typography","Text","columns","strong","dataIndex","render","formattedStatus","AWAITING_MY_SIGNATURE","color","COMPLETED","OUT_FOR_SIGNATURE","placement","style","display","cursor","open","signatures","row","completedCount","filter","sig","completed","length","totalCount","isFullyCompleted","documentUid","createdAt","ReactTimeAgo","date","Main","HeaderTitle","DocumentList","history","useHistory","handleCreateDocument","push","handleTableChange","current","paginationConfig","pageSizeOptions","showSizeChanger","showTotal","from","to","level","size","type","FormOutlined","rowKey","dataSource","pagination","onChange","Step","Steps","ShieldIcon","Signup","margin","direction","shield","fontSize","padding","background","borderColor","description","textAlign","paddingRight","paddingLeft","Link","FooterContent","Footer","target","className","rel","aria-hidden","xmlns","viewBox","d","PrivateRoute","rest","pathname","FallbackRoute","path","Spinner","antIcon","LoadingOutlined","spin","indicator","Oauth","useQueryParam","oauthCode","oauthState","done","setDone","console","auth","Authenticating","Content","What","section","Who","Signer","CreateDocButtons","CreateDocument","Form","useForm","addMe","setAddMe","extraSignersCount","setExtraSignersCount","invalidFile","setInvalidFile","fileName","setFileName","meName","name","split","join","map","s","charAt","toUpperCase","slice","handleAddMe","handleDontAddMe","handleSubmit","validateFields","fields","unshift","email_address","meEmail","success","resetFields","handleGoBack","goBack","headerContent","disabled","addFirstElement","add","handleDragEnterFile","event","fileType","dataTransfer","getFileFromEvent","e","handleRemoveFileName","layout","onDragEnter","valuePropName","getValueFromEvent","noStyle","rules","required","Dragger","accept","action","multiple","beforeUpload","onRemove","InboxOutlined","label","maxLength","initialValue","CloseOutlined","List","remove","field","i","key","fieldKey","icon","PlusOutlined","TextArea","rows","exact","StyledApp","App","GlobalStyle","TimeAgo","setDefaultLocale","addLocale","en","ReactDOM","StrictMode","document","getElementById","log"],"mappings":"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","file":"static/js/main.46ca2b09.chunk.js","sourcesContent":["import { ReportHandler } from \"web-vitals\";\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import(\"web-vitals\").then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React, { createContext, useCallback, useEffect, useState } from \"react\";\n\nimport { IUser } from \"../../types\";\n\nexport interface IAuthContext {\n isAuthenticated: boolean;\n email: string;\n token: string;\n onAuthenticated: (user: IUser) => void;\n onLogout: () => void;\n}\n\ninterface IProps {\n children: React.ReactNode;\n}\n\nconst USER_STORAGE_KEY = \"user\";\n\nexport const AuthContext = createContext({\n isAuthenticated: false,\n email: \"\",\n token: \"\",\n onAuthenticated: () => {},\n onLogout: () => {},\n});\n\nconst AuthProvider: React.FC = ({ children }: IProps) => {\n const [isAuthenticated, setIsAuthenticated] = useState(false);\n const [email, setEmail] = useState(\"\");\n const [token, setToken] = useState(\"\");\n const onAuthenticated = useCallback((user?: IUser | null) => {\n setIsAuthenticated(!!user);\n setEmail(user?.email || \"\");\n setToken(user?.oauthToken || \"\");\n localStorage.setItem(USER_STORAGE_KEY, JSON.stringify(user || null));\n }, []);\n const onLogout = useCallback(() => {\n localStorage.removeItem(USER_STORAGE_KEY);\n setIsAuthenticated(false);\n }, []);\n\n useEffect(() => {\n let user: IUser | null = JSON.parse(\n localStorage.getItem(USER_STORAGE_KEY) || \"null\"\n );\n let logoutTimeout: NodeJS.Timeout;\n if (user) {\n const timeToExpiration =\n new Date(user.oauthTokenExpirationDate).getTime() -\n new Date().getTime();\n\n if (timeToExpiration <= 0) {\n user = null;\n } else {\n logoutTimeout = setTimeout(onLogout, timeToExpiration);\n }\n }\n onAuthenticated(user);\n\n return () => {\n clearTimeout(logoutTimeout);\n };\n }, [onAuthenticated, onLogout]);\n\n return (\n \n {children}\n \n );\n};\n\nexport default AuthProvider;\n","import React, { createContext, useState } from \"react\";\n\nexport interface IHeaderContentContext {\n content: React.ReactNode;\n setContent: (newContent: React.ReactNode) => void;\n}\n\ninterface IProps {\n children: React.ReactNode;\n}\n\nexport const HeaderContentContext = createContext({\n content: null,\n setContent: () => {},\n});\n\nconst HeaderContentProvider: React.FC = ({ children }: IProps) => {\n const [content, setContent] = useState(null);\n\n return (\n \n {children}\n \n );\n};\n\nexport default HeaderContentProvider;\n","import React from \"react\";\nimport { QueryParamProvider } from \"use-query-params\";\n\nimport { AuthProvider, HeaderContentProvider } from \"../../contexts\";\n\ninterface IProps {\n children: React.ReactNode;\n}\n\nconst Providers = ({ children }: IProps) => (\n \n \n {children}\n \n \n);\n\nexport default Providers;\n","export const skyblue = \"#00B3E6\";\nexport const cerulean = \"#0078a0\";\nexport const applegreen = \"#a5b93a\";\nexport const cerise = \"#cc2e89\";\n","import { createGlobalStyle } from \"styled-components\";\n\nimport { skyblue, cerulean } from \"../colors\";\n\n// weird hack to make prettier recognize css in createGlobalStyle and format it\nconst styled = {\n div: createGlobalStyle,\n};\n\nconst Style = styled.div`\n * {\n box-sizing: border-box;\n }\n\n body {\n margin: 0;\n font-family: \"proxima-nova\", sans-serif;\n font-weight: 400;\n font-style: normal;\n }\n .ant-layout {\n background: white;\n }\n .ant-layout-header {\n background: white;\n box-shadow: 0 1px 4px rgb(0 0 0 / 12%);\n padding: 0;\n position: sticky;\n top: 0;\n z-index: 9;\n }\n .ant-layout-footer {\n padding: 0 24px 12px;\n background: white;\n margin-bottom: 1rem;\n }\n .ant-card-bordered {\n margin-bottom: 20px;\n }\n .tag-icon {\n width: 12px;\n margin-right: 5px;\n }\n .ant-card-meta-detail > div:not(:last-child) {\n margin-bottom: 0;\n }\n .share-buttons {\n margin-left: auto;\n }\n\n /* Share icons */\n\n .resp-sharing-button__link,\n .resp-sharing-button__icon {\n display: inline-block;\n }\n\n .resp-sharing-button__link {\n text-decoration: none;\n color: #fff;\n margin-left: 0.3em;\n }\n\n .resp-sharing-button {\n transition: 25ms ease-out;\n padding: 0.25em 0.5em;\n font-family: Helvetica Neue, Helvetica, Arial, sans-serif;\n }\n\n .resp-sharing-button__icon svg {\n width: 1em;\n height: 1em;\n margin-right: 0.4em;\n vertical-align: top;\n }\n\n .resp-sharing-button--small svg {\n margin: 0;\n vertical-align: middle;\n }\n\n .resp-sharing-button__icon--solid,\n .resp-sharing-button__icon--solidcircle {\n fill: #fff;\n stroke: none;\n }\n\n .resp-sharing-button--facebook {\n background-color: #6e88c9;\n border-color: #6e88c9;\n }\n\n .resp-sharing-button--facebook:hover,\n .resp-sharing-button--facebook:active {\n background-color: #536697;\n border-color: #536697;\n }\n\n .resp-sharing-button--twitter {\n background-color: #60c3f1;\n border-color: #60c3f1;\n }\n\n .resp-sharing-button--twitter:hover,\n .resp-sharing-button--twitter:active {\n background-color: #4892b5;\n border-color: #4892b5;\n }\n\n .resp-sharing-button--linkedin {\n background-color: #569ad6;\n border-color: #569ad6;\n }\n\n .resp-sharing-button--linkedin:hover,\n .resp-sharing-button--linkedin:active {\n background-color: #4173a1;\n border-color: #4173a1;\n }\n\n .ant-upload.ant-upload-drag p.ant-upload-drag-icon .anticon {\n color: ${skyblue};\n }\n\n .ant-upload.ant-upload-drag:not(.ant-upload-disabled):hover {\n border-color: ${skyblue};\n }\n\n .spinner {\n margin-top: 24px;\n text-align: center;\n }\n\n .ant-pagination-jump-prev\n .ant-pagination-item-container\n .ant-pagination-item-link-icon,\n .ant-pagination-jump-next\n .ant-pagination-item-container\n .ant-pagination-item-link-icon {\n color: ${cerulean};\n }\n .ant-pagination-prev:focus .ant-pagination-item-link,\n .ant-pagination-next:focus .ant-pagination-item-link,\n .ant-pagination-prev:hover .ant-pagination-item-link,\n .ant-pagination-next:hover .ant-pagination-item-link {\n color: ${cerulean};\n border-color: ${cerulean};\n }\n .ant-pagination-item:focus,\n .ant-pagination-item:hover {\n border-color: ${cerulean};\n }\n .ant-pagination-item:focus a,\n .ant-pagination-item:hover a {\n color: ${cerulean};\n }\n .ant-pagination-item-active,\n .ant-pagination-item-active a,\n .ant-pagination-item-active a:hover,\n .ant-pagination-item-active:focus,\n .ant-pagination-item-active:hover {\n border-color: ${cerulean};\n color: ${cerulean};\n }\n .ant-steps-vertical\n > .ant-steps-item:not(:last-child)\n > .ant-steps-item-container\n > .ant-steps-item-tail {\n left: 50%;\n }\n .ant-steps-vertical > .ant-steps-item .ant-steps-item-icon {\n position: absolute;\n left: 50%;\n margin-left: -15px;\n }\n .ant-steps-item-title {\n padding-right: 0;\n }\n .ant-steps-item-wait\n > .ant-steps-item-container\n > .ant-steps-item-content\n > .ant-steps-item-description {\n color: black;\n }\n .ant-steps-item-wait\n > .ant-steps-item-container\n > .ant-steps-item-content\n > .ant-steps-item-title {\n text-transform: uppercase;\n }\n\n .ant-btn-primary:not([disabled]) {\n background: ${skyblue};\n border-color: ${skyblue};\n }\n`;\n\nexport default Style;\n","export default __webpack_public_path__ + \"static/media/logo.21a0a861.svg\";","import axios from \"axios\";\n\nimport { API_URL } from \"../env\";\nimport { DocumentUploadFormData, IUser, PaginatedDocuments } from \"../types\";\n\nconst client = axios.create({\n baseURL: API_URL,\n});\n\nlet oauthToken = \"\";\n\nconst api = {\n setOauthToken(token: string): void {\n oauthToken = token;\n },\n async oauth(code: string, state: string): Promise {\n const { data } = await client.post(`/users/oauth`, { code, state });\n\n return data;\n },\n async listDocuments(\n page: number,\n pageSize: number\n ): Promise {\n const { data } = await client.get(\n `/documents?page=${page}&pageSize=${pageSize}`,\n {\n headers: getAuthHeader(),\n }\n );\n\n return data;\n },\n async createAndSend(form: DocumentUploadFormData): Promise {\n const formData = new FormData();\n formData.append(\"file\", form.file);\n formData.append(\"title\", form.title);\n formData.append(\"message\", form.message || \"\");\n form.signers.forEach((signer) => {\n formData.append(\"signers[]\", JSON.stringify(signer));\n });\n\n const { data } = await client.post(`/documents`, formData, {\n headers: getAuthHeader(),\n });\n\n return data;\n },\n};\n\nfunction getAuthHeader(): { Authorization: string } {\n return { Authorization: `Bearer ${oauthToken}` };\n}\n\nexport default api;\n","export const CHAIN_ID = Number(process.env.REACT_APP_CHAIN_ID || \"1\");\nexport const API_URL = process.env.REACT_APP_API_URL as string;\nexport const RPC_URL = process.env.REACT_APP_RPC_URL as string;\n","import { useContext } from \"react\";\n\nimport { AuthContext } from \"../contexts\";\n\nexport default function useAuthContext() {\n const context = useContext(AuthContext);\n\n return context;\n}\n","import { useEffect, useMemo } from \"react\";\nimport { message } from \"antd\";\n\nimport { apiService } from \"../services\";\nimport useAuthContext from \"./useAuthContext\";\nimport { PaginatedDocuments } from \"../types\";\n\nexport default function useApi() {\n const { token, onAuthenticated, onLogout } = useAuthContext();\n\n useEffect(() => {\n apiService.setOauthToken(token);\n }, [token]);\n\n const api = useMemo(() => {\n return {\n ...apiService,\n async oauth(code: string, state: string): Promise {\n try {\n const res = await apiService.oauth(code, state);\n onAuthenticated(res);\n apiService.setOauthToken(res.oauthToken);\n return res.email;\n } catch (err) {\n onLogout();\n message.error(err.message);\n return \"\";\n }\n },\n listDocuments: with401Handler(apiService.listDocuments),\n createAndSend: with401Handler(apiService.createAndSend),\n };\n\n function with401Handler(fn: T): T {\n const wrapped: any = async (...args: any[]) => {\n try {\n const res = await (fn as any)(...args);\n return res;\n } catch (err) {\n if (err?.response?.status === 401) {\n onLogout();\n message.error(\"Your session has expired. Please log in again.\");\n } else {\n message.error(err.message);\n }\n return {} as PaginatedDocuments;\n }\n };\n\n return wrapped as T;\n }\n }, [onAuthenticated, onLogout]);\n\n return api;\n}\n","import { useState, useEffect, useCallback } from \"react\";\n\nimport { DocumentSummary, PaginatedDocuments, PaginationMeta } from \"../types\";\nimport useApi from \"./useApi\";\n\ninterface IDocumentList extends PaginatedDocuments {\n loading: boolean;\n onPaginationChange: (\n config: Pick\n ) => void;\n}\n\nconst CONFIG_STORAGE_KEY = \"documentListCfg\";\nconst DEFAULT_PAGE_SIZE = 25;\n\nfunction useDocumentList(config?: Partial): IDocumentList {\n const { listDocuments } = useApi();\n const [items, setItems] = useState([]);\n const [page, setPage] = useState(config?.page || 1);\n const [pageSize, setPageSize] = useState(\n config?.pageSize || DEFAULT_PAGE_SIZE\n );\n const [total, setTotal] = useState(0);\n const [loading, setLoading] = useState(false);\n\n const restoreConfig = useCallback((): PaginationMeta => {\n const {\n page: storedPage = 1,\n pageSize: storedPageSize = DEFAULT_PAGE_SIZE,\n } = JSON.parse(\n localStorage.getItem(CONFIG_STORAGE_KEY) || \"{}\"\n ) as PaginationMeta;\n setPage(storedPage);\n setPageSize(storedPageSize);\n\n return { page: storedPage, pageSize: storedPageSize, total: 0 };\n }, []);\n\n const storeConfig = useCallback((params: Partial) => {\n localStorage.setItem(CONFIG_STORAGE_KEY, JSON.stringify(params));\n }, []);\n\n const fetchData = useCallback(\n async (params: Pick) => {\n setLoading(true);\n setPage(params.page);\n setPageSize(params.pageSize);\n storeConfig(params);\n try {\n const res = await listDocuments(params.page, params.pageSize);\n setItems(res.items);\n setTotal(res.meta.total);\n } finally {\n setLoading(false);\n }\n },\n [listDocuments, storeConfig]\n );\n\n useEffect(() => {\n const cfg = restoreConfig();\n fetchData(cfg);\n // only run this once\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [restoreConfig]);\n\n return {\n loading,\n items,\n meta: {\n page,\n pageSize,\n total,\n },\n onPaginationChange: fetchData,\n };\n}\n\nexport default useDocumentList;\n","import { useCallback, useContext, useEffect, useState } from \"react\";\n\nimport { HeaderContentContext } from \"../contexts\";\n\nexport default function useHeaderContent() {\n const { content, setContent } = useContext(HeaderContentContext);\n const [defaultContent, setDefaultContent] = useState(null);\n\n const resetContent = useCallback(() => {\n setContent(defaultContent);\n }, [defaultContent, setContent]);\n\n useEffect(() => {\n resetContent();\n }, [resetContent]);\n\n return { content, setContent, resetContent, setDefaultContent };\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst FlexSpacer = () => ;\n\nconst Spacer = styled.div`\n flex-grow: 1;\n`;\n\nexport default FlexSpacer;\n","import React, { useEffect, useMemo } from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport { Layout, Menu, Dropdown, Space } from \"antd\";\nimport { DownOutlined } from \"@ant-design/icons\";\n\nimport logo from \"../../img/logo.svg\";\nimport { useAuthContext, useHeaderContent } from \"../../hooks\";\nimport FlexSpacer from \"../FlexSpacer\";\n\nfunction Header() {\n const { isAuthenticated, email, onLogout } = useAuthContext();\n const { content, setDefaultContent, resetContent } = useHeaderContent();\n const location = useLocation();\n\n const defaultContent = useMemo(() => {\n const menu = (\n \n \n Logout\n \n \n );\n\n return (\n isAuthenticated && (\n \n \n {email} \n \n \n )\n );\n }, [email, isAuthenticated, onLogout]);\n\n useEffect(() => {\n setDefaultContent(defaultContent);\n }, [defaultContent, setDefaultContent]);\n\n useEffect(() => {\n resetContent();\n }, [resetContent, location]);\n\n return (\n \n \n \n \n \n \"logo\"\n \n \n \n \n {content}\n \n \n );\n}\n\nconst Logo = styled.div`\n width: 150px;\n cursor: pointer;\n`;\n\nconst LoginButton = styled.div`\n cursor: pointer;\n text-align: right;\n font-size: 16px;\n line-height: 20px;\n margin-left: auto;\n`;\n\nconst HeaderContent = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n width: 100%;\n max-width: 1170px;\n padding-right: 15px;\n padding-left: 15px;\n margin: 0 auto;\n`;\n\nexport default Header;\n","export interface IUser {\n email: string;\n oauthToken: string;\n oauthTokenExpirationDate: string;\n}\n\nexport enum DocumentStatus {\n OUT_FOR_SIGNATURE = \"OUT_FOR_SIGNATURE\",\n AWAITING_MY_SIGNATURE = \"AWAITING_MY_SIGNATURE\",\n COMPLETED = \"COMPLETED\",\n DECLINED = \"DECLINED\",\n}\n\nexport interface PaginatedDocuments {\n meta: PaginationMeta;\n items: DocumentSummary[];\n}\n\nexport interface PaginationMeta {\n page: number;\n pageSize: number;\n total: number;\n}\n\nexport interface DocumentSummary {\n documentUid: string;\n title: string;\n status: DocumentStatus;\n createdAt: string;\n signatures: SignatureSummary[];\n}\n\nexport interface SignatureSummary {\n signatureUid: string;\n ip: string;\n email: string;\n name: string;\n completed: boolean;\n payload?: string;\n txHash: string;\n signedAt: string;\n}\n\nexport interface DocumentUploadFormData {\n file: File;\n title: string;\n message?: string;\n signers: {\n name: string;\n email_address: string;\n }[];\n}\n","/* eslint-disable jsx-a11y/no-static-element-interactions */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport React, { useCallback, useMemo } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport { Table, Layout, Typography, Badge, Tooltip, Button } from \"antd\";\nimport { TablePaginationConfig } from \"antd/lib/table\";\nimport ReactTimeAgo from \"react-time-ago\";\nimport { FormOutlined } from \"@ant-design/icons\";\n\nimport { skyblue, applegreen, cerise } from \"../colors\";\nimport { useDocumentList } from \"../../hooks\";\nimport { DocumentStatus, DocumentSummary, SignatureSummary } from \"../../types\";\nimport FlexSpacer from \"../FlexSpacer\";\n\nconst { Title, Text } = Typography;\n\nconst columns = [\n {\n title: HelloSign status,\n dataIndex: \"status\",\n render: (status: DocumentStatus) => {\n let formattedStatus: React.ReactNode = status;\n\n switch (status) {\n case DocumentStatus.AWAITING_MY_SIGNATURE: {\n formattedStatus = (\n
\n AWAITING MY SIGNATURE\n
\n );\n break;\n }\n case DocumentStatus.COMPLETED: {\n formattedStatus = (\n
\n COMPLETED\n
\n );\n break;\n }\n case DocumentStatus.OUT_FOR_SIGNATURE: {\n formattedStatus = (\n
\n OUT FOR SIGNATURE\n
\n );\n break;\n }\n default: {\n formattedStatus = status;\n }\n }\n\n return (\n \n \n window.open(\"https://app.hellosign.com/home/manage\", \"_blank\")\n }\n >\n {formattedStatus}\n \n \n );\n },\n },\n {\n title: CasperSign signatures,\n dataIndex: \"signatures\",\n render: (signatures: SignatureSummary[], row: DocumentSummary) => {\n const completedCount = signatures.filter((sig) => sig.completed).length;\n const totalCount = signatures.length;\n const isFullyCompleted = completedCount === totalCount;\n\n return (\n \n \n window.open(\n `https://validate.caspersign.io?hash=${row.documentUid}`\n )\n }\n >\n {completedCount} / {totalCount}\n \n \n );\n },\n },\n {\n title: Title,\n dataIndex: \"title\",\n },\n {\n title: Date,\n dataIndex: \"createdAt\",\n render: (createdAt: string) => ,\n },\n];\n\nfunction DocumentList() {\n const { loading, items, meta, onPaginationChange } = useDocumentList();\n const history = useHistory();\n\n const handleCreateDocument = useCallback(() => {\n history.push(\"/documents/new\");\n }, [history]);\n\n const handleTableChange = useCallback(\n ({ pageSize, current }: any) => {\n onPaginationChange({ page: current, pageSize });\n },\n [onPaginationChange]\n );\n\n const paginationConfig: TablePaginationConfig = useMemo(\n () => ({\n current: meta.page,\n pageSize: meta.pageSize,\n total: meta.total,\n pageSizeOptions: [\"10\", \"25\", \"50\", \"100\"],\n showSizeChanger: true,\n showTotal: (total, [from, to]) => `${from}-${to} of ${total}`,\n }),\n [meta]\n );\n\n return (\n \n
\n \n Documents\n \n \n \n \n
\n
\n );\n}\n\nconst Main = styled.div`\n width: 100%;\n max-width: 1170px;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n`;\n\nconst HeaderTitle = styled.div`\n margin: 64px 0 12px;\n display: flex;\n flex-direction: row;\n align-items: center;\n`;\n\nexport default DocumentList;\n","export default __webpack_public_path__ + \"static/media/shield.0da6afe9.svg\";","import React from \"react\";\nimport { Redirect } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport { Card, Layout, Typography, Button, Space, Steps } from \"antd\";\n\nimport shield from \"../../img/shield.svg\";\nimport { useAuthContext } from \"../../hooks\";\nimport { skyblue } from \"../colors\";\n\nconst { Title, Text } = Typography;\nconst { Step } = Steps;\n\nfunction Signup() {\n const { isAuthenticated } = useAuthContext();\n\n return (\n \n
\n {isAuthenticated && }\n \n \n \n \"shield\"\n \n \n Immutable Document Signatures on the Blockchain\n \n \n Instantly connect HelloSign with the Casper Blockchain to ensure\n the integrity of your documents and make them publicly verifiable.\n \n \n Connect\n \n \n \n \n How it works\n \n \n \n \n \n \n
\n
\n );\n}\n\nconst ShieldIcon = styled.div`\n display: block;\n margin: 0 auto 10px;\n width: 75px;\n`;\n\nconst Main = styled.div`\n width: 100%;\n text-align: center;\n max-width: 1170px;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n`;\n\nexport default Signup;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { Layout, Typography, Divider } from \"antd\";\n\nconst { Text, Link } = Typography;\n\nfunction Footer() {\n return (\n \n \n \n
\n \n Powered by{\" \"}\n \n CasperLabs\n \n \n
\n
\n \n
\n \n \n \n \n
\n
\n \n \n
\n \n \n \n \n
\n \n \n \n
\n \n \n \n \n
\n \n \n \n
\n
\n );\n}\n\nconst FooterContent = styled.div`\n display: flex;\n width: 100%;\n max-width: 1170px;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n text-align: center;\n`;\n\nexport default Footer;\n","/* eslint-disable react/require-default-props */\n/* eslint-disable react/jsx-props-no-spreading */\nimport React from \"react\";\nimport { Route, Redirect } from \"react-router-dom\";\n\nimport { useAuthContext } from \"../../hooks\";\n\ninterface IProps {\n children: React.ReactNode;\n exact?: boolean;\n path?: string;\n}\n\nexport default function PrivateRoute({ children, ...rest }: IProps) {\n const { isAuthenticated } = useAuthContext();\n\n return (\n \n isAuthenticated ? (\n children\n ) : (\n \n )\n }\n />\n );\n}\n","/* eslint-disable react/jsx-props-no-spreading */\nimport React from \"react\";\nimport { Route, Redirect } from \"react-router-dom\";\n\nexport default function FallbackRoute({ ...rest }) {\n return (\n (\n \n )}\n />\n );\n}\n","/* eslint-disable react/require-default-props */\nimport React from \"react\";\nimport { Spin } from \"antd\";\nimport { LoadingOutlined } from \"@ant-design/icons\";\n\nimport { skyblue } from \"../colors\";\n\ninterface IProps {\n size?: number;\n className?: string;\n}\n\nfunction Spinner({ size = 24, className }: IProps) {\n const antIcon = (\n \n );\n\n return ;\n}\n\nexport default Spinner;\n","import React, { useEffect, useState } from \"react\";\nimport { Typography } from \"antd\";\nimport { useHistory } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport { useQueryParam } from \"use-query-params\";\n\nimport { useApi } from \"../../hooks\";\nimport Spinner from \"./Spinner\";\n\nconst { Title } = Typography;\n\nexport default function Oauth() {\n const { oauth } = useApi();\n const [oauthCode] = useQueryParam(\"code\");\n const [oauthState] = useQueryParam(\"state\");\n const [done, setDone] = useState(false);\n const history = useHistory();\n\n useEffect(() => {\n if (oauthCode && oauthState && !done) {\n auth();\n }\n\n async function auth() {\n setDone(true);\n try {\n await oauth(oauthCode, oauthState);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e);\n }\n history.push(\"/documents\");\n }\n }, [done, history, oauth, oauthCode, oauthState]);\n\n return ;\n}\n\nfunction Authenticating() {\n return (\n \n Authenticating...\n
\n \n
\n );\n}\n\nconst Content = styled.div`\n padding: 50px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n`;\n","/* eslint-disable react/jsx-props-no-spreading */\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport { Card, Typography, Button, Input, Upload, Form, message } from \"antd\";\nimport { InboxOutlined, PlusOutlined, CloseOutlined } from \"@ant-design/icons\";\n\nimport { DocumentUploadFormData } from \"../../types\";\nimport { useApi, useAuthContext, useHeaderContent } from \"../../hooks\";\n\nconst { Title, Text } = Typography;\n\nfunction CreateDocument() {\n const history = useHistory();\n const [form] = Form.useForm();\n const { email } = useAuthContext();\n const { setContent } = useHeaderContent();\n const { createAndSend } = useApi();\n const [addMe, setAddMe] = useState(false);\n const [loading, setLoading] = useState(false);\n const [extraSignersCount, setExtraSignersCount] = useState(0);\n const [invalidFile, setInvalidFile] = useState(false);\n const [fileName, setFileName] = useState(\"\");\n\n const meName = useMemo(() => {\n let name = email.split(\"@\")[0];\n name = name.split(\".\").join(\" \");\n name = name.split(\"+\").join(\" \");\n name = name\n .split(\" \")\n .map((s) => s.charAt(0).toUpperCase() + s.slice(1))\n .join(\" \");\n return name;\n }, [email]);\n\n const handleAddMe = useCallback(() => {\n setAddMe(true);\n }, []);\n const handleDontAddMe = useCallback(() => {\n setAddMe(false);\n }, []);\n\n const handleSubmit = useCallback(async () => {\n setLoading(true);\n try {\n const fields = await form.validateFields();\n const data: DocumentUploadFormData = {\n file: fields.file,\n signers: fields.signers,\n title: fields.title,\n message: fields.message,\n };\n if (fields.meName) {\n data.signers.unshift({\n name: fields.meName,\n email_address: fields.meEmail,\n });\n }\n const res = await createAndSend(fields);\n message.success(\"Sent document for signing\");\n form.resetFields();\n history.push(\"/documents\");\n return res;\n } finally {\n setLoading(false);\n }\n }, [createAndSend, form, history]);\n\n const handleGoBack = useCallback(() => {\n history.goBack();\n }, [history]);\n\n const headerContent = useMemo(\n () => (\n \n \n Back\n \n \n Send for signature\n \n \n ),\n [handleGoBack, handleSubmit, loading]\n );\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const addFirstElement = useCallback(\n (() => {\n let done = false;\n return (fields: any[], add: (name?: string, index?: number) => void) => {\n if (!done && fields.length === 0) {\n done = true;\n setTimeout(() => add());\n }\n };\n })(),\n []\n );\n\n const handleDragEnterFile = useCallback((event) => {\n const fileType = event.dataTransfer?.items[0]?.type;\n setInvalidFile(fileType !== \"application/pdf\");\n }, []);\n\n const getFileFromEvent = useCallback((e) => {\n if (!e.file.status) {\n setFileName(e.file.name);\n }\n return e.file;\n }, []);\n\n const handleRemoveFileName = useCallback(() => {\n setFileName(\"\");\n }, []);\n\n useEffect(() => {\n setContent(headerContent);\n }, [headerContent, setContent]);\n\n return (\n
\n
\n \n What needs to be signed?\n Select document\n \n \n \n \n false}\n disabled={loading}\n onRemove={handleRemoveFileName}\n >\n

\n \n

\n

\n {invalidFile\n ? \"Only PDF files are accepted!\"\n : fileName || \"Upload a PDF document here\"}\n

\n

\n {!fileName &&\n \"Upload or drop your signed document here in the dropzone\"}\n

\n \n
\n \n
\n \n \n \n \n
\n \n Who needs to sign?\n Add signers\n {addMe && (\n \n \n \n \n \n \n \n {extraSignersCount > 0 && (\n \n )}\n \n )}\n \n {(fields, { add, remove }) => (\n <>\n {addFirstElement(fields, add)}\n {extraSignersCount !== fields.length &&\n setTimeout(() => setExtraSignersCount(fields.length))}\n {fields.map((field, i) => (\n \n \n \n \n \n \n \n {(extraSignersCount > 1 || addMe) && (\n remove(i)}\n />\n )}\n \n ))}\n {\n add();\n }}\n className=\"addButton\"\n icon={}\n >\n Add another signer\n \n \n )}\n \n {!addMe && (\n }\n onClick={handleAddMe}\n >\n Add me as a signer\n \n )}\n \n \n \n \n
\n
\n );\n}\n\nconst Main = styled.div`\n width: 100%;\n max-width: 1170px;\n padding: 32px 15px;\n margin-right: auto;\n margin-left: auto;\n\n .subtitle {\n display: inline-block;\n color: gray;\n margin-bottom: 15px;\n }\n\n .addButton {\n display: block;\n width: 100%;\n margin-bottom: 16px;\n text-align: left;\n }\n\n .invalidFile {\n .ant-upload-drag-icon .anticon {\n transition: color 0.3s ease;\n color: red !important;\n }\n .ant-form-item .ant-upload.ant-upload-drag {\n transition: background-color 0.3s ease;\n background-color: mistyrose;\n }\n }\n`;\n\nconst What = styled.section``;\n\nconst Who = styled.section``;\n\nconst Signer = styled.div`\n display: flex;\n flex-direction: row;\n background: #fafafa;\n margin-bottom: 16px;\n position: relative;\n\n .ant-row {\n flex-basis: 50%;\n padding: 8px 16px;\n }\n\n .removeSigner {\n position: absolute;\n top: 8px;\n right: 8px;\n cursor: pointer;\n font-size: 16px;\n color: darkgrey;\n\n &:hover {\n color: gray;\n }\n }\n`;\n\nconst CreateDocButtons = styled.div`\n .ant-btn:not(:last-child) {\n margin-right: 15px;\n }\n`;\n\nexport default CreateDocument;\n","import React from \"react\";\nimport { Layout as AntLayout } from \"antd\";\nimport { BrowserRouter as Router, Switch, Route } from \"react-router-dom\";\n\nimport Header from \"../Header\";\nimport DocumentList from \"./DocumentList\";\nimport Signup from \"./Signup\";\nimport Footer from \"../Footer\";\nimport PrivateRoute from \"./PrivateRoute\";\nimport FallbackRoute from \"./FallbackRoute\";\nimport Oauth from \"./Oauth\";\nimport CreateDocument from \"./CreateDocument\";\n\nfunction Main() {\n return (\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n