{"version":3,"sources":["theme/index.js","theme/global_style.ts","config/constants.ts","utils/types.ts","components/common/layout/body.component.tsx","state/search.context.tsx","components/common/images/logo.component.tsx","components/common/images/lens.component.tsx","components/common/images/close.component.tsx","components/search.component.tsx","components/checkboxFilter.component.tsx","config/networks.ts","components/common/icons.tsx","components/networkSwitcher.component.tsx","utils/urls.ts","components/common/layout/header.component.tsx","components/common/layout/mainWrapper.component.tsx","utils/deals.ts","utils/remoteData.ts","components/noDealsAvailableMessage.component.tsx","components/dealsErrorMessage.component.tsx","components/dealStatusIcon.component.tsx","components/copyText.component.tsx","components/common/images/copy.component.tsx","components/dealItem.component.tsx","components/modalWrapper.component.tsx","components/button.component.tsx","components/shareDeal.component.tsx","components/common/images/share.component.tsx","utils/dates.ts","components/dealDetailModal.component.tsx","components/dealsList.component.tsx","hooks/useEffectOnce.ts","components/common/layout/table.component.tsx","components/stats.component.tsx","hooks/useStats.hook.ts","components/deals.component.tsx","hooks/useDeals.hook.ts","components/main.component.tsx","components/common/images/top.component.tsx","components/backToTop.component.tsx","components/gitHubCorners.component.tsx","utils/ga-tag.ts","App.tsx","hooks/useAnalytics.ts","serviceWorker.ts","index.tsx"],"names":["theme","fonts","defaultSize","fontFamily","fontFamilyCode","colors","mainBodyBackgroundLeft","mainBodyBackgroundRight","header","backgroundImage","boxShadow","height","color","themeBreakPoints","lg","md","sm","xl","xs","xxl","xxxl","paddings","mainPadding","mainContainer","maxWidth","textfield","width","borderRadius","fontSize","fontWeight","paddingHorizontal","paddingVertical","textAlign","backgroundColor","placeholderColor","hoverBackgroundColor","hoverColor","focusColor","modalStyle","content","borderColor","borderStyle","borderWidth","bottom","display","flexDirection","flexGrow","left","margin","overflow","padding","position","right","top","overlay","alignItems","justifyContent","zIndex","GlobalStyle","createGlobalStyle","props","console","info","process","DealStatus","DOCUMENT_TITLE","REACT_APP_TITLE","DOCUMENT_DESCRIPTION","REACT_APP_DESCRIPTION","PAGE_SIZE","Number","PAGE_INDEX_START","REPOSITORY_URL","REACT_APP_REPOSITORY_URL","BodyWrapper","styled","div","Body","children","restProps","SEARCH_CONTEXT_DEFAULT_VALUE","page","search","query","activeFilter","verifiedFilter","setCurrentPage","setCurrentSearch","setCurrentQuery","setCurrentActiveFilter","setCurrentVerifiedFilter","SearchContext","React","createContext","SearchProvider","useState","setPage","setSearch","setActiveFilter","setVerifiedFilter","setQuery","value","useCallback","sort","Provider","useSearchContext","useContext","Svg","svg","LogoWrapper","Logo","history","useHistory","onClick","push","title","fill","viewBox","xmlns","id","transform","data-name","d","fillRule","opacity","LensWrapper","Lens","className","stroke","strokeWidth","cx","cy","r","CloseWrapper","Close","SearchWrapper","Input","input","LensImageWrapper","CloseImageWrapper","Search","searchValueLocal","setSearchValueLocal","useEffect","onSearch","onClear","onChange","event","searchValueLocalSanitized","target","replace","onKeyPress","key","name","type","placeholder","Item","CheckedBox","style","paddingRight","UncheckedBox","CheckboxFilter","networks","url","label","DownArrowFilledIcon","rest","DropdownWrapper","SelectedWrapper","WrappedDownArrowFilledIcon","OptionWrapper","li","MenuWrapper","ul","AWrapper","a","DropdowItem","opts","href","network","rel","NetworkSwitcher","open","setOpen","setNetwork","found","parsedQuery","array","window","location","split","result","forEach","str","decodedKey","decodeURIComponent","parseQuery","hasOwnProperty","find","n","arr","host","networkFromHost","length","options","filter","map","CheckboxFilterWrapper","NetworkSwitcherWrapper","Header","MainWrapper","DealTitles","Types","truncateStringInTheMiddle","strPositionStart","strPositionEnd","minTruncatedLength","substr","e","error","fetchDeals","fetch","response","json","data","deals","Deals","formattedDeals","deal","DealInfo","Proposal","PieceCID","MinerID","Client","PieceSize","VerifiedDeal","StartEpoch","EndEpoch","StoragePricePerEpoch","ProviderCollateral","ClientCollateral","Label","StartEpochAsDate","EndEpochAsDate","DealID","State","SectorStartEpoch","Active","Unknown","endEpoch","Date","Expired","fetchDealDetails","dealId","fetchDealStats","getDealsCsvUrl","pageSize","isSuccess","rd","_type","success","isReloading","reloading","RemoteData","notAsked","loading","failure","is","hasData","getDataOr","defaultValue","Title","NoDealsAvailableMessage","DealsErrorMessage","StatusActiveCSS","css","StatusFaultCSS","StatusRecoveryCSS","StatusUnknowCSS","StatusExpiredCSS","DealStatusCSS","status","Fault","Recovery","getStatusTypeStyles","Wrapper","DealStatusIcon","CopyWrapper","CopyImageWrapper","src","alt","CopyText","text","stopPropagation","TR","tr","TD","td","CopyTextWrapper","MinerSearch","span","TDFirst","TDSecond","TDThird","TDFour","TDFive","FileCidColumn","Span","DealItem","minerId","ModalWrapper","withTheme","onRequestClose","Modal","setAppElement","ariaHideApp","shouldCloseOnOverlayClick","button","Button","ShareWrapper","ShareImageWrapper","ShareDeal","origin","formatDate","dateAsIsoString","Intl","DateTimeFormat","year","month","day","hour","minute","format","ModalTitle","Footer","Dots","SpanTitle","SpanValue","DealDetailModal","onClose","isOpen","dealDetails","setDealDetails","clientAddress","useMemo","details","undefined","run","PayloadCID","ClientAddress","DealsList","openModal","isModalOpen","setModalOpen","clickedDeal","setClickedDeal","index","useEffectOnce","effect","effectFn","useRef","destroyFn","effectCalled","rendered","setVal","current","val","Table","table","TH","th","THead","thead","THButton","StatValue","DealStats","stats","setStats","ignore","startFetching","useStats","numberOfUniqueCIDs","numberOfUniqueProviders","numberOfUniqueClients","totalDeals","totalDealSize","prettyBytes","latestHeight","BlockWrapper","THFirst","THSecond","THThird","THFourth","THFive","ShowMoreButton","useParams","searchFromParams","dealIdFromParams","order","setOrder","setDeals","moreDeals","setMoreDeals","encodedSearch","encodeURIComponent","currentDeals","concat","useDealsV2","showMore","handleCsvDownload","showMoreButton","disabled","marginBottom","data-testid","visible","onEnter","Main","exact","path","component","to","Top","ScrollToTopWrapper","BackToTop","showScroll","setShowScroll","useEventListener","pageYOffset","scrollTo","behavior","GitHubCorners","aria-label","border","transformOrigin","fetchGaTag","AppChild","App","gaTagId","setGaTagId","gaTag","useAnalytics","gtmParams","state","Boolean","hostname","match","ReactDOM","render","StrictMode","document","getElementById","navigator","serviceWorker","ready","then","registration","unregister","catch","message"],"mappings":"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","file":"static/js/main.7906e9c3.chunk.js","sourcesContent":["const theme = {\n fonts: {\n defaultSize: '14px',\n fontFamily: `'Poppins'`,\n fontFamilyCode: `'Poppins', sans-serif`,\n },\n colors: {\n mainBodyBackgroundLeft: '#0A111E',\n mainBodyBackgroundRight: '#1A283E',\n },\n header: {\n backgroundImage: 'linear-gradient(to right, #0A111E, #1A283E)',\n boxShadow: 'none',\n height: '163px',\n color: '#37474F',\n },\n themeBreakPoints: {\n lg: '992px',\n md: '768px',\n sm: '480px',\n xl: '1024px',\n xs: '320px',\n xxl: '1280px',\n xxxl: '1366px',\n },\n paddings: {\n mainPadding: '15px',\n },\n mainContainer: {\n maxWidth: '586px',\n },\n textfield: {\n // Common\n height: '56px',\n width: '744px',\n borderRadius: '28px',\n fontFamily: 'Poppins',\n fontSize: '14px',\n fontWeight: '500',\n paddingHorizontal: '18px',\n paddingVertical: '1px',\n textAlign: 'left',\n backgroundColor: 'rgb(207,224,255, 0.1)',\n\n // Filled\n color: '#ffffff',\n\n // Placeholder\n placeholderColor: 'rgb(207,224,255,0.5)',\n\n // On Hover\n hoverBackgroundColor: 'rgb(171,201,255, 0.2)',\n hoverColor: 'rgb(207,224,255, 0.2)',\n\n // Focus\n focusColor: '#ffffff',\n\n },\n modalStyle: {\n content: {\n backgroundColor: '#243042',\n borderColor: 'none',\n borderRadius: '16px',\n borderStyle: 'none',\n borderWidth: 'none',\n bottom: 'auto',\n boxShadow: '0 16px 80px 0 rgba(0, 0, 0, 0.25',\n display: 'flex',\n flexDirection: 'column',\n flexGrow: '0',\n height: 'fit-content',\n left: 'auto',\n margin: 'auto 0',\n overflow: 'hidden',\n padding: '40px 48px',\n position: 'relative',\n right: 'auto',\n top: 'auto',\n width: '408px',\n },\n overlay: {\n alignItems: 'unset',\n backgroundColor: 'rgb(7,11,17, 0.6)',\n display: 'flex',\n justifyContent: 'center',\n overflow: 'auto',\n padding: '10px',\n zIndex: '12345',\n },\n },\n}\n\nexport default theme\n","import { createGlobalStyle } from 'styled-components'\n\nimport theme from './'\n\ntype ThemeType = typeof theme\n\nexport const GlobalStyle = createGlobalStyle<{ theme: ThemeType }>`\n html body {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n\n background-image: linear-gradient(to right, ${(props) =>\n props.theme.colors.mainBodyBackgroundLeft}, ${(props) =>\n props.theme.colors.mainBodyBackgroundRight});\n font-family: ${(props) => props.theme.fonts.fontFamily};\n font-size: ${(props) => props.theme.fonts.defaultSize};\n }\n\n code {\n font-family: ${(props) => props.theme.fonts.fontFamilyCode};\n }\n\n body,\n html,\n #root {\n height: 100vh;\n width: 100%;\n } \n`\n","/*eslint-disable*/\nconsole.info('process.env.REACT_APP_FILECOIN_CID_CHECKER_API', process.env.REACT_APP_FILECOIN_CID_CHECKER_API)\n/*eslint-enable*/\n\nexport const FILECOIN_CID_CHECKER_API: string =\n process.env.REACT_APP_FILECOIN_CID_CHECKER_API || '/api'\n\nexport const DOCUMENT_TITLE: string = process.env.REACT_APP_TITLE || 'FileCoin CID Checker'\n\nexport const DOCUMENT_DESCRIPTION: string =\n process.env.REACT_APP_DESCRIPTION ||\n 'A website and API service that can list all CIDs along with their current status in the latest state tree'\n\nexport const PAGE_SIZE = Number(process.env.REACT_APP_PAGE_SIZE || 20)\n\nexport const PAGE_INDEX_START = Number(process.env.REACT_APP_PAGE_INDEX_START || 1)\n\nexport const REPOSITORY_URL: string =\n process.env.REACT_APP_REPOSITORY_URL || 'https://github.com/protofire/filecoin-CID-checker'\n","export enum DealStatus {\n Active = 'Active',\n Fault = 'Fault',\n Recovery = 'Recovery',\n Unknown = 'Unknown',\n Expired = 'Expired',\n}\n\nexport const DealValueNotAvailable = 'N/A'\n\nexport interface DealValue {\n PieceCID: string\n DealID: number\n MinerID: string\n Client: string\n PieceSize: number\n VerifiedDeal: boolean\n StartEpoch: number\n EndEpoch: number\n StoragePricePerEpoch: number\n ProviderCollateral: number\n ClientCollateral: number\n State: DealStatus\n Label: string\n StartEpochAsDate: string\n EndEpochAsDate: string\n}\n\nexport enum DealTitles {\n PieceCID = 'Piece CID',\n Label = 'Label',\n DealID = 'Deal ID',\n MinerID = 'Miner ID',\n PayloadCID = 'Payload CID',\n Client = 'Client',\n ClientAddress = 'Client Address',\n PieceSize = 'Piece Size',\n VerifiedDeal = 'Verified Deal',\n StartEpoch = 'Start Deal',\n EndEpoch = 'End Deal',\n Expiration = 'Expiration',\n StoragePricePerEpoch = 'Price',\n ProviderCollateral = 'Miner Collateral',\n ClientCollateral = 'Client Collateral',\n State = 'Status',\n StartEpochAsDate = 'Start Deal(date)',\n EndEpochAsDate = 'End Deal(date)'\n}\n\nexport interface DealDetails {\n clientAddress?: string\n}\n\nexport interface GaTagId {\n gaTagId: string | undefined\n}\n\nexport interface INetwork {\n id: string\n label: string\n url: string\n}\n\nexport interface QueryParams {\n [key:string]: string;\n}\n\nexport interface DealStat {\n numberOfUniqueCIDs: number\n numberOfUniqueProviders: number\n numberOfUniqueClients: number\n totalDeals: number\n totalDealSize: number\n latestHeight: number\n}","import React from 'react'\nimport styled from 'styled-components'\n\nconst BodyWrapper = styled.div`\n margin-top: 48px;\n`\n\nexport const Body: React.FC = (props) => {\n const { children, ...restProps } = props\n\n return {children}\n}\n","import React from 'react'\n\nimport { PAGE_INDEX_START } from '../config/constants'\n\nexport interface SearchContext {\n page: number\n search: string\n query: string\n activeFilter: boolean\n verifiedFilter: boolean\n setCurrentPage: (page: number) => void\n setCurrentSearch: (search: string) => void\n setCurrentQuery: (query: string) => void\n setCurrentActiveFilter: (value: boolean) => void\n setCurrentVerifiedFilter: (value: boolean) => void\n}\n\nexport const SEARCH_CONTEXT_DEFAULT_VALUE = {\n page: PAGE_INDEX_START,\n search: '',\n query: '',\n activeFilter: false,\n verifiedFilter: false,\n setCurrentPage: () => {},\n setCurrentSearch: () => {},\n setCurrentQuery: () => {},\n setCurrentActiveFilter: () => {},\n setCurrentVerifiedFilter: () => {},\n}\n\nconst SearchContext = React.createContext(SEARCH_CONTEXT_DEFAULT_VALUE)\n\ninterface Props {\n children: React.ReactNode\n}\n\nexport const SearchProvider = (props: Props) => {\n const [page, setPage] = React.useState(PAGE_INDEX_START)\n const [search, setSearch] = React.useState('')\n const [activeFilter, setActiveFilter] = React.useState(false)\n const [verifiedFilter, setVerifiedFilter] = React.useState(false)\n\n const [query, setQuery] = React.useState('&sort_by_column=status&sort_direction=-1')\n\n const setCurrentPage = React.useCallback((page: number): void => {\n setPage(page)\n }, [])\n\n const setCurrentSearch = React.useCallback((search: string): void => {\n setSearch(search)\n }, [])\n\n const setCurrentQuery = React.useCallback((sort: string): void => {\n setQuery(sort)\n }, [])\n\n const setCurrentActiveFilter = React.useCallback((value: boolean): void => {\n setActiveFilter(value)\n }, [])\n\n const setCurrentVerifiedFilter = React.useCallback((value: boolean): void => {\n setVerifiedFilter(value)\n }, [])\n\n const value = {\n page,\n search,\n query,\n activeFilter,\n verifiedFilter,\n setCurrentPage,\n setCurrentSearch,\n setCurrentQuery,\n setCurrentActiveFilter,\n setCurrentVerifiedFilter,\n }\n\n return {props.children}\n}\n\nexport const useSearchContext = (): SearchContext => {\n return React.useContext(SearchContext)\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport { useHistory } from 'react-router-dom'\n\nimport { useSearchContext } from '../../../state/search.context'\n\nconst Svg = styled.svg``\n\nconst LogoWrapper = styled.div`\n cursor: pointer;\n height: 40.1px;\n object-fit: contain;\n width: 154.4px;\n`\n\nexport const Logo = () => {\n const { setCurrentPage, setCurrentSearch } = useSearchContext()\n const history = useHistory()\n\n const onClick = () => {\n setCurrentSearch('')\n setCurrentPage(1)\n history.push('/')\n }\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\n\nconst Svg = styled.svg``\n\nconst LensWrapper = styled.div`\n width: 24px;\n height: 24px;\n object-fit: contain;\n`\n\nexport const Lens = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\n\nconst Svg = styled.svg``\n\nconst CloseWrapper = styled.div`\n width: 24px;\n height: 24px;\n object-fit: contain;\n`\n\nexport const Close = () => {\n return (\n \n \n \n \n \n \n )\n}\n","import React, { useEffect, useState } from 'react'\nimport { useHistory } from 'react-router-dom'\nimport styled from 'styled-components'\n\nimport { Lens } from './common/images/lens.component'\nimport { Close } from './common/images/close.component'\nimport { useSearchContext } from '../state/search.context'\n\n// Search Wrapper\nconst SearchWrapper = styled.div`\n position: relative;\n display: inline-block;\n @media (max-width: ${(props) => props.theme.themeBreakPoints.xxl}) {\n width: 650px;\n }\n @media (max-width: ${(props) => props.theme.themeBreakPoints.xl}) {\n width: 500px;\n }\n @media (max-width: ${(props) => props.theme.themeBreakPoints.md}) {\n width: 300px;\n margin-left: 50px;\n }\n @media (max-width: ${(props) => props.theme.themeBreakPoints.sm}) {\n width: 250px;\n }\n @media (max-width: ${(props) => props.theme.themeBreakPoints.xs}) {\n width: 250px;\n }\n`\n\n// Input\nexport const Input = styled.input`\n border-top-style: hidden !important;\n border-right-style: hidden !important;\n border-left-style: hidden !important;\n border-bottom-style: hidden !important;\n line-height: 1.2;\n outline: none;\n height: ${(props) => props.theme.textfield.height} !important;\n width: ${(props) => props.theme.textfield.width} !important;\n border-radius: ${(props) => props.theme.textfield.borderRadius} !important;\n font-family: ${(props) => props.theme.textfield.fontFamily};\n font-size: ${(props) => props.theme.textfield.fontSize};\n font-weight: ${(props) => props.theme.textfield.fontWeight};\n padding: ${(props) =>\n props.theme.textfield.paddingVertical +\n ' ' +\n props.theme.textfield.paddingHorizontal} !important;\n text-align: ${(props) => props.theme.textfield.textAlign};\n background-color: ${(props) => props.theme.textfield.backgroundColor};\n\n // Filled\n color: ${(props) => props.theme.textfield.color};\n\n &::placeholder {\n color: ${(props) => props.theme.textfield.placeholderColor};\n }\n\n &:hover {\n background-color: ${(props) => props.theme.textfield.hoverBackgroundColor};\n color: ${(props) => props.theme.textfield.hoverColor};\n }\n\n &:active,\n &:focus-within {\n color: ${(props) => props.theme.textfield.focusColor};\n border: solid 1px rgba(66, 193, 202, 0.5);\n background-color: rgba(207, 224, 255, 0.1);\n border-top-style: solid !important;\n border-right-style: solid !important;\n border-left-style: solid !important;\n border-bottom-style: solid !important;\n }\n @media (max-width: ${(props) => props.theme.themeBreakPoints.xxl}) {\n width: 650px !important;\n }\n @media (max-width: ${(props) => props.theme.themeBreakPoints.xl}) {\n width: 500px !important;\n }\n @media (max-width: ${(props) => props.theme.themeBreakPoints.md}) {\n width: 300px !important;\n }\n @media (max-width: ${(props) => props.theme.themeBreakPoints.sm}) {\n width: 250px !important;\n }\n @media (max-width: ${(props) => props.theme.themeBreakPoints.xs}) {\n width: 250px !important;\n }\n`\n\n// Lens Definition\nconst LensWrapper = styled.div`\n position: absolute;\n width: 40px;\n height: 40px;\n top: 8px;\n right: 8px;\n bottom: 8px;\n border-radius: 24px;\n background-color: #42c1ca;\n cursor: pointer;\n &:hover {\n background-color: #1c939b;\n }\n &:active,\n &:focus-within {\n background-color: rgb(207, 224, 255, 0.2);\n }\n`\n\n// Wrapper for the image inside circle\nconst LensImageWrapper = styled.div`\n width: 24px;\n height: 24px;\n padding: 8px;\n`\n\n// Close Definition\nconst CloseWrapper = styled.div`\n position: absolute;\n width: 40px;\n height: 40px;\n top: 8px;\n right: 56px;\n bottom: 8px;\n border-radius: 24px;\n cursor: pointer;\n &:hover {\n background-color: rgb(207, 224, 255, 0.1);\n }\n &:active,\n &:focus-within {\n background-color: rgb(207, 224, 255, 0.2);\n }\n`\n\n// Wrapper for the image inside circle\nconst CloseImageWrapper = styled.div`\n width: 24px;\n height: 24px;\n padding: 8px;\n`\n\nexport const Search = () => {\n const { search, setCurrentPage, setCurrentSearch } = useSearchContext()\n\n const [searchValueLocal, setSearchValueLocal] = useState(search)\n\n useEffect(() => {\n setSearchValueLocal(search)\n }, [search])\n\n const history = useHistory()\n\n const onSearch = () => {\n setCurrentSearch(searchValueLocal)\n setCurrentPage(1)\n history.push(searchValueLocal)\n }\n\n const onClear = () => {\n setSearchValueLocal('')\n setCurrentSearch('')\n setCurrentPage(1)\n history.push('/')\n }\n\n const onChange = (event: any) => {\n const searchValueLocalSanitized = event.target.value.replace(/\\/\\//g, '')\n\n if (searchValueLocalSanitized) {\n setSearchValueLocal(searchValueLocalSanitized)\n } else {\n onClear()\n }\n }\n\n return (\n \n \n \n \n \n \n {searchValueLocal && (\n \n \n \n \n \n )}\n {\n if (event.key === 'Enter') onSearch()\n }}\n name=\"value\"\n type=\"text\"\n placeholder=\"Search by Piece CID, Deal ID, or Miner ID\"\n />\n \n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\n\nimport { useSearchContext } from '../state/search.context'\n\nconst Item = styled.div`\n color: #fff;\n display: flex;\n align-items: center;\n font-size: 12px;\n font-weight: 500;\n line-height: 1.2;\n margin-right: 10px;\n cursor: pointer;\n`\nconst CheckedBox = () => (\n \n \n \n \n)\n\nconst UncheckedBox = () => (\n \n \n \n)\n\nexport const CheckboxFilter = () => {\n const { activeFilter, verifiedFilter, setCurrentActiveFilter, setCurrentVerifiedFilter } =\n useSearchContext()\n\n return (\n <>\n {\n setCurrentActiveFilter(!activeFilter)\n }}\n >\n {activeFilter && }\n {!activeFilter && }\n Active\n \n {\n setCurrentVerifiedFilter(!verifiedFilter)\n }}\n >\n {verifiedFilter && }\n {!verifiedFilter && }\n Verified\n \n \n )\n}\n","import { INetwork } from '../utils/types';\n\nexport const networks: INetwork[] = [\n {\n id: 'mainnet',\n url: 'https://old.filecoin.tools',\n label: 'Mainnet',\n },\n {\n id: 'calibration',\n url: 'https://calibration.old.filecoin.tools',\n label: 'Calibration',\n },\n]","import React from 'react'\n\nexport const DownArrowFilledIcon = ({ style = {}, ...rest }) => (\n \n \n \n)\n","import React, { useState, useEffect } from 'react'\nimport styled from 'styled-components';\nimport { networks } from '../config/networks'\nimport { parseQuery } from '../utils/urls'\nimport { INetwork } from '../utils/types';\nimport { DownArrowFilledIcon } from './common/icons'\n\nconst DropdownWrapper = styled.div`\n position: relative; \n`\n\nconst SelectedWrapper = styled.div`\n font-family: ${(props) => props.theme.fonts.fontFamily};\n font-size: ${(props) => props.theme.fonts.defaultSize};\n cursor: pointer;\n color: #f0f8ff;\n background: radial-gradient(circle, rgba(207, 224, 255, 0.62) 1px, transparent 1px) repeat-x; \n`\n\nconst WrappedDownArrowFilledIcon = styled(DownArrowFilledIcon)`\n position: absolute;\n width: 24px;\n height: 24px;\n`\n\nconst OptionWrapper = styled.li`\n margin: 0;\n padding: 0;\n color: inherit;\n &:hover {\n background: #42c1ca;\n }\n`\n\nconst MenuWrapper = styled.ul`\n position: absolute;\n\n list-style-type: none;\n margin: 5px 0;\n padding: 1px;\n\n border: 1px solid grey;\n width: 120px;\n`\n\nconst AWrapper = styled.a`\n padding: 3px;\n width: 100%;\n color: white;\n`\n\ninterface DropDownItemOpts {\n network: INetwork\n onClick: () => void\n}\n\nconst DropdowItem = (opts: DropDownItemOpts) => {\n return \n \n {opts.network.label}\n \n \n}\n\nexport const NetworkSwitcher = () => {\n const [open, setOpen] = useState(false);\n const [network, setNetwork] = useState(networks[0]);\n\n useEffect(\n () => {\n const parsedQuery = parseQuery()\n let found\n if(parsedQuery && parsedQuery.hasOwnProperty('network')) {\n found = networks.find(n => n.id === parsedQuery.network)\n }\n if(found) {\n setNetwork(found)\n return\n }\n const arr = window.location.host.split(/\\./)\n let networkFromHost = 'mainnet'\n if (arr.length === 3) {\n networkFromHost = arr[0]\n }\n else if (arr.length > 3) {\n networkFromHost = arr[1]\n }\n found = networks.find(n => n.id === networkFromHost)\n if(found) {\n setNetwork(found)\n }\n },\n []\n )\n\n const handleOpen = () => {\n setOpen(!open);\n };\n\n const options = networks.filter(n => n.id !== network.id)\n\n const onClick = () => {\n setOpen(!open);\n }\n\n return (\n \n \n {network.label}\n \n \n {open ? (\n \n {\n options.map(n => {\n return \n })\n }\n \n ) : null}\n \n )\n}\n\n","import { QueryParams } from './types'\n\nexport const parseQuery = () => {\n const { location } = window\n\n const searchString = location.search.replace(/^\\?/,'')\n const array = searchString.split('&')\n const result: QueryParams = {}\n\n array.forEach((str: string) => {\n const [key, value] = str.split('=')\n const decodedKey = decodeURIComponent(key)\n result[decodedKey] = decodeURIComponent(value)\n })\n\n return result\n}","import React from 'react'\nimport styled from 'styled-components'\n\nimport { Logo } from '../../common/images/logo.component'\nimport { Search } from '../../search.component'\nimport { CheckboxFilter } from '../../checkboxFilter.component'\nimport { NetworkSwitcher } from '../../networkSwitcher.component'\n\nconst LogoWrapper = styled.div`\n margin: 56px auto auto 48px;\n`\n\nconst SearchWrapper = styled.div`\n margin: 44px auto auto auto;\n`\n\nconst CheckboxFilterWrapper = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n margin: 10px 0 0 48px;\n max-width: 80px;\n height: 56px;\n text-decoration: none;\n\n @media (min-width: ${(props) => props.theme.themeBreakPoints.md}) {\n align-items: center;\n margin: 48px 48px auto auto;\n max-width: none;\n padding-left: 20px;\n }\n`\n\nconst NetworkSwitcherWrapper = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n margin: 10px 0 0 48px;\n max-width: 80px;\n height: 56px;\n text-decoration: none;\n \n @media (min-width: ${(props) => props.theme.themeBreakPoints.md}) {\n align-items: center;\n margin: 48px 48px auto auto;\n max-width: none;\n padding-left: 20px;\n }\n`\n\nexport const Header = () => {\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n )\n}\n","import React from 'react'\n\nexport const MainWrapper: React.FC = (props) => {\n const { children, ...restProps } = props\n\n return (\n
\n {children}\n
\n )\n}\n","import { FILECOIN_CID_CHECKER_API, PAGE_SIZE } from '../config/constants';\nimport { DealDetails, DealStatus, DealValue, DealValueNotAvailable } from './types';\n\nexport const truncateStringInTheMiddle = (\n str: string,\n strPositionStart: number,\n strPositionEnd: number,\n) => {\n const minTruncatedLength = strPositionStart + strPositionEnd\n try {\n if (minTruncatedLength < str.length) {\n return `${str.substr(0, strPositionStart)}...${str.substr(\n str.length - strPositionEnd,\n str.length,\n )}`\n }\n return str\n } catch (e) {\n /* eslint-disable no-console*/\n console.error('truncateStringInTheMiddle', e)\n /* eslint-enable no-console*/\n }\n}\n\nexport const fetchDeals = async (\n search: string,\n page: number,\n query: string,\n activeFilter: boolean,\n verifiedFilter: boolean,\n): Promise => {\n let url = `${FILECOIN_CID_CHECKER_API}/deals/list?page=${page}&per_page=${PAGE_SIZE}`\n\n if (search) {\n url = url + `&selector=${search}`\n }\n\n if (activeFilter) {\n url = url + '&activeDeal=1'\n }\n\n if (verifiedFilter) {\n url = url + '&verifiedDeal=1'\n }\n\n url = url + query\n const response = await fetch(url)\n const data = await response.json()\n\n const deals = data?.Deals ?? []\n\n const formattedDeals: DealValue[] = deals.map((deal: any) => {\n const { DealInfo } = deal\n\n const {\n PieceCID,\n Provider: MinerID,\n Client,\n PieceSize,\n VerifiedDeal,\n StartEpoch,\n EndEpoch,\n StoragePricePerEpoch,\n ProviderCollateral,\n ClientCollateral,\n Label,\n StartEpochAsDate,\n EndEpochAsDate,\n } = DealInfo?.Proposal\n const DealID = DealInfo?.DealID || DealValueNotAvailable\n let State = DealInfo.State.SectorStartEpoch > -1 ? DealStatus.Active : DealStatus.Unknown\n const endEpoch = new Date(EndEpochAsDate)\n const currentDate = new Date()\n if (currentDate > endEpoch) {\n State = DealStatus.Expired\n }\n return {\n PieceCID: PieceCID['/'],\n DealID,\n MinerID,\n Client,\n PieceSize,\n VerifiedDeal,\n StartEpoch,\n EndEpoch,\n StartEpochAsDate,\n EndEpochAsDate,\n StoragePricePerEpoch,\n ProviderCollateral,\n ClientCollateral,\n State,\n Label,\n }\n })\n\n return formattedDeals\n}\n\nexport const fetchDealDetails = async (dealId: string): Promise => {\n const url = `${FILECOIN_CID_CHECKER_API}/deals/details/${dealId}`\n const response = await fetch(url)\n const data = await response.json()\n\n return data\n}\n\nexport const fetchDealStats = async (): Promise => {\n const url = `${FILECOIN_CID_CHECKER_API}/deals/stats`\n const response = await fetch(url)\n const data = await response.json()\n\n return data\n}\n\nexport const getDealsCsvUrl = async (\n search: string,\n query: string,\n activeFilter: boolean,\n verifiedFilter: boolean,\n pageSize = PAGE_SIZE,\n) => {\n let url = `${FILECOIN_CID_CHECKER_API}/deals/csv?per_page=${pageSize}`\n\n if (search) {\n url = url + `&selector=${search}`\n }\n\n if (activeFilter) {\n url = url + '&activeDeal=1'\n }\n\n if (verifiedFilter) {\n url = url + '&verifiedDeal=1'\n }\n\n url = url + query\n\n return url\n}\n","enum Types {\n notAsked = '__rd_notAsked__',\n loading = '__rd_loading__',\n success = '__rd_success__',\n failure = '__rd_failure__',\n reloading = '__rd_reloading__',\n}\n\ninterface Success {\n readonly _type: Types.success\n readonly data: Data\n}\ninterface Failure {\n readonly _type: Types.failure\n readonly error: Error\n}\ninterface NotAsked {\n readonly _type: Types.notAsked\n}\ninterface Loading {\n readonly _type: Types.loading\n}\ninterface Reloading {\n readonly _type: Types.reloading\n readonly data: Data\n}\n\nconst isNotAsked = (rd: RemoteData): rd is NotAsked => rd._type === Types.notAsked\nconst isLoading = (rd: RemoteData): rd is Loading => rd._type === Types.loading\nconst isSuccess = (rd: RemoteData): rd is Success => rd._type === Types.success\nconst isFailure = (rd: RemoteData): rd is Failure => rd._type === Types.failure\nconst isReloading = (rd: RemoteData): rd is Reloading => rd._type === Types.reloading\n\nfunction hasData(rd: RemoteData): rd is Success | Reloading {\n return isSuccess(rd) || isReloading(rd)\n}\nfunction getDataOr(rd: RemoteData, defaultValue: T): T {\n return isSuccess(rd) ? rd.data : defaultValue\n}\n\nexport type RemoteData = NotAsked | Loading | Reloading | Success | Failure\n\nexport const RemoteData = {\n notAsked: (): NotAsked => ({ _type: Types.notAsked }),\n loading: (): Loading => ({ _type: Types.loading }),\n failure: (error: any): Failure => ({ _type: Types.failure, error }),\n success: (data: D): Success => ({ _type: Types.success, data }),\n reloading: (data: D): Reloading => ({ _type: Types.reloading, data }),\n is: {\n notAsked: isNotAsked,\n loading: isLoading,\n success: isSuccess,\n failure: isFailure,\n reloading: isReloading,\n },\n hasData,\n getDataOr,\n}\n","import React from 'react'\nimport styled from 'styled-components'\n\nconst Title = styled.div`\n font-family: Poppins;\n font-size: 20px;\n font-weight: 600;\n line-height: 18px;\n text-align: left;\n color: #ffffff;\n`\n\nexport const NoDealsAvailableMessage = () => {\n return No Deals available\n}\n","import React from 'react'\nimport styled from 'styled-components'\n\nconst Title = styled.div`\n font-family: Poppins;\n font-size: 20px;\n font-weight: 600;\n line-height: 18px;\n text-align: left;\n color: #ffffff;\n`\n\nexport const DealsErrorMessage = () => {\n return There is an error fetching the Deals\n}\n","import React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { DealStatus } from '../utils/types';\n\nexport interface DealStatusProps {\n status: DealStatus\n}\n\nconst StatusActiveCSS = css`\n width: 8px;\n height: 8px;\n border-radius: 32px;\n background-color: #3db14a;\n`\n\nconst StatusFaultCSS = css`\n width: 8px;\n height: 8px;\n border-radius: 32px;\n background-color: #d6c41e;\n`\n\nconst StatusRecoveryCSS = css`\n width: 8px;\n height: 8px;\n border-radius: 32px;\n background-color: #8894a8;\n`\n\nconst StatusUnknowCSS = css`\n width: 8px;\n height: 8px;\n border-radius: 32px;\n background-color: #8a8a8a;\n`\n\nconst StatusExpiredCSS = css`\n width: 8px;\n height: 8px;\n border-radius: 32px;\n background-color: #c78e8e;\n`\n\nconst getStatusTypeStyles = (status: DealStatus = DealStatus.Unknown): any => {\n if (status === DealStatus.Active) {\n return StatusActiveCSS\n }\n\n if (status === DealStatus.Fault) {\n return StatusFaultCSS\n }\n\n if (status === DealStatus.Recovery) {\n return StatusRecoveryCSS\n }\n\n if (status === DealStatus.Unknown) {\n return StatusUnknowCSS\n }\n\n if (status === DealStatus.Expired) {\n return StatusExpiredCSS\n }\n return StatusUnknowCSS\n}\n\nconst DealStatusCSS = css`\n ${(props) => getStatusTypeStyles(props.status)}\n`\n\nconst Wrapper = styled.div`\n ${DealStatusCSS}\n margin-right: 10px;\n`\n\nexport const DealStatusIcon = (props: DealStatusProps) => {\n return \n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport { CopyToClipboard } from 'react-copy-to-clipboard'\n\nimport { Copy } from './common/images/copy.component'\n\ninterface Props {\n text: string\n className?: string\n title?: string\n}\n\nconst CopyWrapper = styled.div`\n display: inline-block;\n width: 32px;\n height: 32px;\n border-radius: 24px;\n cursor: pointer;\n &:hover {\n background-color: rgb(207, 224, 255, 0.1);\n }\n &:active,\n &:focus-within {\n background-color: rgb(207, 224, 255, 0.2);\n }\n`\n\nconst CopyImageWrapper = styled(Copy)`\n margin-top: 8px;\n margin-left: 8px;\n`\n\nexport const CopyText = (props: Props) => {\n const { text, className, title = 'Click to copy' } = props\n\n return (\n
e.stopPropagation()}>\n e.stopPropagation()} text={text}>\n \n \n \n \n
\n )\n}\n","import React from 'react'\n\ninterface Props {\n className?: string\n}\n\nexport const Copy = (props: Props) => {\n return (\n \"icon\"\n )\n}\n","import React, { HTMLAttributes } from 'react'\nimport styled from 'styled-components'\nimport { useHistory } from 'react-router-dom'\n\nimport { DealValue } from '../utils/types'\nimport { DealStatusIcon } from './dealStatusIcon.component'\nimport { CopyText } from './copyText.component'\nimport { useSearchContext } from '../state/search.context'\n\ninterface Props extends HTMLAttributes {\n deal: DealValue\n key: number\n onClick: () => void\n}\n\nconst TR = styled.tr`\n background-color: rgb(207, 224, 255, 0.1);\n height: 63px;\n cursor: pointer;\n font-family: Poppins;\n font-size: 16px;\n line-height: 18px;\n text-align: left;\n color: #cfe0ff;\n &:hover {\n background-color: rgb(171, 201, 255, 0.2);\n color: #ffffff;\n }\n background-image: linear-gradient(to right, #0a111e, #1a283e);\n background-repeat: no-repeat;\n background-position: left bottom;\n background-size: 100% 1px;\n`\n\nconst TD = styled.td`\n position: relative;\n`\n\nconst CopyTextWrapper = styled(CopyText)`\n position: absolute;\n top: 14px;\n`\n\nconst MinerSearch = styled.span`\n padding-left: 35px;\n &:hover {\n color: #42c1ca;\n }\n`\nconst TDFirst = styled(TD)`\n @media (max-width: ${(props) => props.theme.themeBreakPoints.sm}) {\n padding-left: 3px;\n & > div {\n display: none;\n }\n }\n @media (max-width: ${(props) => props.theme.themeBreakPoints.xs}) {\n padding-left: 3px;\n & > div {\n display: none;\n }\n }\n`\n\nconst TDSecond = styled(TD)`\n @media (max-width: ${(props) => props.theme.themeBreakPoints.lg}) {\n & > div > span {\n display: none;\n }\n }\n`\n\nconst TDThird = styled(TD)`\n @media (max-width: ${(props) => props.theme.themeBreakPoints.lg}) {\n width: 20%;\n }\n @media (max-width: ${(props) => props.theme.themeBreakPoints.sm}) {\n & > div {\n display: none;\n }\n }\n`\n\nconst TDFour = styled(TD)`\n @media (max-width: ${(props) => props.theme.themeBreakPoints.lg}) {\n width: 20%;\n }\n @media (max-width: ${(props) => props.theme.themeBreakPoints.sm}) {\n & > div {\n display: none;\n }\n }\n @media (max-width: ${(props) => props.theme.themeBreakPoints.xs}) {\n & > div {\n display: none;\n }\n }\n`\n\nconst TDFive = styled(TD)`\n width: 35%;\n @media (max-width: ${(props) => props.theme.themeBreakPoints.sm}) {\n & > div {\n display: none;\n }\n }\n @media (max-width: ${(props) => props.theme.themeBreakPoints.xs}) {\n & > div {\n display: none;\n }\n }\n @media (max-width: ${(props) => props.theme.themeBreakPoints.md}) {\n padding-left: 0px;\n width: 25%;\n }\n`\n\nconst FileCidColumn = styled.span`\n padding-left: 35px;\n display: block;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n max-width: 100%;\n @media (max-width: ${(props) => props.theme.themeBreakPoints.md}) {\n display: block;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n max-width: 100%;\n }\n`\nconst Span = styled.span`\n padding-left: 35px;\n`\n\nexport const DealItem = (props: Props) => {\n const { setCurrentPage, setCurrentSearch } = useSearchContext()\n\n const { deal, onClick } = props\n\n const history = useHistory()\n\n const searchMiner = (minerId: string) => {\n setCurrentSearch(minerId)\n setCurrentPage(1)\n history.push(minerId)\n }\n\n return (\n \n \n \n {deal.PieceCID}\n \n \n
\n \n {deal.State}\n
\n
\n \n \n {deal.DealID}\n \n \n \n searchMiner(deal.MinerID)}\n title=\"Click to search by this Miner ID\"\n >\n {deal.MinerID}\n \n \n \n \n {deal.Label}\n \n \n )\n}\n","import React from 'react'\nimport Modal from 'react-modal'\nimport { withTheme } from 'styled-components'\n\ninterface Props extends React.ComponentProps {\n children: React.ReactNode\n theme?: any\n}\n\nexport const ModalContainer: React.FC = (props) => {\n const { onRequestClose, theme, children, ...restProps } = props\n const { modalStyle } = theme\n\n React.useEffect(() => {\n Modal.setAppElement('#root')\n }, [])\n\n return (\n \n {children}\n \n )\n}\n\nexport const ModalWrapper = withTheme(ModalContainer)\n","import React, { ButtonHTMLAttributes } from 'react'\nimport styled from 'styled-components'\n\ninterface ButtonCommonProps {\n theme?: any\n width?: string\n}\n\ninterface ButtonProps extends ButtonHTMLAttributes, ButtonCommonProps {}\n\nconst Wrapper = styled.button`\n width: ${({ width }) => (width ? width : '312px')};\n height: 56px;\n border-radius: 28px;\n background-color: #42c1ca;\n font-family: Poppins;\n font-size: 14px;\n font-weight: 500;\n line-height: 18px;\n text-align: left;\n color: #ffffff;\n -moz-outline-style: none;\n outline: none;\n &:active,\n &:focus-within {\n outline: 0;\n background-color: rgb(207, 224, 255, 0.2);\n }\n &:hover {\n background-color: #1c939b;\n }\n`\n\nexport const Button = (props: ButtonProps) => {\n const { children, ...restProps } = props\n\n return {children}\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport { CopyToClipboard } from 'react-copy-to-clipboard'\n\nimport { Share } from './common/images/share.component'\n\ninterface Props {\n text: string\n className?: string\n title?: string\n}\n\nconst ShareWrapper = styled.div`\n display: inline-block;\n width: 32px;\n height: 32px;\n border-radius: 24px;\n cursor: pointer;\n &:hover {\n background-color: rgb(207, 224, 255, 0.1);\n }\n &:active,\n &:focus-within {\n background-color: rgb(207, 224, 255, 0.2);\n }\n`\n\nconst ShareImageWrapper = styled(Share)`\n margin-top: 7px;\n margin-left: 7px;\n`\n\nexport const ShareDeal = (props: Props) => {\n const { text, className, title = 'Click to copy Deal link to share' } = props\n\n return (\n \n \n \n \n \n )\n}\n","import React from 'react'\n\ninterface Props {\n className?: string\n}\n\nexport const Share = (props: Props) => {\n return (\n \n )\n}\n","export const formatDate = (dateAsIsoString: string) => {\n const result = new Intl.DateTimeFormat('en-GB', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit'\n }).format(new Date(dateAsIsoString))\n\n return result.replace(/\\//g, '.')\n}","import React, { HTMLAttributes, useEffect, useState, useMemo } from 'react'\nimport styled from 'styled-components'\n\nimport { ModalWrapper } from './modalWrapper.component'\nimport { DealDetails, DealTitles, DealValue } from '../utils/types'\nimport { DealStatusIcon } from './dealStatusIcon.component'\nimport { fetchDealDetails, truncateStringInTheMiddle } from '../utils/deals'\nimport { Button } from './button.component'\nimport { CopyText } from './copyText.component'\nimport { ShareDeal } from './shareDeal.component'\nimport { formatDate } from '../utils/dates'\n\ninterface Props extends HTMLAttributes {\n isOpen: boolean\n onClose: () => void\n deal: Maybe\n}\n\nconst ModalTitle = styled.div`\n width: 140px;\n height: 33px;\n font-family: Poppins;\n font-size: 24px;\n font-weight: 600;\n line-height: 18px;\n text-align: left;\n color: #ffffff;\n margin-bottom: 22px;\n`\n\nconst Footer = styled.div`\n margin: 30px auto 5px auto;\n`\n\nconst Dots = styled.span`\n display: block;\n background: radial-gradient(circle, rgba(207, 224, 255, 0.62) 1px, transparent 1px) repeat-x;\n background-size: 6px 39px;\n flex-grow: 10;\n`\n\nconst SpanTitle = styled.span`\n padding: 6px;\n opacity: 0.5;\n font-family: Poppins;\n font-size: 15px;\n line-height: 18px;\n text-align: left;\n color: #cfe0ff;\n`\n\nconst SpanValue = styled.span`\n padding: 6px;\n font-family: Poppins;\n font-size: 16px;\n font-weight: 500;\n line-height: 18px;\n text-align: right;\n color: #ffffff;\n`\n\nconst CopyTextWrapper = styled(CopyText)`\n margin-top: -2px;\n`\n\nexport const DealDetailModal = (props: Props) => {\n const { onClose, isOpen, deal } = props\n\n const [dealDetails, setDealDetails] = useState()\n const clientAddress = useMemo(() => {\n return dealDetails && dealDetails.clientAddress ? dealDetails.clientAddress : 'loading'\n }, [dealDetails])\n\n useEffect(() => {\n async function run() {\n if (deal && deal.DealID) {\n try {\n // unused one server api request\n if(!isOpen) {\n return null\n }\n const details = await fetchDealDetails(`${deal.DealID}`)\n setDealDetails(details)\n } catch (err) {\n /* eslint-disable no-console*/\n console.error(err)\n /* eslint-enable no-console*/\n }\n }\n }\n setDealDetails(undefined)\n run()\n }, [deal, isOpen])\n\n if (!deal || !isOpen) {\n return null\n }\n\n return (\n \n \n Details \n \n\n
\n {DealTitles.PieceCID}\n \n \n {truncateStringInTheMiddle(deal.PieceCID, 6, 4)}\n \n \n
\n
\n {DealTitles.PayloadCID}\n \n {truncateStringInTheMiddle(deal.Label, 6, 4)}\n \n
\n\n
\n {DealTitles.DealID}\n \n {deal.DealID}\n \n
\n
\n {DealTitles.MinerID}\n \n {deal.MinerID}\n \n
\n
\n {DealTitles.Client}\n \n {deal.Client}\n \n
\n
\n {DealTitles.ClientAddress}\n \n \n {truncateStringInTheMiddle(clientAddress, 6, 4)}\n \n \n
\n
\n {DealTitles.PieceSize}\n \n {deal.PieceSize}\n
\n
\n {DealTitles.VerifiedDeal}\n \n {deal.VerifiedDeal ? 'True' : 'False'}\n
\n
\n {DealTitles.StartEpoch}\n \n {deal.StartEpoch}\n
\n
\n {DealTitles.StartEpochAsDate}\n \n {formatDate(deal.StartEpochAsDate)}\n
\n
\n {DealTitles.EndEpoch}\n \n {deal.EndEpoch}\n
\n
\n {DealTitles.EndEpochAsDate}\n \n {formatDate(deal.EndEpochAsDate)}\n
\n
\n {DealTitles.StoragePricePerEpoch}\n \n {deal.StoragePricePerEpoch}\n
\n
\n {DealTitles.ProviderCollateral}\n \n {deal.ProviderCollateral}\n
\n
\n {DealTitles.ClientCollateral}\n \n {deal.ClientCollateral}\n
\n
\n {DealTitles.State}\n \n \n {' '}\n \n {deal.State}\n \n
\n\n
\n \n
\n
\n )\n}\n","import React, { HTMLAttributes, useEffect, useState } from 'react'\n\nimport { DealItem } from './dealItem.component'\nimport { RemoteData } from '../utils/remoteData'\nimport { DealDetailModal } from './dealDetailModal.component'\nimport { DealValue } from '../utils/types'\n\ninterface Props extends HTMLAttributes {\n deals: RemoteData\n openModal: boolean\n}\n\nexport const DealsList = (props: Props) => {\n const { deals, openModal } = props\n\n const [isModalOpen, setModalOpen] = useState(false)\n const [clickedDeal, setClickedDeal] = useState>(null)\n\n useEffect(() => {\n if (RemoteData.hasData(deals)) {\n setModalOpen(openModal)\n setClickedDeal(deals.data[0])\n }\n }, [openModal, deals])\n\n return (\n <>\n {RemoteData.hasData(deals) &&\n deals.data.map((deal: any, index: number) => {\n return (\n {\n setModalOpen(true)\n setClickedDeal(deal)\n }}\n />\n )\n })}\n {\n setModalOpen(false)\n }}\n deal={clickedDeal}\n />\n \n )\n}\n","import { useEffect, useRef, useState } from 'react';\n\nexport const useEffectOnce = (effect: () => void | (() => void)) => {\n\n const effectFn = useRef<() => void | (() => void)>(effect);\n const destroyFn = useRef void)>();\n const effectCalled = useRef(false);\n const rendered = useRef(false);\n const [, setVal] = useState(0);\n\n if (effectCalled.current) {\n rendered.current = true;\n }\n\n useEffect(() => {\n // only execute the effect first time around\n if (!effectCalled.current) {\n destroyFn.current = effectFn.current();\n effectCalled.current = true;\n }\n\n // this forces one render after the effect is run\n setVal((val) => val + 1);\n\n return () => {\n // if the comp didn't render since the useEffect was called,\n // we know it's the dummy React cycle\n if (!rendered.current) { return; }\n\n // otherwise this is not a dummy destroy, so call the destroy func\n if (destroyFn.current) { destroyFn.current(); }\n };\n }, []);\n};","import styled from 'styled-components'\n\nexport const Table = styled.table`\n table-layout: fixed;\n width: 100%;\n`\n\nexport const TH = styled.th`\n font-family: Poppins;\n font-size: 12px;\n font-weight: 600;\n line-height: 18px;\n text-align: left;\n color: #cfe0ff;\n text-transform: uppercase;\n`\n\nexport const THead = styled.thead`\n border-bottom: none;\n`\n\nexport const THButton = styled.button`\n margin: 0;\n padding: 0;\n border: 0;\n display: flex;\n align-items: center;\n font: inherit;\n color: inherit;\n outline: none;\n background-color: rgba(0, 0, 0, 0)\n`","import React from 'react'\nimport { useStats } from '../hooks/useStats.hook'\nimport prettyBytes from 'pretty-bytes'\nimport {\n Table,\n THead,\n TH\n} from './common/layout/table.component'\nimport styled from 'styled-components';\n\nconst StatValue = styled.th`\n font-family: Poppins;\n font-size: 16px;\n font-weight: 800;\n line-height: 18px;\n text-align: left;\n color: #cfe0ff;\n text-transform: uppercase;\n`\n\nexport const DealStats = () => {\n const { stats } = useStats()\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n {stats?.numberOfUniqueCIDs}\n {stats?.numberOfUniqueProviders}\n {stats?.numberOfUniqueClients}\n {stats?.totalDeals}\n \n {stats && stats.totalDealSize ? prettyBytes(stats.totalDealSize) : null}\n \n {stats?.latestHeight}\n \n \n
TOTAL UNIQUE CIDSTOTAL UNIQUE PROVIDERSTOTAL UNIQUE CLIENTSTOTAL STORAGE DEALSTOTAL DATA STOREDLATEST HEIGHT
\n \n )\n}\n","import { useState } from 'react'\nimport { useEffectOnce } from './useEffectOnce'\nimport { fetchDealStats } from '../utils/deals'\n\nexport const useStats = (): { stats: any } => {\n const [stats, setStats] = useState(null)\n\n useEffectOnce(() => {\n let ignore = false;\n\n async function startFetching() {\n const json = await fetchDealStats();\n if (!ignore) {\n setStats(json);\n }\n }\n\n startFetching();\n\n return () => {\n ignore = true;\n };\n });\n\n return {\n stats,\n }\n}","import React, { useEffect, useState, useCallback } from 'react'\nimport Loader from 'react-loader-spinner'\nimport styled from 'styled-components'\nimport { Waypoint } from 'react-waypoint'\nimport { useParams } from 'react-router-dom'\nimport { useDealsV2 } from '../hooks/useDeals.hook'\nimport { RemoteData } from '../utils/remoteData'\nimport { NoDealsAvailableMessage } from './noDealsAvailableMessage.component'\nimport { DealsErrorMessage } from './dealsErrorMessage.component'\nimport { DealsList } from './dealsList.component'\nimport { DealTitles } from '../utils/types'\nimport { Button } from './button.component'\nimport { useSearchContext } from '../state/search.context'\nimport { DownArrowFilledIcon } from './common/icons'\nimport { DealStats } from './stats.component'\nimport { getDealsCsvUrl } from '../utils/deals'\nimport { PAGE_SIZE } from '../config/constants'\nimport {\n Table,\n THead,\n TH,\n THButton\n} from './common/layout/table.component'\n\ninterface ParamTypes {\n deal: string\n search: string\n}\n\nconst BlockWrapper = styled.div`\n padding: 120px;\n`\n\nconst THFirst = styled(TH)`\n width: 35%;\n @media (max-width: ${(props) => props.theme.themeBreakPoints.xs}) {\n width: 20%;\n }\n`\nconst THSecond = styled(TH)`\n @media (max-width: ${(props) => props.theme.themeBreakPoints.lg}) {\n width: 30px;\n visibility: hidden;\n }\n`\nconst THThird = styled(TH)``\nconst THFourth = styled(TH)``\nconst THFive = styled(TH)`\n width: 35%;\n text-align: right;\n @media (max-width: ${(props) => props.theme.themeBreakPoints.md}) {\n padding-left: 0px;\n width: 20%;\n }\n`\n\nconst ShowMoreButton = styled(Button)`\n margin: 20px auto 20px auto;\n`\n\nexport const Deals = () => {\n const {\n search,\n page,\n query,\n activeFilter,\n verifiedFilter,\n setCurrentPage,\n setCurrentSearch,\n setCurrentQuery,\n } = useSearchContext()\n const { search: searchFromParams, deal: dealIdFromParams } = useParams()\n\n const [order, setOrder] = useState<'asc' | 'desc' | undefined>()\n\n function setQuery(sort?: string, order?: number) {\n if (sort === 'status' && order) {\n setCurrentQuery(`&sort_by_column=status&sort_direction=${order}`)\n } else {\n setCurrentQuery('')\n }\n }\n\n useEffect(() => {\n if (searchFromParams) {\n setCurrentSearch(searchFromParams)\n }\n }, [setCurrentSearch, searchFromParams])\n\n useEffect(() => {\n if (dealIdFromParams) {\n setCurrentSearch(dealIdFromParams)\n }\n }, [setCurrentSearch, dealIdFromParams])\n\n const { deals, moreDeals } = useDealsV2(search, page, query, activeFilter, verifiedFilter)\n\n const showMore = () => {\n setCurrentPage(page + 1)\n }\n\n function onStateClick() {\n setCurrentPage(1)\n\n if (!order || order === 'asc') {\n setOrder('desc')\n setQuery('status', -1)\n } else if (order === 'desc') {\n setOrder('asc')\n setQuery('status', 1)\n }\n }\n\n function onDealIdClick() {\n setOrder(undefined)\n setCurrentPage(1)\n setQuery()\n }\n\n const encodedSearch = encodeURIComponent(search)\n\n const handleCsvDownload = useCallback(async () => {\n const url = await getDealsCsvUrl(\n encodedSearch,\n query,\n activeFilter,\n verifiedFilter,\n page * PAGE_SIZE,\n )\n window.open(url, '_blank')\n\n }, [encodedSearch, page, query, activeFilter, verifiedFilter])\n\n const showMoreButton =\n moreDeals && !RemoteData.is.loading(deals) ? (\n
\n \n {RemoteData.is.reloading(deals) ? 'Loading...' : 'Show more'}\n \n
\n ) : null\n\n return (\n <>\n
\n \n {RemoteData.hasData(deals) && deals.data.length > 0 && (\n <>\n \n
\n \n \n \n {DealTitles.PieceCID}\n \n \n {DealTitles.State}\n \n \n \n \n \n {DealTitles.DealID}\n \n \n \n {DealTitles.MinerID}\n {DealTitles.PayloadCID}\n \n \n \n \n \n
\n {showMoreButton}\n \n )}\n {RemoteData.is.success(deals) && deals.data.length === 0 && (\n \n \n \n )}\n {RemoteData.is.failure(deals) && (\n \n \n \n )}\n {RemoteData.is.loading(deals) && (\n \n \n \n )}\n {RemoteData.is.success(deals) && moreDeals && }\n
\n \n )\n}\n","import { useEffect, useState } from 'react'\nimport { fetchDeals } from '../utils/deals'\nimport { RemoteData } from '../utils/remoteData'\nimport { DealValue } from '../utils/types'\nimport { PAGE_SIZE } from '../config/constants'\n\n// TODO remove me later\nexport const useDeals = (\n search: string,\n page: number,\n query: string,\n activeFilter: boolean,\n verifiedFilter: boolean,\n): { deals: RemoteData; moreDeals: boolean } => {\n const [deals, setDeals] = useState>(RemoteData.loading())\n const [moreDeals, setMoreDeals] = useState(true)\n const [reqHash, setReqHash] = useState('')\n const encodedSearch = encodeURIComponent(search)\n const crtReqHash = JSON.stringify([encodedSearch, query, activeFilter, verifiedFilter])\n\n useEffect(() => {\n let didCancel = false\n\n const run = async () => {\n try {\n if (reqHash !== crtReqHash) {\n setDeals(RemoteData.loading())\n } else {\n setDeals((deals) =>\n RemoteData.hasData(deals) ? RemoteData.reloading(deals.data) : RemoteData.loading(),\n )\n }\n const deals = await fetchDeals(encodedSearch, page, query, activeFilter, verifiedFilter)\n\n if (!didCancel) {\n setDeals((currentDeals) =>\n RemoteData.hasData(currentDeals) && page !== 1\n ? RemoteData.success(currentDeals.data.concat(deals))\n : RemoteData.success(deals),\n )\n\n setMoreDeals(deals.length === PAGE_SIZE)\n setReqHash(crtReqHash)\n }\n } catch (e) {\n if (!didCancel) {\n setDeals(RemoteData.failure(e))\n }\n }\n }\n\n run()\n\n return () => {\n didCancel = true\n }\n }, [search, page, query, activeFilter, verifiedFilter, crtReqHash, encodedSearch, reqHash])\n\n return {\n deals,\n moreDeals,\n }\n}\n\nexport const useDealsV2 = (\n search: string,\n page: number,\n query: string,\n activeFilter: boolean,\n verifiedFilter: boolean,\n): { deals: RemoteData; moreDeals: boolean } => {\n const [deals, setDeals] = useState>(RemoteData.loading())\n const [moreDeals, setMoreDeals] = useState(true)\n const encodedSearch = encodeURIComponent(search)\n\n useEffect(() => {\n let ignore = false;\n\n const run = async () => {\n try {\n const deals = await fetchDeals(encodedSearch, page, query, activeFilter, verifiedFilter)\n if (!ignore) {\n setDeals((currentDeals) =>\n RemoteData.hasData(currentDeals) && page !== 1\n ? RemoteData.success(currentDeals.data.concat(deals))\n : RemoteData.success(deals),\n )\n setMoreDeals(deals.length === PAGE_SIZE)\n }\n } catch (e) {\n if (!ignore) {\n setDeals(RemoteData.failure(e))\n }\n }\n }\n\n run()\n\n return () => {\n ignore = true;\n }\n }, [search, page, query, activeFilter, verifiedFilter, encodedSearch])\n\n return {\n deals,\n moreDeals,\n }\n}","import React from 'react'\nimport { Helmet, HelmetProvider } from 'react-helmet-async'\nimport { BrowserRouter as Router, Switch, Route, Redirect } from 'react-router-dom'\n\nimport { DOCUMENT_DESCRIPTION, DOCUMENT_TITLE } from '../config/constants'\nimport { Body } from './common/layout/body.component'\nimport { Header } from './common/layout/header.component'\nimport { MainWrapper } from './common/layout/mainWrapper.component'\nimport { SearchProvider } from '../state/search.context'\nimport { Deals } from './deals.component'\n\nexport const Main = () => {\n return (\n \n \n \n \n {DOCUMENT_TITLE}\n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n )\n}\n","import React from 'react'\n\nexport const Top = () => {\n return \"icon\"\n}\n","import React, { useState } from 'react'\nimport styled from 'styled-components'\nimport useEventListener from 'use-typed-event-listener'\n\nimport { Top } from './common/images/top.component'\nimport { Button } from './button.component'\n\nconst ScrollToTopWrapper = styled(Button)`\n padding: 5px;\n position: fixed;\n bottom: 20px;\n z-index: 1000;\n cursor: pointer;\n animation: fadeIn 0.3s;\n transition: opacity 0.4s;\n opacity: 0.5;\n right: 10px;\n border-radius: 50%;\n width: 60px;\n height: 60px;\n &:hover {\n opacity: 1;\n }\n`\n\nexport const BackToTop = () => {\n const [showScroll, setShowScroll] = useState(false)\n\n const checkScrollTop = () => {\n if (!showScroll && window.pageYOffset > 400) {\n setShowScroll(true)\n } else if (showScroll && window.pageYOffset <= 400) {\n setShowScroll(false)\n }\n }\n\n const scrollTop = () => {\n window.scrollTo({ top: 0, behavior: 'smooth' })\n }\n\n useEventListener(window, 'scroll', checkScrollTop)\n\n return (\n \n \n \n )\n}\n","import React from 'react'\n\n// Based on https://github.com/tholman/github-corners\n// by Tim Holman, @tholman\nexport const GitHubCorners = ({ url }: { url: string }) => {\n return (\n <>\n \n \n \n \n \n \n \n \n \n )\n}\n","import { GaTagId } from './types';\nimport { FILECOIN_CID_CHECKER_API } from '../config/constants';\n\nexport const fetchGaTag = async (): Promise => {\n const url = `${FILECOIN_CID_CHECKER_API}/ga-tag-id`\n const response = await fetch(url)\n const data = await response.json()\n\n return data\n}\n","import React from 'react'\nimport { ThemeProvider } from 'styled-components'\n\nimport theme from './theme'\nimport { GlobalStyle } from './theme/global_style'\nimport { Main } from './components/main.component'\nimport { BackToTop } from './components/backToTop.component'\nimport { GitHubCorners } from './components/gitHubCorners.component'\nimport { REPOSITORY_URL } from './config/constants'\nimport { useAnalytics} from './hooks/useAnalytics'\nimport { GTMProvider } from '@elgorditosalsero/react-gtm-hook'\n\nfunction AppChild () {\n return (\n \n \n \n
\n \n \n )\n}\nfunction App() {\n const { gaTagId } = useAnalytics()\n\n console.info('gaTagId', gaTagId)\n if (gaTagId) {\n const gtmParams = { id: gaTagId }\n\n return (\n \n \n \n )\n }\n return (\n <>\n )\n}\n\nexport default App\n","import { useState } from 'react'\nimport { fetchGaTag } from '../utils/ga-tag'\nimport { useEffectOnce } from './useEffectOnce'\n\nexport function useAnalytics () {\n const [gaTagId, setGaTagId] = useState('')\n\n useEffectOnce(() => {\n const run = async () => {\n const gaTag = await fetchGaTag()\n\n if (gaTag && gaTag.gaTagId && gaTag.gaTagId !== '') {\n setGaTagId(gaTag.gaTagId)\n }\n }\n\n run()\n })\n\n return { gaTagId }\n}","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/),\n)\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void\n onUpdate?: (registration: ServiceWorkerRegistration) => void\n}\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href)\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config)\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA',\n )\n })\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config)\n }\n })\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing\n if (installingWorker == null) {\n return\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.',\n )\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration)\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.')\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration)\n }\n }\n }\n }\n }\n })\n .catch(error => {\n console.error('Error during service worker registration:', error)\n })\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type')\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload()\n })\n })\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config)\n }\n })\n .catch(() => {\n console.log('No internet connection found. App is running in offline mode.')\n })\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister()\n })\n .catch(error => {\n console.error(error.message)\n })\n }\n}\n","import React from 'react'\nimport ReactDOM from 'react-dom'\n\nimport App from './App'\nimport * as serviceWorker from './serviceWorker'\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root'),\n)\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister()\n"],"sourceRoot":""}