├── .eslintignore ├── .eslintrc.json ├── .gitignore ├── .gitlab-ci.yml ├── README.md ├── package.json ├── public ├── assets │ └── logos │ │ ├── logo.gif │ │ ├── logo_192x192.png │ │ ├── logo_512x512.png │ │ └── og_image.png ├── favicon.ico ├── index.html ├── manifest.json └── robots.txt ├── scripts ├── dev_deploy.sh ├── frontier_deploy.sh ├── prod_deploy.sh └── staging_deploy.sh ├── src ├── App.js ├── Router.js ├── actions │ ├── account │ │ ├── BCDetails.js │ │ ├── IBCTokens.js │ │ ├── index.js │ │ └── wallet.js │ ├── activity.js │ ├── auctions │ │ ├── filters.js │ │ └── index.js │ ├── campaign.js │ ├── collections │ │ ├── auctionFilters.js │ │ ├── filters.js │ │ └── index.js │ ├── explore.js │ ├── faucet.js │ ├── filters.js │ ├── home.js │ ├── marketplace.js │ ├── myAccount.js │ ├── navbar.js │ └── snackbar.js ├── app.css ├── assets │ ├── apps │ │ ├── insync.svg │ │ ├── studio.svg │ │ └── tv.svg │ ├── arrow-right-white.svg │ ├── auction │ │ ├── comingSoon.svg │ │ └── live.svg │ ├── calendar.png │ ├── collections │ │ ├── failed.svg │ │ ├── success.svg │ │ └── thumbnail.svg │ ├── copy-right.svg │ ├── copy.svg │ ├── diamond.svg │ ├── download.svg │ ├── dummy │ │ └── CryptoKitty.jpg │ ├── error.svg │ ├── explore │ │ ├── Vector.svg │ │ ├── expand more.svg │ │ ├── expand.svg │ │ ├── external-link.svg │ │ ├── filter.svg │ │ ├── grid.svg │ │ ├── more.svg │ │ ├── success.svg │ │ └── transferability.svg │ ├── failed.svg │ ├── feeGrant │ │ ├── feeGrant-bg.png │ │ └── gas-station.svg │ ├── home.svg │ ├── icons.svg │ ├── info.svg │ ├── logo.svg │ ├── my-account │ │ ├── calendar.svg │ │ ├── copy.svg │ │ └── share.svg │ ├── navbar │ │ └── wallet.svg │ ├── refresh.svg │ ├── right-arrow.svg │ ├── share-link.svg │ ├── share.svg │ ├── social │ │ ├── discord.svg │ │ ├── github.svg │ │ ├── telegram.svg │ │ ├── twitter.svg │ │ ├── website.svg │ │ └── youtube.svg │ ├── success.svg │ ├── success_gradient.svg │ ├── success_image.png │ ├── thumbnail.svg │ ├── tokens │ │ ├── KI.svg │ │ ├── M-Faucet Congrats.png │ │ ├── akash.svg │ │ ├── atom.svg │ │ ├── chihuahua.svg │ │ ├── crypto.com.svg │ │ ├── dvpn.svg │ │ ├── flix.svg │ │ ├── gravityBridge.svg │ │ ├── juno.svg │ │ ├── like.svg │ │ ├── osmosis.svg │ │ ├── sifchain.svg │ │ ├── spay.svg │ │ ├── stargaze.png │ │ └── terra.svg │ ├── top_right_arrow.svg │ ├── top_right_first.svg │ ├── wallets │ │ ├── keplr.png │ │ └── walletConnect.png │ └── warning.png ├── components │ ├── Accordions │ │ ├── index.css │ │ └── index.js │ ├── AutoCompleteTextField │ │ ├── index.css │ │ └── index.js │ ├── CircularProgress │ │ ├── index.css │ │ └── index.js │ ├── CopyButton │ │ ├── TextButton.js │ │ ├── index.css │ │ └── index.js │ ├── DataTable │ │ ├── index.css │ │ └── index.js │ ├── DotsLoading │ │ ├── index.css │ │ └── index.js │ ├── Icon.js │ ├── ImageOnLoad │ │ ├── BackgroundImage.js │ │ ├── VideoOnLoad.js │ │ ├── index.css │ │ └── index.js │ ├── NetworkImages │ │ ├── ImagesOptions.js │ │ ├── SvgImages.js │ │ └── index.js │ ├── NoData │ │ ├── ComingSoon.js │ │ ├── index.css │ │ └── index.js │ ├── Player │ │ ├── Controls │ │ │ ├── BackButton.js │ │ │ ├── ForwardButton.js │ │ │ ├── PlayButton.js │ │ │ └── VolumeButton.js │ │ ├── index.css │ │ └── index.js │ ├── QRModal │ │ ├── index.tsx │ │ └── modal.tsx │ ├── SelectField │ │ ├── TokenSelectField.js │ │ ├── index.css │ │ └── index.js │ ├── SkeletonLoader │ │ ├── Activity │ │ │ ├── index.css │ │ │ └── index.js │ │ ├── CollectionInfo │ │ │ ├── index.css │ │ │ └── index.js │ │ ├── CollectionSkeletonLoader.js │ │ ├── CollectionTable │ │ │ ├── Image.js │ │ │ └── Text.js │ │ ├── MyAccount │ │ │ ├── index.css │ │ │ └── index.js │ │ ├── NFTCard │ │ │ ├── index.css │ │ │ └── index.js │ │ ├── ProfileSkeletonLoader.js │ │ ├── SingleAsset │ │ │ ├── CardSkeletonLoader.js │ │ │ ├── ImageSkeletonLoader.js │ │ │ ├── MoreInfoSkeletonLoader.js │ │ │ └── index.css │ │ ├── index.css │ │ └── index.js │ ├── Snackbar │ │ ├── index.css │ │ └── index.js │ ├── Stepper │ │ ├── index.css │ │ └── index.js │ └── TextField │ │ ├── index.css │ │ └── index.js ├── config.js ├── constants │ ├── IBCTokens.js │ ├── account.js │ ├── activity.js │ ├── auctions.js │ ├── campaign.js │ ├── collections.js │ ├── explore.js │ ├── faucet.js │ ├── filters.js │ ├── home.js │ ├── marketplace.js │ ├── myAccount.js │ ├── navbar.js │ ├── restURL.js │ ├── seo.js │ ├── snackbar.js │ ├── url.js │ └── wallet.js ├── containers │ ├── Collections │ │ ├── List.js │ │ ├── SearchTextField.js │ │ ├── Table.js │ │ ├── index.css │ │ └── index.js │ ├── Home │ │ ├── Collections.js │ │ ├── Launchpad.js │ │ ├── RecentlyListed.js │ │ ├── index.css │ │ └── index.js │ ├── MarketPlace │ │ ├── ActiveCard │ │ │ ├── DeList │ │ │ │ ├── DeListDialog.js │ │ │ │ ├── NFTInfo.js │ │ │ │ ├── index.css │ │ │ │ └── index.js │ │ │ ├── MoreInfo │ │ │ │ ├── Activity.js │ │ │ │ ├── BidHistory.js │ │ │ │ ├── Info.js │ │ │ │ ├── Listings.js │ │ │ │ ├── Offers.js │ │ │ │ ├── index.css │ │ │ │ └── index.js │ │ │ ├── PlaceBid │ │ │ │ ├── Counter.js │ │ │ │ ├── PlaceBidButton.js │ │ │ │ ├── PlaceBidDialog │ │ │ │ │ ├── PlaceBidButton.js │ │ │ │ │ ├── index.css │ │ │ │ │ └── index.js │ │ │ │ ├── index.css │ │ │ │ └── index.js │ │ │ ├── PurchaseCard │ │ │ │ ├── BuyNFTButton.js │ │ │ │ ├── BuyNFTDialogResponse │ │ │ │ │ ├── Info.js │ │ │ │ │ ├── index.css │ │ │ │ │ └── index.js │ │ │ │ ├── PurchaseTab.js │ │ │ │ ├── ValidityTab.js │ │ │ │ ├── index.css │ │ │ │ └── index.js │ │ │ ├── TransferSell │ │ │ │ ├── ListDialog │ │ │ │ │ ├── ChoosePrice │ │ │ │ │ │ ├── PriceTextField.js │ │ │ │ │ │ ├── SelectTokenSelectField.js │ │ │ │ │ │ ├── index.css │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── ConfirmListingDialog │ │ │ │ │ │ ├── index.css │ │ │ │ │ │ └── index.js │ │ │ │ │ ├── Info.js │ │ │ │ │ ├── ListingTabs.js │ │ │ │ │ ├── SplitInfo.js │ │ │ │ │ ├── SplitInfoSwitch.js │ │ │ │ │ ├── TimedAuction │ │ │ │ │ │ ├── EndDateTextField.js │ │ │ │ │ │ ├── MinBidPrice │ │ │ │ │ │ │ ├── BidPercentageTextField.js │ │ │ │ │ │ │ ├── index.css │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ ├── StartDateTextField.js │ │ │ │ │ │ ├── WhiteListSwitch.js │ │ │ │ │ │ └── WhiteListTags.js │ │ │ │ │ ├── TotalSale.js │ │ │ │ │ ├── index.css │ │ │ │ │ └── index.js │ │ │ │ ├── ReciepentAddressTextField.js │ │ │ │ ├── TransferDialog.js │ │ │ │ ├── index.css │ │ │ │ └── index.js │ │ │ ├── index.css │ │ │ └── index.js │ │ ├── Auctions │ │ │ ├── Card.js │ │ │ ├── EndsInCounter.js │ │ │ ├── Filters │ │ │ │ ├── AuctionTypes.js │ │ │ │ ├── OnSaleIn.js │ │ │ │ ├── PriceRange.js │ │ │ │ └── index.js │ │ │ ├── List.js │ │ │ ├── LiveInCounter.js │ │ │ ├── SearchTextField.js │ │ │ ├── SortByPopover.js │ │ │ └── index.css │ │ ├── BurnDialog │ │ │ ├── Burn.js │ │ │ ├── BurnIDTextField.js │ │ │ ├── index.css │ │ │ └── index.js │ │ ├── CollectNowList.js │ │ ├── Filters │ │ │ ├── Chains.js │ │ │ ├── Collections.js │ │ │ ├── Genre.js │ │ │ ├── OnSaleIn.js │ │ │ ├── PriceRange.js │ │ │ ├── Status.js │ │ │ ├── Types.js │ │ │ ├── index.css │ │ │ └── index.js │ │ ├── Launchpad │ │ │ ├── SearchTextField.js │ │ │ └── index.js │ │ ├── MenuPopover │ │ │ ├── index.css │ │ │ └── index.js │ │ ├── SearchTextField.js │ │ ├── SortByPopover.js │ │ ├── Tabs │ │ │ ├── index.css │ │ │ └── index.js │ │ ├── index.css │ │ └── index.js │ ├── MyAccount │ │ ├── Activity │ │ │ ├── index.css │ │ │ └── index.js │ │ ├── IBCTokens │ │ │ ├── AmountValueTextField.js │ │ │ ├── DepositeDialog.js │ │ │ ├── Table.js │ │ │ ├── WithDrawDialog.js │ │ │ ├── index.css │ │ │ └── index.js │ │ ├── Owned │ │ │ ├── CollectionList.js │ │ │ ├── ListingPage.js │ │ │ └── NFTsList.js │ │ ├── index.css │ │ └── index.js │ ├── NavBar │ │ ├── AppsPopover.js │ │ ├── ConnectButton.js │ │ ├── ConnectDialog │ │ │ ├── KeplrButton.js │ │ │ ├── WalletConnectButton.js │ │ │ ├── index.css │ │ │ └── index.js │ │ ├── ExpansionButton.js │ │ ├── ProfilePopover.js │ │ ├── SidePanel │ │ │ ├── Collections.js │ │ │ ├── FaucetDialog │ │ │ │ ├── index.css │ │ │ │ └── index.js │ │ │ ├── FeeGrant │ │ │ │ ├── index.css │ │ │ │ └── index.js │ │ │ ├── IBCTokens.js │ │ │ ├── NFTs.js │ │ │ ├── TotalValueTraded.js │ │ │ ├── index.css │ │ │ └── index.js │ │ ├── Tabs.js │ │ ├── index.css │ │ └── index.js │ ├── SingleAsset │ │ ├── Breadcrumb │ │ │ ├── index.css │ │ │ └── index.js │ │ ├── Card │ │ │ ├── index.css │ │ │ └── index.js │ │ ├── Controls.js │ │ ├── VideoPlayer.js │ │ ├── index.css │ │ └── index.js │ ├── SingleCollection │ │ ├── Activity │ │ │ ├── index.css │ │ │ └── index.js │ │ ├── ActivityTable.js │ │ ├── Auctions │ │ │ ├── Filters │ │ │ │ ├── AuctionTypes.js │ │ │ │ ├── OnSaleIn.js │ │ │ │ ├── PriceRange.js │ │ │ │ └── index.js │ │ │ ├── Search.js │ │ │ ├── SortByPopover.js │ │ │ └── index.js │ │ ├── Filters │ │ │ ├── OnSaleIn.js │ │ │ ├── PriceRange.js │ │ │ └── index.js │ │ ├── JsonSchemaDialog │ │ │ ├── index.css │ │ │ └── index.js │ │ ├── List.js │ │ ├── ListingPage.js │ │ ├── MyNFTs.js │ │ ├── SearchListedTextField.js │ │ ├── SearchNonListedTextField.js │ │ ├── SortByPopover.js │ │ ├── index.css │ │ └── index.js │ └── Snackbar.js ├── index.css ├── index.js ├── react-app-env.d.ts ├── reducers │ ├── account │ │ ├── BCDetails.js │ │ ├── IBCTokens.js │ │ ├── index.js │ │ └── wallet.js │ ├── activity.js │ ├── auctions │ │ ├── filters.js │ │ └── index.js │ ├── campaign.js │ ├── collection │ │ ├── filters.js │ │ └── index.js │ ├── explore.js │ ├── faucet.js │ ├── filters.js │ ├── home.js │ ├── index.js │ ├── language.js │ ├── marketplace.js │ ├── myAccount.js │ ├── navbar.js │ └── snackbar.js ├── registry │ ├── index.js │ └── omniflix_custom_ts_types │ │ ├── cosmos │ │ └── base │ │ │ ├── query │ │ │ └── v1beta1 │ │ │ │ └── pagination.ts │ │ │ └── v1beta1 │ │ │ └── coin.ts │ │ ├── gogoproto │ │ └── gogo.ts │ │ ├── google │ │ ├── api │ │ │ ├── annotations.ts │ │ │ └── http.ts │ │ └── protobuf │ │ │ ├── descriptor.ts │ │ │ ├── duration.ts │ │ │ └── timestamp.ts │ │ ├── marketplace │ │ └── v1beta1 │ │ │ ├── auction.ts │ │ │ ├── events.ts │ │ │ ├── genesis.ts │ │ │ ├── listing.ts │ │ │ ├── params.ts │ │ │ ├── query.ts │ │ │ └── tx.ts │ │ └── onft │ │ └── v1beta1 │ │ ├── events.ts │ │ ├── genesis.ts │ │ ├── onft.ts │ │ ├── query.ts │ │ └── tx.ts ├── serviceWorker.js └── utils │ ├── address.js │ ├── arrays.js │ ├── defaultOptions.js │ ├── filters.js │ ├── numbers.js │ ├── price.js │ ├── strings.js │ └── variables.js └── tsconfig.json /.eslintignore: -------------------------------------------------------------------------------- 1 | /build/ 2 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "es6": true 5 | }, 6 | "extends": [ 7 | "standard", 8 | "eslint:recommended", 9 | "plugin:react/recommended" 10 | ], 11 | "globals": { 12 | "Atomics": "readonly", 13 | "SharedArrayBuffer": "readonly" 14 | }, 15 | "parserOptions": { 16 | "ecmaFeatures": { 17 | "jsx": true 18 | }, 19 | "ecmaVersion": 2020, 20 | "sourceType": "module" 21 | }, 22 | "plugins": [ 23 | "react" 24 | ], 25 | "settings": { 26 | "react": { 27 | "version": "detect" 28 | } 29 | }, 30 | "rules": { 31 | "indent": [ 32 | 2, 33 | 4 34 | ], 35 | "arrow-parens": [ 36 | 2, 37 | "always" 38 | ], 39 | "semi": [ 40 | 2, 41 | "always" 42 | ], 43 | "comma-dangle": [ 44 | 2, 45 | "always-multiline" 46 | ], 47 | "jsx-quotes": [ 48 | 2 49 | ], 50 | "dot-notation": [ 51 | 2, 52 | { 53 | "allowPattern": "^[0-9A-Za-z]+(_[0-9A-Za-z]+)+$" 54 | } 55 | ], 56 | "curly": [ 57 | 2, 58 | "all" 59 | ], 60 | "react/jsx-first-prop-new-line": [ 61 | 2, 62 | "multiline-multiprop" 63 | ], 64 | "react/jsx-indent-props": [ 65 | 2, 66 | "first" 67 | ], 68 | "react/sort-prop-types": [ 69 | 2, 70 | { 71 | "callbacksLast": true, 72 | "requiredFirst": true 73 | } 74 | ], 75 | "react/jsx-sort-props": [ 76 | 2, 77 | { 78 | "callbacksLast": true, 79 | "reservedFirst": true, 80 | "shorthandFirst": true 81 | } 82 | ] 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # dependencies 2 | node_modules 3 | 4 | .idea 5 | # testing 6 | /coverage 7 | 8 | # production 9 | /build 10 | /logs 11 | 12 | # misc 13 | .DS_Store 14 | 15 | npm-debug.log* 16 | yarn-debug.log* 17 | yarn-error.log* 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Nucleus 2 | 3 | # Install dependencies 4 | 5 | yarn install or npm install 6 | 7 | # start app 8 | 9 | yarn start or npm start 10 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nucleus", 3 | "version": "0.0.1", 4 | "main": "index.js", 5 | "repository": "git@gitlab.ctlabs.in:omniflix/nucleus/front_end.git", 6 | "license": "MIT", 7 | "private": true, 8 | "dependencies": { 9 | "@cosmjs/amino": "^0.26.0", 10 | "@cosmjs/encoding": "^0.27.1", 11 | "@cosmjs/proto-signing": "^0.26.5", 12 | "@cosmjs/stargate": "^0.26.0", 13 | "@emotion/react": "^11.4.1", 14 | "@emotion/styled": "^11.3.0", 15 | "@material-ui/core": "^4.12.3", 16 | "@material-ui/icons": "^4.11.2", 17 | "@material-ui/lab": "^4.0.0-alpha.61", 18 | "@mui/icons-material": "^5.0.3", 19 | "@mui/lab": "^5.0.0-alpha.90", 20 | "@mui/material": "^5.0.3", 21 | "@mui/styles": "^5.0.1", 22 | "@mui/x-date-pickers": "^5.0.0-beta.1", 23 | "@walletconnect/client": "^1.8.0", 24 | "@walletconnect/utils": "^1.8.0", 25 | "axios": "^0.21.4", 26 | "canvas-confetti": "^1.5.1", 27 | "classnames": "^2.3.1", 28 | "cosmjs-types": "^0.4.1", 29 | "date-fns": "^2.28.0", 30 | "file-saver": "^2.0.5", 31 | "history": "^5.0.0", 32 | "long": "^5.2.0", 33 | "moment": "^2.29.1", 34 | "mui-datatables": "^3.7.8", 35 | "prop-types": "^15.7.2", 36 | "qrcode.react": "^3.1.0", 37 | "react": "^16.12.0", 38 | "react-dom": "^16.13.1", 39 | "react-helmet": "^6.1.0", 40 | "react-otp-input": "^2.4.0", 41 | "react-redux": "^7.2.0", 42 | "react-router": "^5.2.0", 43 | "react-router-dom": "^5.2.0", 44 | "react-scripts": "3.4.0", 45 | "react-select": "^5.2.1", 46 | "redux": "^4.0.5", 47 | "redux-devtools-extension": "^2.13.8", 48 | "redux-thunk": "^2.3.0", 49 | "serve": "^13.0.2", 50 | "symbol-observable": "^4.0.0", 51 | "typescript": "^4.5.5", 52 | "video.js": "^7.17.0" 53 | }, 54 | "scripts": { 55 | "start": "react-scripts start", 56 | "build": "react-scripts build", 57 | "test": "react-scripts test", 58 | "eject": "react-scripts eject" 59 | }, 60 | "devDependencies": { 61 | "env-cmd": "^10.1.0", 62 | "eslint": "^6.8.0", 63 | "eslint-config-standard": "^14.1.0", 64 | "eslint-plugin-import": "^2.20.1", 65 | "eslint-plugin-node": "^11.0.0", 66 | "eslint-plugin-promise": "^4.2.1", 67 | "eslint-plugin-react": "^7.18.3", 68 | "eslint-plugin-standard": "^4.0.1" 69 | }, 70 | "browserslist": { 71 | "production": [ 72 | ">0.2%", 73 | "not dead", 74 | "not op_mini all" 75 | ], 76 | "development": [ 77 | "last 1 chrome version", 78 | "last 1 firefox version", 79 | "last 1 safari version" 80 | ] 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /public/assets/logos/logo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crypto27dev/omniflix_nft_market/c5bb682d3f596179a4ba7089453e3af39e56c179/public/assets/logos/logo.gif -------------------------------------------------------------------------------- /public/assets/logos/logo_192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crypto27dev/omniflix_nft_market/c5bb682d3f596179a4ba7089453e3af39e56c179/public/assets/logos/logo_192x192.png -------------------------------------------------------------------------------- /public/assets/logos/logo_512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crypto27dev/omniflix_nft_market/c5bb682d3f596179a4ba7089453e3af39e56c179/public/assets/logos/logo_512x512.png -------------------------------------------------------------------------------- /public/assets/logos/og_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crypto27dev/omniflix_nft_market/c5bb682d3f596179a4ba7089453e3af39e56c179/public/assets/logos/og_image.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crypto27dev/omniflix_nft_market/c5bb682d3f596179a4ba7089453e3af39e56c179/public/favicon.ico -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "OmniFlix", 3 | "name": "OmniFlix Network", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "assets/logos/logo_192x192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "assets/logos/logo_512x512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#191D21" 25 | } 26 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | -------------------------------------------------------------------------------- /scripts/dev_deploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ssh-keyscan gitlab.ctlabs.in >>"${HOME}"/.ssh/known_hosts && 4 | known_hosts=$(sort <"${HOME}"/.ssh/known_hosts | uniq) && 5 | echo "${known_hosts}" >"${HOME}"/.ssh/known_hosts 6 | 7 | PROJECT_DIR=${HOME}/omniflix/nucleus/front_end 8 | if [[ ! -d ${PROJECT_DIR} ]]; then 9 | cd "${HOME}" && 10 | git clone git@gitlab.ctlabs.in:omniflix/nucleus/front_end.git 11 | fi 12 | 13 | cd "${PROJECT_DIR}" && 14 | git stash && 15 | git checkout development && 16 | git pull origin development && 17 | yarn && 18 | yarn build 19 | -------------------------------------------------------------------------------- /scripts/frontier_deploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ssh-keyscan gitlab.ctlabs.in >>"${HOME}"/.ssh/known_hosts && 4 | known_hosts=$(sort <"${HOME}"/.ssh/known_hosts | uniq) && 5 | echo "${known_hosts}" >"${HOME}"/.ssh/known_hosts 6 | 7 | PROJECT_DIR=${HOME}/omniflix/nucleus-frontier/front_end 8 | if [[ ! -d ${PROJECT_DIR} ]]; then 9 | cd "${HOME}" && 10 | git clone git@gitlab.ctlabs.in:omniflix/nucleus-frontier/front_end.git 11 | fi 12 | 13 | cd "${PROJECT_DIR}" && 14 | git stash && 15 | git checkout frontier && 16 | git pull origin frontier && 17 | yarn && 18 | yarn build && 19 | mkdir -p /var/www/html/ && 20 | sudo rm -rf /var/www/html/frontier.omniflix.market/ && 21 | sudo cp -r "${PROJECT_DIR}"/build/ /var/www/html/frontier.omniflix.market/ 22 | 23 | -------------------------------------------------------------------------------- /scripts/prod_deploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ssh-keyscan gitlab.ctlabs.in >>"${HOME}"/.ssh/known_hosts && 4 | known_hosts=$(sort <"${HOME}"/.ssh/known_hosts | uniq) && 5 | echo "${known_hosts}" >"${HOME}"/.ssh/known_hosts 6 | 7 | PROJECT_DIR=${HOME}/omniflix/nucleus/front_end 8 | if [[ ! -d ${PROJECT_DIR} ]]; then 9 | cd "${HOME}" && 10 | git clone git@gitlab.ctlabs.in:omniflix/nucleus/front_end.git 11 | fi 12 | 13 | cd "${PROJECT_DIR}" && 14 | git stash && 15 | git checkout master && 16 | git pull origin master && 17 | yarn && 18 | yarn build && 19 | mkdir -p /var/www/html/ && 20 | sudo rm -rf /var/www/html/omniflix.market/ && 21 | sudo cp -r "${PROJECT_DIR}"/build/ /var/www/html/omniflix.market/ 22 | 23 | -------------------------------------------------------------------------------- /scripts/staging_deploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ssh-keyscan gitlab.ctlabs.in >>"${HOME}"/.ssh/known_hosts && 4 | known_hosts=$(sort <"${HOME}"/.ssh/known_hosts | uniq) && 5 | echo "${known_hosts}" >"${HOME}"/.ssh/known_hosts 6 | 7 | PROJECT_DIR=${HOME}/omniflix/nucleus/front_end 8 | if [[ ! -d ${PROJECT_DIR} ]]; then 9 | cd "${HOME}" && 10 | git clone git@gitlab.ctlabs.in:omniflix/nucleus/front_end.git 11 | fi 12 | 13 | cd "${PROJECT_DIR}" && 14 | git stash && 15 | git checkout staging && 16 | git pull origin staging && 17 | yarn && 18 | yarn build 19 | -------------------------------------------------------------------------------- /src/App.js: -------------------------------------------------------------------------------- 1 | import React, { useEffect } from 'react'; 2 | import './app.css'; 3 | import Router from './Router'; 4 | import Snackbar from './containers/Snackbar'; 5 | 6 | const App = () => { 7 | useEffect(() => { 8 | const element = document.getElementById('loader'); 9 | element.remove(); 10 | }, []); 11 | 12 | return ( 13 |
14 | 15 | 16 |
17 | ); 18 | }; 19 | 20 | export default App; 21 | -------------------------------------------------------------------------------- /src/Router.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Route, Switch } from 'react-router-dom'; 3 | import NavBar from './containers/NavBar'; 4 | import MarketPlace from './containers/MarketPlace'; 5 | import Collections from './containers/Collections'; 6 | import Home from './containers/Home'; 7 | import SingleAsset from './containers/SingleAsset'; 8 | import SingleCollection from './containers/SingleCollection'; 9 | import MyAccount from './containers/MyAccount'; 10 | 11 | const routes = [{ 12 | path: '/home', 13 | component: Home, 14 | }, { 15 | path: '/nfts', 16 | component: MarketPlace, 17 | }, { 18 | path: '/collections', 19 | component: Collections, 20 | }, { 21 | path: '/account/:address/:tab', 22 | component: MyAccount, 23 | }, { 24 | path: '/account/:address', 25 | component: MyAccount, 26 | }, { 27 | path: '/collection/:id', 28 | component: SingleCollection, 29 | }, { 30 | path: '/nft/:nftID', 31 | component: SingleAsset, 32 | }]; 33 | 34 | const Router = () => { 35 | return ( 36 |
37 | 38 |
39 | 40 | {routes.map((route) => 41 | , 46 | )} 47 | 51 | 52 |
53 |
54 | ); 55 | }; 56 | 57 | export default Router; 58 | -------------------------------------------------------------------------------- /src/actions/campaign.js: -------------------------------------------------------------------------------- 1 | import { 2 | FEE_GRANT_ALLOWANCE_ERROR, 3 | FEE_GRANT_ALLOWANCE_IN_PROGRESS, 4 | FEE_GRANT_ALLOWANCE_SUCCESS, 5 | } from '../constants/campaign'; 6 | import { FEE_GRANT_ALLOWANCE_URL } from '../constants/url'; 7 | import Axios from 'axios'; 8 | 9 | const feeGrantAllowanceInProgress = () => { 10 | return { 11 | type: FEE_GRANT_ALLOWANCE_IN_PROGRESS, 12 | }; 13 | }; 14 | 15 | const feeGrantAllowanceSuccess = (value, message) => { 16 | return { 17 | type: FEE_GRANT_ALLOWANCE_SUCCESS, 18 | value, 19 | message, 20 | variant: 'success', 21 | }; 22 | }; 23 | 24 | const feeGrantAllowanceError = (message) => { 25 | return { 26 | type: FEE_GRANT_ALLOWANCE_ERROR, 27 | message, 28 | variant: 'error', 29 | }; 30 | }; 31 | 32 | export const feeGrantAllowanceClaim = (cb) => (dispatch) => { 33 | dispatch(feeGrantAllowanceInProgress()); 34 | 35 | Axios.get(FEE_GRANT_ALLOWANCE_URL, { 36 | headers: { 37 | Accept: 'application/json, text/plain, */*', 38 | Authorization: 'Bearer ' + localStorage.getItem('acToken_of_nucleus'), 39 | }, 40 | }) 41 | .then((res) => { 42 | dispatch(feeGrantAllowanceSuccess(res.data, 'Success')); 43 | cb(res.data); 44 | }) 45 | .catch((error) => { 46 | dispatch(feeGrantAllowanceError( 47 | error.response && 48 | error.response.data && 49 | error.response.data.message 50 | ? error.response.data.message 51 | : 'Failed!', 52 | )); 53 | cb(null); 54 | }); 55 | }; 56 | -------------------------------------------------------------------------------- /src/actions/collections/auctionFilters.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crypto27dev/omniflix_nft_market/c5bb682d3f596179a4ba7089453e3af39e56c179/src/actions/collections/auctionFilters.js -------------------------------------------------------------------------------- /src/actions/collections/filters.js: -------------------------------------------------------------------------------- 1 | import { 2 | COLLECTION_FILTERS_HIDE, 3 | COLLECTION_FILTERS_SHOW, 4 | COLLECTION_ON_SALE_IN_SEARCH_SET, 5 | COLLECTION_ON_SALE_IN_SET, 6 | COLLECTION_PRICE_RANGE_COIN_SET, 7 | COLLECTION_PRICE_RANGE_SET, 8 | } from '../../constants/collections'; 9 | 10 | export const showCollectionFilters = () => { 11 | return { 12 | type: COLLECTION_FILTERS_SHOW, 13 | }; 14 | }; 15 | 16 | export const hideCollectionFilters = () => { 17 | return { 18 | type: COLLECTION_FILTERS_HIDE, 19 | }; 20 | }; 21 | 22 | export const setCollectionPriceRangeCoin = (value) => { 23 | return { 24 | type: COLLECTION_PRICE_RANGE_COIN_SET, 25 | value, 26 | }; 27 | }; 28 | 29 | export const setCollectionPriceRange = (value) => { 30 | return { 31 | type: COLLECTION_PRICE_RANGE_SET, 32 | value, 33 | }; 34 | }; 35 | 36 | export const setCollectionOnSaleIn = (value) => { 37 | return { 38 | type: COLLECTION_ON_SALE_IN_SET, 39 | value, 40 | }; 41 | }; 42 | 43 | export const setCollectionOnSaleInSearch = (value) => { 44 | return { 45 | type: COLLECTION_ON_SALE_IN_SEARCH_SET, 46 | value, 47 | }; 48 | }; 49 | -------------------------------------------------------------------------------- /src/actions/explore.js: -------------------------------------------------------------------------------- 1 | import { ACTIVE_CARD_HIDE, ACTIVE_CARD_SET } from '../constants/explore'; 2 | 3 | export const showActiveCard = (value) => { 4 | return { 5 | type: ACTIVE_CARD_SET, 6 | value, 7 | }; 8 | }; 9 | 10 | export const hideActiveCard = () => { 11 | return { 12 | type: ACTIVE_CARD_HIDE, 13 | }; 14 | }; 15 | -------------------------------------------------------------------------------- /src/actions/navbar.js: -------------------------------------------------------------------------------- 1 | import { 2 | CONNECT_DIALOG_HIDE, 3 | CONNECT_DIALOG_SHOW, 4 | HIDE_SIDE_BAR_SET, 5 | SEARCH_VALUE_SET, 6 | SHOW_SIDE_BAR_SET, 7 | } from '../constants/navbar'; 8 | 9 | export const searchFieldSet = (value) => { 10 | return { 11 | type: SEARCH_VALUE_SET, 12 | value, 13 | }; 14 | }; 15 | 16 | export const showSideBar = () => { 17 | return { 18 | type: SHOW_SIDE_BAR_SET, 19 | }; 20 | }; 21 | 22 | export const hideSideBar = () => { 23 | return { 24 | type: HIDE_SIDE_BAR_SET, 25 | }; 26 | }; 27 | 28 | export const showConnectDialog = () => { 29 | return { 30 | type: CONNECT_DIALOG_SHOW, 31 | }; 32 | }; 33 | 34 | export const hideConnectDialog = () => { 35 | return { 36 | type: CONNECT_DIALOG_HIDE, 37 | }; 38 | }; 39 | -------------------------------------------------------------------------------- /src/actions/snackbar.js: -------------------------------------------------------------------------------- 1 | import { MESSAGE_SHOW, SNACKBAR_HIDE } from '../constants/snackbar'; 2 | 3 | export const hideSnackbar = () => { 4 | return { 5 | type: SNACKBAR_HIDE, 6 | }; 7 | }; 8 | 9 | export const showMessage = (message, variant, hash, explorer) => { 10 | return { 11 | type: MESSAGE_SHOW, 12 | message, 13 | variant, 14 | hash, 15 | explorer, 16 | }; 17 | }; 18 | -------------------------------------------------------------------------------- /src/assets/arrow-right-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/auction/live.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/assets/calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crypto27dev/omniflix_nft_market/c5bb682d3f596179a4ba7089453e3af39e56c179/src/assets/calendar.png -------------------------------------------------------------------------------- /src/assets/collections/failed.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/collections/success.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/copy-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/copy.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/diamond.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/download.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 8 | 9 | 11 | 12 | 13 | 14 | 16 | 17 | 18 | 19 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/assets/dummy/CryptoKitty.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crypto27dev/omniflix_nft_market/c5bb682d3f596179a4ba7089453e3af39e56c179/src/assets/dummy/CryptoKitty.jpg -------------------------------------------------------------------------------- /src/assets/error.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/explore/Vector.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/explore/expand more.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/explore/expand.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/explore/external-link.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/explore/filter.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/explore/grid.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/explore/more.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/explore/success.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/explore/transferability.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 8 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/failed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/feeGrant/feeGrant-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crypto27dev/omniflix_nft_market/c5bb682d3f596179a4ba7089453e3af39e56c179/src/assets/feeGrant/feeGrant-bg.png -------------------------------------------------------------------------------- /src/assets/feeGrant/gas-station.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/home.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/info.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/my-account/calendar.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/my-account/copy.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/my-account/share.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/navbar/wallet.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/refresh.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/right-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/share-link.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/share.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/social/github.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/social/telegram.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/social/twitter.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/social/website.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/social/youtube.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/success.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/success_gradient.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/success_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crypto27dev/omniflix_nft_market/c5bb682d3f596179a4ba7089453e3af39e56c179/src/assets/success_image.png -------------------------------------------------------------------------------- /src/assets/tokens/KI.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/tokens/M-Faucet Congrats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crypto27dev/omniflix_nft_market/c5bb682d3f596179a4ba7089453e3af39e56c179/src/assets/tokens/M-Faucet Congrats.png -------------------------------------------------------------------------------- /src/assets/tokens/akash.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/tokens/crypto.com.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 9 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/tokens/juno.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/tokens/spay.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/tokens/stargaze.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crypto27dev/omniflix_nft_market/c5bb682d3f596179a4ba7089453e3af39e56c179/src/assets/tokens/stargaze.png -------------------------------------------------------------------------------- /src/assets/tokens/terra.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 10 | 11 | 12 | 15 | 16 | 19 | 20 | -------------------------------------------------------------------------------- /src/assets/wallets/keplr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crypto27dev/omniflix_nft_market/c5bb682d3f596179a4ba7089453e3af39e56c179/src/assets/wallets/keplr.png -------------------------------------------------------------------------------- /src/assets/wallets/walletConnect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crypto27dev/omniflix_nft_market/c5bb682d3f596179a4ba7089453e3af39e56c179/src/assets/wallets/walletConnect.png -------------------------------------------------------------------------------- /src/assets/warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crypto27dev/omniflix_nft_market/c5bb682d3f596179a4ba7089453e3af39e56c179/src/assets/warning.png -------------------------------------------------------------------------------- /src/components/Accordions/index.css: -------------------------------------------------------------------------------- 1 | .accordion { 2 | box-sizing: border-box; 3 | border-radius: 5px; 4 | } 5 | 6 | .accordion .summary { 7 | width: 100%; 8 | padding: 19px 20px; 9 | } 10 | 11 | .accordion .summary p { 12 | font-family: 'Inter', sans-serif; 13 | font-weight: 600; 14 | font-size: 18px; 15 | line-height: 22px; 16 | letter-spacing: 0.005em; 17 | color: #F2F2F2; 18 | } 19 | 20 | .accordion .summary svg { 21 | fill: #F2F2F2; 22 | } 23 | 24 | .accordion .Mui-expanded svg { 25 | fill: url(#paint0_linear); 26 | } 27 | -------------------------------------------------------------------------------- /src/components/Accordions/index.js: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { styled } from '@mui/material/styles'; 3 | import MuiAccordion from '@mui/material/Accordion'; 4 | import MuiAccordionSummary from '@mui/material/AccordionSummary'; 5 | import MuiAccordionDetails from '@mui/material/AccordionDetails'; 6 | import Typography from '@mui/material/Typography'; 7 | import * as PropTypes from 'prop-types'; 8 | import { ReactComponent as ExpandIcon } from '../../assets/explore/expand.svg'; 9 | import ClassNames from 'classnames'; 10 | import './index.css'; 11 | 12 | const Accordion = styled((props) => ( 13 | 14 | ))(({ theme }) => ({ 15 | color: '#F2F2F2', 16 | backgroundColor: '#21262b66', 17 | border: '1px solid #2F363D', 18 | '&:before': { 19 | display: 'none', 20 | }, 21 | })); 22 | 23 | const AccordionSummary = styled((props) => ( 24 | } 26 | {...props} 27 | /> 28 | ))(({ theme }) => ({ 29 | backgroundColor: 'unset', 30 | padding: '19px 20px', 31 | '& .MuiAccordionSummary-expandIconWrapper': { 32 | transform: 'rotate(180deg)', 33 | }, 34 | '& .MuiAccordionSummary-expandIconWrapper.Mui-expanded': { 35 | transform: 'rotate(0deg)', 36 | }, 37 | '& .MuiAccordionSummary-content': { 38 | margin: 0, 39 | }, 40 | })); 41 | 42 | const AccordionDetails = styled(MuiAccordionDetails)(({ theme }) => ({ 43 | padding: '20px', 44 | borderTop: '1px solid #2F363D', 45 | })); 46 | 47 | const Accordions = (props) => { 48 | return ( 49 | 52 | 53 | {props.name} 54 | 55 | 56 | {props.children} 57 | 58 | 59 | ); 60 | }; 61 | 62 | Accordions.propTypes = { 63 | name: PropTypes.string.isRequired, 64 | children: PropTypes.any, 65 | className: PropTypes.string, 66 | }; 67 | 68 | export default Accordions; 69 | -------------------------------------------------------------------------------- /src/components/AutoCompleteTextField/index.css: -------------------------------------------------------------------------------- 1 | .auto_complete div[role='button'] { 2 | background: #3A3A3A; 3 | border-radius: 50px; 4 | font-family: 'Source Sans Pro', sans-serif; 5 | font-weight: 400; 6 | font-size: 14px; 7 | line-height: 18px; 8 | color: #696969; 9 | padding: 5px 10px; 10 | } 11 | 12 | .auto_complete div[role='button'] > span { 13 | padding: unset; 14 | } 15 | 16 | .auto_complete div[role='button'] > svg { 17 | fill: #696969; 18 | margin: 0 0 0 10px; 19 | width: 16px; 20 | } 21 | 22 | .auto_complete.auto_complete_icon div[role='button'] { 23 | background: unset; 24 | border: unset; 25 | } 26 | 27 | .tags_select_field input::placeholder { 28 | opacity: 1; 29 | } 30 | 31 | .auto_complete .delete_icon { 32 | padding: 0; 33 | margin: 0 0 0 5px; 34 | } 35 | 36 | .auto_complete .delete_icon svg { 37 | width: 80%; 38 | } 39 | -------------------------------------------------------------------------------- /src/components/CircularProgress/index.css: -------------------------------------------------------------------------------- 1 | .circular_progress { 2 | width: 100%; 3 | height: 200px; 4 | display: flex; 5 | align-items: center; 6 | justify-content: center; 7 | } 8 | 9 | .circular_progress.full_screen { 10 | position: fixed; 11 | width: 100%; 12 | height: 100%; 13 | top: 0; 14 | left: 0; 15 | background: #00000070; 16 | z-index: 9; 17 | } 18 | 19 | .circular_progress > div { 20 | color: #3E8EF7; 21 | } 22 | -------------------------------------------------------------------------------- /src/components/CircularProgress/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { CircularProgress as MaterialCircularProgress } from '@material-ui/core'; 3 | import './index.css'; 4 | import * as PropTypes from 'prop-types'; 5 | import ClassNames from 'classnames'; 6 | 7 | const CircularProgress = (props) => { 8 | return ( 9 |
10 | 11 |
12 | ); 13 | }; 14 | 15 | CircularProgress.propTypes = { 16 | className: PropTypes.string, 17 | }; 18 | 19 | export default CircularProgress; 20 | -------------------------------------------------------------------------------- /src/components/CopyButton/TextButton.js: -------------------------------------------------------------------------------- 1 | import { Button, Tooltip } from '@mui/material'; 2 | import * as PropTypes from 'prop-types'; 3 | import React from 'react'; 4 | import './index.css'; 5 | 6 | const CopyButton = (props) => { 7 | const [open, setOpen] = React.useState(false); 8 | 9 | const handleClose = () => { 10 | setOpen(false); 11 | }; 12 | 13 | const handleCopy = (e) => { 14 | navigator.clipboard.writeText(props.data); 15 | 16 | e.stopPropagation(); 17 | setOpen(true); 18 | setTimeout(handleClose, 1000); 19 | }; 20 | 21 | return ( 22 | 26 | 32 | 33 | ); 34 | }; 35 | 36 | CopyButton.propTypes = { 37 | data: PropTypes.string.isRequired, 38 | children: PropTypes.any, 39 | }; 40 | 41 | export default CopyButton; 42 | -------------------------------------------------------------------------------- /src/components/CopyButton/index.css: -------------------------------------------------------------------------------- 1 | .ff_studio .copy_button, 2 | .quick_view_data .copy_button { 3 | border: 1px solid #FAC01E; 4 | border-radius: 3px; 5 | font-family: 'Sarabun', sans-serif; 6 | font-size: 16px; 7 | line-height: 154.41%; 8 | color: #FAC01E; 9 | background: transparent; 10 | margin-left: 10px; 11 | } 12 | 13 | .ff_studio .copy_button:hover, 14 | .quick_view_data .copy_button:hover, 15 | .copy_button.copy_icon_button:hover { 16 | background: transparent; 17 | } 18 | 19 | .copy_button.copy_icon_button { 20 | border: unset; 21 | min-width: 30px; 22 | min-height: 30px; 23 | border-radius: 50px; 24 | width: 30px; 25 | height: 30px; 26 | padding: 6px; 27 | color: #ffffff; 28 | background: transparent; 29 | } 30 | 31 | .copy_button.copy_icon_button svg { 32 | width: 20px; 33 | fill: #ffffff; 34 | } 35 | 36 | .copy_info { 37 | display: flex; 38 | align-items: center; 39 | background: #141414; 40 | border-radius: 5px; 41 | padding: 10px 15px; 42 | } 43 | 44 | .copy_info > p { 45 | font-family: 'Exo', sans-serif; 46 | font-weight: 600; 47 | font-size: 18px; 48 | line-height: 24px; 49 | color: #E7E7E7; 50 | white-space: nowrap; 51 | overflow: hidden; 52 | text-overflow: ellipsis; 53 | } 54 | 55 | .copy_info .copy_button { 56 | margin-left: 4px; 57 | } 58 | 59 | .copy_info .copy_button img { 60 | width: 20px; 61 | } 62 | 63 | @media (max-width: 425px) { 64 | .copy_button.copy_icon_button { 65 | min-width: 24px; 66 | min-height: 24px; 67 | width: 24px; 68 | height: 24px; 69 | padding: 4px; 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /src/components/CopyButton/index.js: -------------------------------------------------------------------------------- 1 | import { Button, Tooltip } from '@mui/material'; 2 | import * as PropTypes from 'prop-types'; 3 | import React from 'react'; 4 | import './index.css'; 5 | import Icon from '../Icon'; 6 | 7 | const CopyButton = (props) => { 8 | const [open, setOpen] = React.useState(false); 9 | 10 | const handleClose = () => { 11 | setOpen(false); 12 | }; 13 | 14 | const handleCopy = (e) => { 15 | navigator.clipboard.writeText(props.data); 16 | 17 | e.stopPropagation(); 18 | setOpen(true); 19 | setTimeout(handleClose, 1000); 20 | }; 21 | 22 | return ( 23 | 27 | 35 | 36 | ); 37 | }; 38 | 39 | CopyButton.propTypes = { 40 | data: PropTypes.string, 41 | icon: PropTypes.any, 42 | }; 43 | 44 | export default CopyButton; 45 | -------------------------------------------------------------------------------- /src/components/DataTable/index.js: -------------------------------------------------------------------------------- 1 | import MUIDataTable from 'mui-datatables'; 2 | import * as PropTypes from 'prop-types'; 3 | import React from 'react'; 4 | import './index.css'; 5 | 6 | const DataTable = (props) => { 7 | return ( 8 | 13 | ); 14 | }; 15 | 16 | DataTable.propTypes = { 17 | columns: PropTypes.array.isRequired, 18 | data: PropTypes.array.isRequired, 19 | name: PropTypes.string.isRequired, 20 | options: PropTypes.object.isRequired, 21 | }; 22 | 23 | export default DataTable; 24 | -------------------------------------------------------------------------------- /src/components/DotsLoading/index.css: -------------------------------------------------------------------------------- 1 | .spinner { 2 | width: 100px; 3 | text-align: center; 4 | margin: auto; 5 | display: flex; 6 | align-items: center; 7 | justify-content: center; 8 | } 9 | 10 | .spinner > div { 11 | width: 10px; 12 | margin: 0 2px; 13 | height: 10px; 14 | background-color: #ffffff; 15 | border-radius: 100%; 16 | display: inline-block; 17 | animation: bounce_delay 1.4s infinite ease-in-out both; 18 | } 19 | 20 | .spinner .bounce1 { 21 | animation-delay: -0.32s; 22 | } 23 | 24 | .spinner .bounce2 { 25 | animation-delay: -0.16s; 26 | } 27 | 28 | @keyframes bounce_delay { 29 | 0%, 80%, 100% { 30 | transform: scale(0); 31 | } 32 | 33 | 40% { 34 | transform: scale(1.0); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/components/DotsLoading/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './index.css'; 3 | 4 | const DotsLoading = (props) => { 5 | return ( 6 |
7 |
8 |
9 |
10 |
11 | ); 12 | }; 13 | 14 | export default DotsLoading; 15 | -------------------------------------------------------------------------------- /src/components/Icon.js: -------------------------------------------------------------------------------- 1 | import * as PropTypes from 'prop-types'; 2 | import React from 'react'; 3 | import icons from '../assets/icons.svg'; 4 | 5 | const Icon = (props) => { 6 | return ( 7 | 10 | 11 | 12 | ); 13 | }; 14 | 15 | Icon.propTypes = { 16 | className: PropTypes.string.isRequired, 17 | icon: PropTypes.string.isRequired, 18 | }; 19 | 20 | export default Icon; 21 | -------------------------------------------------------------------------------- /src/components/ImageOnLoad/VideoOnLoad.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import * as PropTypes from 'prop-types'; 3 | import ClassNames from 'classnames'; 4 | import thumbnail from '../../assets/thumbnail.svg'; 5 | 6 | const VideoOnLoad = (props) => { 7 | const [poster, setPoster] = React.useState(null); 8 | 9 | React.useEffect(() => { 10 | setPoster(null); 11 | if (props.preview) { 12 | const image = new Image(); 13 | image.onload = () => { 14 | setPoster(props.preview); 15 | }; 16 | image.src = props.preview; 17 | } 18 | }, [props.preview]); 19 | 20 | if (poster) { 21 | return ( 22 | 28 | ); 29 | } 30 | 31 | return ( 32 | 38 | ); 39 | }; 40 | 41 | VideoOnLoad.propTypes = { 42 | className: PropTypes.string, 43 | preview: PropTypes.string, 44 | src: PropTypes.string, 45 | type: PropTypes.string, 46 | }; 47 | 48 | export default VideoOnLoad; 49 | -------------------------------------------------------------------------------- /src/components/ImageOnLoad/index.css: -------------------------------------------------------------------------------- 1 | .dummy_image { 2 | background-size: cover; 3 | } 4 | -------------------------------------------------------------------------------- /src/components/NetworkImages/ImagesOptions.js: -------------------------------------------------------------------------------- 1 | import { ReactComponent as FlixLogo } from '../../assets/tokens/flix.svg'; 2 | import { ReactComponent as DVPNLogo } from '../../assets/tokens/dvpn.svg'; 3 | import { ReactComponent as ATOMLogo } from '../../assets/tokens/atom.svg'; 4 | import { ReactComponent as JUNOLogo } from '../../assets/tokens/juno.svg'; 5 | import { ReactComponent as SPAYLogo } from '../../assets/tokens/spay.svg'; 6 | import { ReactComponent as AKTLogo } from '../../assets/tokens/akash.svg'; 7 | import { ReactComponent as HUAHUALogo } from '../../assets/tokens/chihuahua.svg'; 8 | import { ReactComponent as CROLogo } from '../../assets/tokens/crypto.com.svg'; 9 | import { ReactComponent as GRAVITONLogo } from '../../assets/tokens/gravityBridge.svg'; 10 | import { ReactComponent as KILogo } from '../../assets/tokens/KI.svg'; 11 | import { ReactComponent as LIKELogo } from '../../assets/tokens/like.svg'; 12 | import { ReactComponent as OSMOLogo } from '../../assets/tokens/osmosis.svg'; 13 | import { ReactComponent as ROWANLogo } from '../../assets/tokens/sifchain.svg'; 14 | import starsToken from '../../assets/tokens/stargaze.png'; 15 | import { ReactComponent as LUNALogo } from '../../assets/tokens/terra.svg'; 16 | import React from 'react'; 17 | 18 | export const images = [{ 19 | name: 'AKT', 20 | image: , 21 | }, { 22 | name: 'ATOM', 23 | image: , 24 | }, { 25 | name: 'ATOM/CH-0', 26 | image: , 27 | }, { 28 | name: 'BLUE', 29 | image: , 30 | }, { 31 | name: 'BLUE/CH-3', 32 | image: , 33 | }, { 34 | name: 'CRO', 35 | image: , 36 | }, { 37 | name: 'FLIX', 38 | image: , 39 | }, { 40 | name: 'GRAVITON', 41 | image: , 42 | }, { 43 | name: 'HUAHUA', 44 | image: , 45 | }, { 46 | name: 'JUNO', 47 | image: , 48 | }, { 49 | name: 'JUNOX', 50 | image: , 51 | }, { 52 | name: 'LIKE', 53 | image: , 54 | }, { 55 | name: 'OSMO', 56 | image: , 57 | }, { 58 | name: 'ROWAN', 59 | image: , 60 | }, { 61 | name: 'SPAY', 62 | image: , 63 | }, { 64 | name: 'STARS', 65 | image: STARS, 66 | }, { 67 | name: 'LUNA', 68 | image: , 69 | }, { 70 | name: 'USD', 71 | image: , 72 | }, { 73 | name: 'XKI', 74 | image: , 75 | }]; 76 | -------------------------------------------------------------------------------- /src/components/NetworkImages/SvgImages.js: -------------------------------------------------------------------------------- 1 | import { ReactComponent as FlixLogo } from '../../assets/tokens/flix.svg'; 2 | import { ReactComponent as DVPNLogo } from '../../assets/tokens/dvpn.svg'; 3 | import { ReactComponent as ATOMLogo } from '../../assets/tokens/atom.svg'; 4 | import { ReactComponent as JUNOLogo } from '../../assets/tokens/juno.svg'; 5 | import { ReactComponent as SPAYLogo } from '../../assets/tokens/spay.svg'; 6 | import { ReactComponent as AKTLogo } from '../../assets/tokens/akash.svg'; 7 | import { ReactComponent as HUAHUALogo } from '../../assets/tokens/chihuahua.svg'; 8 | import { ReactComponent as CROLogo } from '../../assets/tokens/crypto.com.svg'; 9 | import { ReactComponent as GRAVITONLogo } from '../../assets/tokens/gravityBridge.svg'; 10 | import { ReactComponent as KILogo } from '../../assets/tokens/KI.svg'; 11 | import { ReactComponent as LIKELogo } from '../../assets/tokens/like.svg'; 12 | import { ReactComponent as OSMOLogo } from '../../assets/tokens/osmosis.svg'; 13 | import { ReactComponent as ROWANLogo } from '../../assets/tokens/sifchain.svg'; 14 | import starsToken from '../../assets/tokens/stargaze.png'; 15 | import { ReactComponent as LUNALogo } from '../../assets/tokens/terra.svg'; 16 | import * as PropTypes from 'prop-types'; 17 | import React from 'react'; 18 | 19 | const NetworkSvgImages = (props) => { 20 | switch (props.name) { 21 | case 'AKT': 22 | return ; 23 | case 'ATOM': 24 | case 'ATOM/CH-0': 25 | return ; 26 | case 'BLUE': 27 | case 'BLUE/CH-3': 28 | return ; 29 | case 'CRO': 30 | return ; 31 | case 'FLIX': 32 | return ; 33 | case 'GRAVITON': 34 | return ; 35 | case 'HUAHUA': 36 | return ; 37 | case 'JUNO': 38 | case 'JUNOX': 39 | return ; 40 | case 'LIKE': 41 | return ; 42 | case 'OSMO': 43 | return ; 44 | case 'ROWAN': 45 | return ; 46 | case 'SPAY': 47 | return ; 48 | case 'STARS': 49 | return STARS; 50 | case 'LUNA': 51 | case 'USD': 52 | return ; 53 | case 'XKI': 54 | return ; 55 | default: 56 | break; 57 | } 58 | }; 59 | 60 | NetworkSvgImages.propTypes = { 61 | name: PropTypes.string, 62 | }; 63 | 64 | export default NetworkSvgImages; 65 | -------------------------------------------------------------------------------- /src/components/NoData/ComingSoon.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import comingSoonIcon from '../../assets/auction/comingSoon.svg'; 3 | import './index.css'; 4 | 5 | const ComingSoon = () => { 6 | return ( 7 |
8 | coming soon 9 |
10 | ); 11 | }; 12 | 13 | export default ComingSoon; 14 | -------------------------------------------------------------------------------- /src/components/NoData/index.css: -------------------------------------------------------------------------------- 1 | .no_data { 2 | width: 100%; 3 | height: 200px; 4 | display: flex; 5 | align-items: center; 6 | justify-content: center; 7 | } 8 | 9 | .no_data > img { 10 | width: 200px; 11 | } 12 | -------------------------------------------------------------------------------- /src/components/NoData/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './index.css'; 3 | 4 | const NoData = () => { 5 | return ( 6 |
7 |

No Data

8 |
9 | ); 10 | }; 11 | 12 | export default NoData; 13 | -------------------------------------------------------------------------------- /src/components/Player/Controls/BackButton.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { IconButton } from '@material-ui/core'; 3 | import Icon from '../../../components/Icon'; 4 | import * as PropTypes from 'prop-types'; 5 | 6 | const BackButton = (props) => { 7 | const handleBack = () => { 8 | props.player.currentTime(props.player.currentTime() - 5); 9 | }; 10 | 11 | return ( 12 | 13 | 14 | 15 | ); 16 | }; 17 | 18 | BackButton.propTypes = { 19 | player: PropTypes.object, 20 | }; 21 | 22 | export default BackButton; 23 | -------------------------------------------------------------------------------- /src/components/Player/Controls/ForwardButton.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { IconButton } from '@material-ui/core'; 3 | import Icon from '../../../components/Icon'; 4 | import * as PropTypes from 'prop-types'; 5 | 6 | const ForwardButton = (props) => { 7 | const handleForward = () => { 8 | props.player.currentTime(props.player.currentTime() + 5); 9 | }; 10 | 11 | return ( 12 | 13 | 14 | 15 | ); 16 | }; 17 | 18 | ForwardButton.propTypes = { 19 | player: PropTypes.object, 20 | }; 21 | 22 | export default ForwardButton; 23 | -------------------------------------------------------------------------------- /src/components/Player/Controls/PlayButton.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { IconButton } from '@material-ui/core'; 3 | import Icon from '../../../components/Icon'; 4 | import * as PropTypes from 'prop-types'; 5 | 6 | const PlayButton = (props) => { 7 | const handlePlayToggle = () => { 8 | props.player.play(); 9 | }; 10 | 11 | const handlePauseToggle = () => { 12 | props.player.pause(); 13 | }; 14 | 15 | return ( 16 | <> 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | ); 25 | }; 26 | 27 | PlayButton.propTypes = { 28 | player: PropTypes.object, 29 | }; 30 | 31 | export default PlayButton; 32 | -------------------------------------------------------------------------------- /src/components/Player/Controls/VolumeButton.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import { Button } from '@material-ui/core'; 3 | import Icon from '../../../components/Icon'; 4 | import * as PropTypes from 'prop-types'; 5 | 6 | class VolumeButton extends Component { 7 | constructor (props) { 8 | super(props); 9 | 10 | this.state = { 11 | mute: !!localStorage.getItem('of_nucleus_muted'), 12 | }; 13 | 14 | this.handleVolumeMute = this.handleVolumeMute.bind(this); 15 | this.handleVolumeUnMute = this.handleVolumeUnMute.bind(this); 16 | } 17 | 18 | handleVolumeUnMute () { 19 | this.props.player.muted(false); 20 | this.setState({ 21 | mute: false, 22 | }); 23 | localStorage.removeItem('of_nucleus_muted'); 24 | } 25 | 26 | handleVolumeMute () { 27 | this.props.player.muted(true); 28 | this.setState({ 29 | mute: true, 30 | }); 31 | localStorage.setItem('of_nucleus_muted', 'true'); 32 | } 33 | 34 | render () { 35 | return ( 36 | <> 37 | {this.state.mute 38 | ? 43 | : } 48 | 49 | ); 50 | } 51 | } 52 | 53 | VolumeButton.propTypes = { 54 | player: PropTypes.object, 55 | }; 56 | 57 | export default VolumeButton; 58 | -------------------------------------------------------------------------------- /src/components/Player/index.js: -------------------------------------------------------------------------------- 1 | import * as PropTypes from 'prop-types'; 2 | import React from 'react'; 3 | import './index.css'; 4 | 5 | class Player extends React.Component { 6 | componentDidMount () { 7 | this.props.initializePlayer(this.node); 8 | } 9 | 10 | render () { 11 | return ( 12 |
13 |
19 | ); 20 | } 21 | } 22 | 23 | Player.propTypes = { 24 | initializePlayer: PropTypes.func.isRequired, 25 | children: PropTypes.any, 26 | }; 27 | 28 | export default Player; 29 | -------------------------------------------------------------------------------- /src/components/QRModal/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import {Modal} from "./modal"; 3 | // @ts-ignore 4 | import ReactDom from "react-dom"; 5 | 6 | export class CosmostationWCModal { 7 | open(uri: string, cb: any) { 8 | const wrapper = document.createElement("div"); 9 | wrapper.setAttribute("id", "cosmostation-wc-QRModal"); 10 | document.body.appendChild(wrapper); 11 | 12 | ReactDom.render( 13 | { 16 | this.close(); 17 | cb(); 18 | }} 19 | />, 20 | wrapper 21 | ); 22 | } 23 | 24 | close() { 25 | const wrapper = document.getElementById("cosmostation-wc-QRModal"); 26 | if (wrapper) { 27 | document.body.removeChild(wrapper); 28 | } 29 | } 30 | } 31 | 32 | export default CosmostationWCModal; 33 | -------------------------------------------------------------------------------- /src/components/SkeletonLoader/Activity/index.css: -------------------------------------------------------------------------------- 1 | .activity_section.activity_skeleton_loader .activity_card .card_section1 > .name { 2 | width: 60%; 3 | } 4 | 5 | .activity_section.activity_skeleton_loader .activity_card .card_section2 { 6 | flex-direction: column; 7 | align-items: flex-start; 8 | width: 20%; 9 | } 10 | 11 | .activity_section.activity_skeleton_loader .card_section3 { 12 | margin-left: 30px; 13 | flex: 1; 14 | } 15 | -------------------------------------------------------------------------------- /src/components/SkeletonLoader/CollectionInfo/index.css: -------------------------------------------------------------------------------- 1 | .collection_skeleton .text_section { 2 | width: 240px; 3 | } 4 | 5 | .collection_skeleton .items_count { 6 | display: flex; 7 | flex-direction: column; 8 | align-items: center; 9 | margin-top: 20px; 10 | } 11 | 12 | .collection_skeleton .collection_section2 .skeleton_loader { 13 | transform: unset; 14 | } 15 | 16 | .collection_skeleton .total_tokens_traded { 17 | width: 50%; 18 | display: flex; 19 | flex-direction: column; 20 | align-items: center; 21 | } 22 | -------------------------------------------------------------------------------- /src/components/SkeletonLoader/CollectionSkeletonLoader.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './index.css'; 3 | import Skeleton from '@mui/material/Skeleton'; 4 | 5 | const CollectionSkeletonLoader = () => { 6 | return ( 7 |
8 | 12 |
13 | 18 | 23 |
24 |
25 | ); 26 | }; 27 | 28 | export default CollectionSkeletonLoader; 29 | -------------------------------------------------------------------------------- /src/components/SkeletonLoader/CollectionTable/Image.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import '../index.css'; 3 | import Skeleton from '@mui/material/Skeleton'; 4 | 5 | const ImageSkeletonLoader = () => { 6 | return ( 7 | 11 | ); 12 | }; 13 | 14 | export default ImageSkeletonLoader; 15 | -------------------------------------------------------------------------------- /src/components/SkeletonLoader/CollectionTable/Text.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import '../index.css'; 3 | import Skeleton from '@mui/material/Skeleton'; 4 | import * as PropTypes from 'prop-types'; 5 | 6 | const TextSkeletonLoader = (props) => { 7 | return ( 8 | 13 | ); 14 | }; 15 | 16 | TextSkeletonLoader.propTypes = { 17 | width: PropTypes.number, 18 | }; 19 | 20 | export default TextSkeletonLoader; 21 | -------------------------------------------------------------------------------- /src/components/SkeletonLoader/MyAccount/index.css: -------------------------------------------------------------------------------- 1 | .my_account_skeleton { 2 | width: 500px; 3 | margin: auto; 4 | display: flex; 5 | flex-direction: column; 6 | align-items: center; 7 | } 8 | 9 | .my_account_skeleton .skeleton_address { 10 | width: 100%; 11 | height: 43px; 12 | transform: unset; 13 | margin-top: 30px; 14 | border-radius: 50px; 15 | margin-bottom: 60px; 16 | } 17 | -------------------------------------------------------------------------------- /src/components/SkeletonLoader/MyAccount/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import '../index.css'; 3 | import './index.css'; 4 | import Skeleton from '@mui/material/Skeleton'; 5 | 6 | const MyAccountSkeletonLoader = () => { 7 | return ( 8 |
9 | 14 | 19 |
20 | ); 21 | }; 22 | 23 | export default MyAccountSkeletonLoader; 24 | -------------------------------------------------------------------------------- /src/components/SkeletonLoader/NFTCard/index.css: -------------------------------------------------------------------------------- 1 | .nft_card_skeleton .section1 { 2 | display: flex; 3 | margin-bottom: 10px; 4 | padding: 0; 5 | justify-content: flex-start; 6 | } 7 | 8 | .nft_card_skeleton .section1 .skeleton_loader { 9 | width: 60px; 10 | height: 24px; 11 | margin-right: 5px; 12 | border-radius: 20px; 13 | transform: unset; 14 | } 15 | 16 | .nft_card_skeleton .list_section4 .skeleton_loader { 17 | transform: unset; 18 | } 19 | -------------------------------------------------------------------------------- /src/components/SkeletonLoader/NFTCard/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import '../index.css'; 3 | import './index.css'; 4 | import Skeleton from '@mui/material/Skeleton'; 5 | 6 | const NFTCardSkeletonLoader = () => { 7 | return ( 8 |
9 |
10 | 15 | 21 |
22 | 26 |
27 |
28 | 33 |
34 | 39 |
40 |
41 |
42 | 47 |
48 |
49 | ); 50 | }; 51 | 52 | export default NFTCardSkeletonLoader; 53 | -------------------------------------------------------------------------------- /src/components/SkeletonLoader/ProfileSkeletonLoader.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './index.css'; 3 | import Skeleton from '@mui/material/Skeleton'; 4 | 5 | const ProfileSkeletonLoader = () => { 6 | return ( 7 |
8 | 13 |
14 | ); 15 | }; 16 | 17 | export default ProfileSkeletonLoader; 18 | -------------------------------------------------------------------------------- /src/components/SkeletonLoader/SingleAsset/ImageSkeletonLoader.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import '../index.css'; 3 | import './index.css'; 4 | import Skeleton from '@mui/material/Skeleton'; 5 | 6 | const ImageSkeletonLoader = () => { 7 | return ( 8 | 12 | ); 13 | }; 14 | 15 | export default ImageSkeletonLoader; 16 | -------------------------------------------------------------------------------- /src/components/SkeletonLoader/SingleAsset/MoreInfoSkeletonLoader.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import '../index.css'; 3 | import './index.css'; 4 | import Skeleton from '@mui/material/Skeleton'; 5 | 6 | const MoreInfoSkeletonLoader = () => { 7 | return ( 8 | 13 | ); 14 | }; 15 | 16 | export default MoreInfoSkeletonLoader; 17 | -------------------------------------------------------------------------------- /src/components/SkeletonLoader/SingleAsset/index.css: -------------------------------------------------------------------------------- 1 | .pdf_section_asset.skeleton_loader { 2 | height: calc(100% - 20px); 3 | margin: 10px; 4 | } 5 | 6 | .card_skeleton .list_section1 { 7 | margin-top: 20px; 8 | margin-bottom: 30px; 9 | } 10 | 11 | .card_skeleton .list_section1 .skeleton_loader { 12 | transform: unset; 13 | padding: 0; 14 | } 15 | 16 | .card_skeleton .list_section1_left .skeleton_loader:first-child { 17 | border-radius: 20px; 18 | } 19 | 20 | .card_skeleton .list_section1_right .skeleton_loader:first-child { 21 | margin-right: 5px; 22 | } 23 | 24 | .card_skeleton .list_section3 { 25 | margin-bottom: 5px; 26 | } 27 | 28 | .card_skeleton .section4_row2 .skeleton_loader { 29 | transform: unset; 30 | } 31 | 32 | .card_skeleton .more_info .skeleton_loader, 33 | .more_info .skeleton_loader { 34 | transform: unset; 35 | border-radius: 0; 36 | } 37 | -------------------------------------------------------------------------------- /src/components/SkeletonLoader/index.css: -------------------------------------------------------------------------------- 1 | body .skeleton_loader { 2 | background: #46464680; 3 | /*background: rgb(0 0 0 / 40%);*/ 4 | } 5 | 6 | body .skeleton_loader:after { 7 | background: linear-gradient(90deg, transparent, #79797930, transparent); 8 | /*background: linear-gradient(90deg, transparent, rgb(0 0 0 / 80%), transparent);*/ 9 | } 10 | 11 | .profile_skeleton .skeleton_loader { 12 | border-radius: 50px; 13 | transform: unset; 14 | } 15 | 16 | .collection_list .list_page.collection_skeleton_loader .row { 17 | flex-direction: column; 18 | align-items: flex-start; 19 | } 20 | 21 | .collection_table .collection_icon.skeleton_loader { 22 | border-radius: 0; 23 | } 24 | 25 | .ibc_tokens_table .skeleton_loader { 26 | margin: auto; 27 | } 28 | 29 | .ibc_tokens_table .token_value .skeleton_loader { 30 | margin: 0; 31 | } 32 | 33 | .token_value .collection_icon.skeleton_loader { 34 | width: 30px; 35 | height: 30px; 36 | margin-right: 15px; 37 | border-radius: 50px; 38 | } 39 | -------------------------------------------------------------------------------- /src/components/SkeletonLoader/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import * as PropTypes from 'prop-types'; 3 | import NFTCardSkeletonLoader from './NFTCard'; 4 | import CollectionSkeletonLoader from './CollectionSkeletonLoader'; 5 | import ActivitySkeletonLoader from './Activity'; 6 | 7 | const SkeletonLoader = (props) => { 8 | return ( 9 | Array.from(new Array(10)).map((item, index) => { 10 | switch (props.type) { 11 | case 'nft-card': 12 | return ; 13 | case 'collection-card': 14 | return ; 15 | case 'activity': 16 | return ; 17 | default: 18 | break; 19 | } 20 | 21 | return null; 22 | }) 23 | ); 24 | }; 25 | 26 | SkeletonLoader.propTypes = { 27 | type: PropTypes.string.isRequired, 28 | start: PropTypes.bool, 29 | }; 30 | 31 | export default SkeletonLoader; 32 | -------------------------------------------------------------------------------- /src/components/Stepper/index.css: -------------------------------------------------------------------------------- 1 | .nucleus_v2 .stepper, 2 | .dialog .stepper { 3 | background: transparent; 4 | padding: 0; 5 | position: relative; 6 | } 7 | 8 | .nucleus_v2 .stepper .progress_bar, 9 | .dialog .stepper .progress_bar { 10 | position: absolute; 11 | height: 6px; 12 | top: 22px; 13 | background: linear-gradient(91.79deg, #fac01e 3.15%, #fc762a 85.66%); 14 | border-radius: 50px; 15 | } 16 | 17 | .stepper > div > div { 18 | width: 100%; 19 | left: 0; 20 | } 21 | 22 | .stepper .icon { 23 | width: 12px; 24 | } 25 | 26 | .stepper .icon_div { 27 | position: relative; 28 | } 29 | 30 | .stepper .icon_div:before { 31 | content: ''; 32 | position: absolute; 33 | background: #141414; 34 | top: 0; 35 | left: 0; 36 | width: 100%; 37 | height: 100%; 38 | z-index: -1; 39 | border-radius: 50px; 40 | } 41 | 42 | .stepper .icon_div.active:after, 43 | .stepper .icon_div.completed:after { 44 | content: ''; 45 | background: linear-gradient(91.79deg, #fac01e 3.15%, #fc762a 85.66%); 46 | position: absolute; 47 | top: -4px; 48 | left: -4px; 49 | width: calc(100% + 8px); 50 | height: calc(100% + 8px); 51 | z-index: -2; 52 | border-radius: 50px; 53 | } 54 | 55 | .stepper .icon_div.completed:before { 56 | content: unset; 57 | } 58 | 59 | .stepper .label span:last-child > span { 60 | font-family: 'Source Sans Pro', sans-serif; 61 | font-size: 18px; 62 | line-height: 23px; 63 | color: #E7E7E7; 64 | margin-top: 12px; 65 | } 66 | 67 | .stepper .label.action_label { 68 | cursor: pointer; 69 | } 70 | -------------------------------------------------------------------------------- /src/components/TextField/index.css: -------------------------------------------------------------------------------- 1 | .studio_v2 .text_field { 2 | margin: unset; 3 | } 4 | 5 | .text_field > div { 6 | font-family: 'Source Sans Pro', sans-serif; 7 | font-size: 18px; 8 | line-height: 23px; 9 | color: #696969; 10 | border-radius: unset; 11 | } 12 | 13 | .text_field input::placeholder { 14 | opacity: 1; 15 | } 16 | 17 | .text_field input:focus::placeholder { 18 | color: transparent; 19 | } 20 | 21 | .text_field textarea { 22 | resize: vertical; 23 | } 24 | -------------------------------------------------------------------------------- /src/constants/IBCTokens.js: -------------------------------------------------------------------------------- 1 | export const CONNECT_IBC_ACCOUNT_IN_PROGRESS = 'CONNECT_IBC_ACCOUNT_IN_PROGRESS'; 2 | export const CONNECT_IBC_ACCOUNT_SUCCESS = 'CONNECT_IBC_ACCOUNT_SUCCESS'; 3 | export const CONNECT_IBC_ACCOUNT_ERROR = 'CONNECT_IBC_ACCOUNT_ERROR'; 4 | 5 | export const IBC_BALANCE_FETCH_IN_PROGRESS = 'IBC_BALANCE_FETCH_IN_PROGRESS'; 6 | export const IBC_BALANCE_FETCH_SUCCESS = 'IBC_BALANCE_FETCH_SUCCESS'; 7 | export const IBC_BALANCE_FETCH_ERROR = 'IBC_BALANCE_FETCH_ERROR'; 8 | 9 | export const AMINO_SIGN_IBC_TX_IN_PROGRESS = 'AMINO_SIGN_IBC_TX_IN_PROGRESS'; 10 | export const AMINO_SIGN_IBC_TX_SUCCESS = 'AMINO_SIGN_IBC_TX_SUCCESS'; 11 | export const AMINO_SIGN_IBC_TX_ERROR = 'AMINO_SIGN_IBC_TX_ERROR'; 12 | 13 | export const TIMEOUT_HEIGHT_FETCH_IN_PROGRESS = 'TIMEOUT_HEIGHT_FETCH_IN_PROGRESS'; 14 | export const TIMEOUT_HEIGHT_FETCH_SUCCESS = 'TIMEOUT_HEIGHT_FETCH_SUCCESS'; 15 | export const TIMEOUT_HEIGHT_FETCH_ERROR = 'TIMEOUT_HEIGHT_FETCH_ERROR'; 16 | 17 | export const IBC_TX_IN_PROGRESS_SET = 'IBC_TX_IN_PROGRESS_SET'; 18 | -------------------------------------------------------------------------------- /src/constants/account.js: -------------------------------------------------------------------------------- 1 | export const CONNECT_BC_ACCOUNT_IN_PROGRESS = 'CONNECT_BC_ACCOUNT_IN_PROGRESS'; 2 | export const CONNECT_BC_ACCOUNT_SUCCESS = 'CONNECT_BC_ACCOUNT_SUCCESS'; 3 | export const CONNECT_BC_ACCOUNT_ERROR = 'CONNECT_BC_ACCOUNT_ERROR'; 4 | 5 | export const KEPLR_ACCOUNT_KEYS_SET = 'KEPLR_ACCOUNT_KEYS_SET'; 6 | 7 | export const VERIFY_ACCOUNT_IN_PROGRESS = 'VERIFY_ACCOUNT_IN_PROGRESS'; 8 | export const VERIFY_ACCOUNT_SUCCESS = 'VERIFY_ACCOUNT_SUCCESS'; 9 | export const VERIFY_ACCOUNT_ERROR = 'VERIFY_ACCOUNT_ERROR'; 10 | 11 | export const DISCONNECT_SET = 'DISCONNECT_SET'; 12 | 13 | export const CHAIN_ID_SET = 'CHAIN_ID_SET'; 14 | 15 | export const CONFIRM_DEPOSIT_SET = 'CONFIRM_DEPOSIT_SET'; 16 | export const CONFIRM_WITHDRAW_SET = 'CONFIRM_WITHDRAW_SET'; 17 | -------------------------------------------------------------------------------- /src/constants/activity.js: -------------------------------------------------------------------------------- 1 | export const FETCH_USER_ACTIVITY_SUCCESS = 'FETCH_USER_ACTIVITY_SUCCESS'; 2 | export const FETCH_USER_ACTIVITY_IN_PROGRESS = 'FETCH_USER_ACTIVITY_IN_PROGRESS'; 3 | export const FETCH_USER_ACTIVITY_ERROR = 'FETCH_USER_ACTIVITY_ERROR'; 4 | 5 | export const FETCH_COLLECTION_ACTIVITY_SUCCESS = 'FETCH_COLLECTION_ACTIVITY_SUCCESS'; 6 | export const FETCH_COLLECTION_ACTIVITY_IN_PROGRESS = 'FETCH_COLLECTION_ACTIVITY_IN_PROGRESS'; 7 | export const FETCH_COLLECTION_ACTIVITY_ERROR = 'FETCH_COLLECTION_ACTIVITY_ERROR'; 8 | -------------------------------------------------------------------------------- /src/constants/auctions.js: -------------------------------------------------------------------------------- 1 | export const PLACE_BID_DIALOG_SHOW = 'PLACE_BID_DIALOG_SHOW'; 2 | export const PLACE_BID_DIALOG_HIDE = 'PLACE_BID_DIALOG_HIDE'; 3 | export const PLACE_BID_SUCCESS_SET = 'PLACE_BID_SUCCESS_SET'; 4 | export const PLACE_BID_FAIL_SET = 'PLACE_BID_FAIL_SET'; 5 | 6 | export const FETCH_AUCTION_LISTINGS_SUCCESS = 'FETCH_AUCTION_LISTINGS_SUCCESS'; 7 | export const FETCH_AUCTION_LISTINGS_IN_PROGRESS = 'FETCH_AUCTION_LISTINGS_IN_PROGRESS'; 8 | export const FETCH_AUCTION_LISTINGS_ERROR = 'FETCH_AUCTION_LISTINGS_ERROR'; 9 | 10 | export const AUCTIONS_SORT_SET = 'AUCTIONS_SORT_SET'; 11 | export const AUCTIONS_SEARCH_SET = 'AUCTIONS_SEARCH_SET'; 12 | 13 | export const COLLECTION_AUCTION_FILTERS_SHOW = 'COLLECTION_AUCTION_FILTERS_SHOW'; 14 | export const COLLECTION_AUCTION_FILTERS_HIDE = 'COLLECTION_AUCTION_FILTERS_HIDE'; 15 | export const CA_PRICE_RANGE_COIN_SET = 'CA_PRICE_RANGE_COIN_SET'; 16 | export const CA_PRICE_RANGE_SET = 'CA_PRICE_RANGE_SET'; 17 | export const CA_ON_SALE_IN_SET = 'CA_ON_SALE_IN_SET'; 18 | export const CA_ON_SALE_IN_SEARCH_SET = 'CA_ON_SALE_IN_SEARCH_SET'; 19 | export const CA_AUCTION_TYPE_SET = 'CA_AUCTION_TYPE_SET'; 20 | 21 | export const LISTING_AUCTION_FILTERS_SHOW = 'LISTING_AUCTION_FILTERS_SHOW'; 22 | export const LISTING_AUCTION_FILTERS_HIDE = 'LISTING_AUCTION_FILTERS_HIDE'; 23 | export const LA_PRICE_RANGE_COIN_SET = 'LA_PRICE_RANGE_COIN_SET'; 24 | export const LA_PRICE_RANGE_SET = 'LA_PRICE_RANGE_SET'; 25 | export const LA_ON_SALE_IN_SET = 'LA_ON_SALE_IN_SET'; 26 | export const LA_ON_SALE_IN_SEARCH_SET = 'LA_ON_SALE_IN_SEARCH_SET'; 27 | export const LA_AUCTION_TYPE_SET = 'LA_AUCTION_TYPE_SET'; 28 | -------------------------------------------------------------------------------- /src/constants/campaign.js: -------------------------------------------------------------------------------- 1 | export const FEE_GRANT_ALLOWANCE_IN_PROGRESS = 'FEE_GRANT_ALLOWANCE_IN_PROGRESS'; 2 | export const FEE_GRANT_ALLOWANCE_SUCCESS = 'FEE_GRANT_ALLOWANCE_SUCCESS'; 3 | export const FEE_GRANT_ALLOWANCE_ERROR = 'FEE_GRANT_ALLOWANCE_ERROR'; 4 | -------------------------------------------------------------------------------- /src/constants/collections.js: -------------------------------------------------------------------------------- 1 | export const COLLECTION_NFT_S_SORT_SET = 'COLLECTION_NFT_S_SORT_SET'; 2 | export const COLLECTION_AUCTIONS_SORT_SET = 'COLLECTION_AUCTIONS_SORT_SET'; 3 | 4 | export const FETCH_LISTED_COLLECTION_NFT_S_SUCCESS = 'FETCH_LISTED_COLLECTION_NFT_S_SUCCESS'; 5 | export const FETCH_LISTED_COLLECTION_NFT_S_IN_PROGRESS = 'FETCH_LISTED_COLLECTION_NFT_S_IN_PROGRESS'; 6 | export const FETCH_LISTED_COLLECTION_NFT_S_ERROR = 'FETCH_LISTED_COLLECTION_NFT_S_ERROR'; 7 | 8 | export const FETCH_NON_LISTED_COLLECTION_NFT_S_SUCCESS = 'FETCH_NON_LISTED_COLLECTION_NFT_S_SUCCESS'; 9 | export const FETCH_NON_LISTED_COLLECTION_NFT_S_IN_PROGRESS = 'FETCH_NON_LISTED_COLLECTION_NFT_S_IN_PROGRESS'; 10 | export const FETCH_NON_LISTED_COLLECTION_NFT_S_ERROR = 'FETCH_NON_LISTED_COLLECTION_NFT_S_ERROR'; 11 | 12 | export const LISTED_SEARCH_SET = 'LISTED_SEARCH_SET'; 13 | export const NON_LISTED_SEARCH_SET = 'NON_LISTED_SEARCH_SET'; 14 | export const COLLECTION_AUCTION_SEARCH_SET = 'COLLECTION_AUCTION_SEARCH_SET'; 15 | 16 | export const COLLECTION_MY_NFT_S_FETCH_SUCCESS = 'COLLECTION_MY_NFT_S_FETCH_SUCCESS'; 17 | export const COLLECTION_MY_NFT_S_FETCH_IN_PROGRESS = 'COLLECTION_MY_NFT_S_FETCH_IN_PROGRESS'; 18 | export const COLLECTION_MY_NFT_S_FETCH_ERROR = 'COLLECTION_MY_NFT_S_FETCH_ERROR'; 19 | 20 | export const FETCH_COLLECTION_AUCTIONS_SUCCESS = 'FETCH_COLLECTION_AUCTIONS_SUCCESS'; 21 | export const FETCH_COLLECTION_AUCTIONS_IN_PROGRESS = 'FETCH_COLLECTION_AUCTIONS_IN_PROGRESS'; 22 | export const FETCH_COLLECTION_AUCTIONS_ERROR = 'FETCH_COLLECTION_AUCTIONS_ERROR'; 23 | 24 | export const COLLECTION_FILTERS_SHOW = 'COLLECTION_FILTERS_SHOW'; 25 | export const COLLECTION_FILTERS_HIDE = 'COLLECTION_FILTERS_HIDE'; 26 | export const COLLECTION_PRICE_RANGE_COIN_SET = 'COLLECTION_PRICE_RANGE_COIN_SET'; 27 | export const COLLECTION_PRICE_RANGE_SET = 'COLLECTION_PRICE_RANGE_SET'; 28 | export const COLLECTION_ON_SALE_IN_SET = 'COLLECTION_ON_SALE_IN_SET'; 29 | export const COLLECTION_ON_SALE_IN_SEARCH_SET = 'COLLECTION_ON_SALE_IN_SEARCH_SET'; 30 | -------------------------------------------------------------------------------- /src/constants/explore.js: -------------------------------------------------------------------------------- 1 | export const ACTIVE_CARD_SET = 'ACTIVE_CARD_SET'; 2 | export const ACTIVE_CARD_HIDE = 'ACTIVE_CARD_HIDE'; 3 | -------------------------------------------------------------------------------- /src/constants/faucet.js: -------------------------------------------------------------------------------- 1 | export const FAUCET_DIALOG_SHOW = 'FAUCET_DIALOG_SHOW'; 2 | export const FAUCET_DIALOG_HIDE = 'FAUCET_DIALOG_HIDE'; 3 | 4 | export const FAUCET_SUCCESS_SET = 'FAUCET_SUCCESS_SET'; 5 | 6 | export const FAUCET_BALANCE_ADD_IN_PROGRESS = 'FAUCET_BALANCE_ADD_IN_PROGRESS'; 7 | export const FAUCET_BALANCE_ADD_SUCCESS = 'FAUCET_BALANCE_ADD_SUCCESS'; 8 | export const FAUCET_BALANCE_ADD_ERROR = 'FAUCET_BALANCE_ADD_ERROR'; 9 | 10 | export const FAUCET_CLAIM_FETCH_IN_PROGRESS = 'FAUCET_CLAIM_FETCH_IN_PROGRESS'; 11 | export const FAUCET_CLAIM_FETCH_SUCCESS = 'FAUCET_CLAIM_FETCH_SUCCESS'; 12 | export const FAUCET_CLAIM_FETCH_ERROR = 'FAUCET_CLAIM_FETCH_ERROR'; 13 | 14 | export const IBC_BALANCE_LIST_FETCH_IN_PROGRESS = 'IBC_BALANCE_LIST_FETCH_IN_PROGRESS'; 15 | export const IBC_BALANCE_LIST_FETCH_SUCCESS = 'IBC_BALANCE_LIST_FETCH_SUCCESS'; 16 | export const IBC_BALANCE_LIST_FETCH_ERROR = 'IBC_BALANCE_LIST_FETCH_ERROR'; 17 | -------------------------------------------------------------------------------- /src/constants/filters.js: -------------------------------------------------------------------------------- 1 | export const FILTERS_SHOW = 'FILTERS_SHOW'; 2 | export const FILTERS_HIDE = 'FILTERS_HIDE'; 3 | 4 | export const STATUS_SET = 'STATUS_SET'; 5 | 6 | export const PRICE_RANGE_SET = 'PRICE_RANGE_SET'; 7 | export const PRICE_RANGE_COIN_SET = 'PRICE_RANGE_COIN_SET'; 8 | 9 | export const GENRE_SET = 'GENRE_SET'; 10 | export const GENRE_SEARCH_SET = 'GENRE_SEARCH_SET'; 11 | 12 | export const COLLECTIONS_SET = 'COLLECTIONS_SET'; 13 | export const COLLECTIONS_SEARCH_SET = 'COLLECTIONS_SEARCH_SET'; 14 | 15 | export const CHAINS_SET = 'CHAINS_SET'; 16 | export const CHAINS_SEARCH_SET = 'CHAINS_SEARCH_SET'; 17 | 18 | export const ON_SALE_IN_SET = 'ON_SALE_IN_SET'; 19 | export const ON_SALE_IN_SEARCH_SET = 'ON_SALE_IN_SEARCH_SET'; 20 | 21 | export const TYPES_SET = 'TYPES_SET'; 22 | export const TYPES_SEARCH_SET = 'TYPES_SEARCH_SET'; 23 | -------------------------------------------------------------------------------- /src/constants/home.js: -------------------------------------------------------------------------------- 1 | export const FETCH_HOME_COLLECTIONS_IN_PROGRESS = 'FETCH_HOME_COLLECTIONS_IN_PROGRESS'; 2 | export const FETCH_HOME_COLLECTIONS_SUCCESS = 'FETCH_HOME_COLLECTIONS_SUCCESS'; 3 | export const FETCH_HOME_COLLECTIONS_ERROR = 'FETCH_HOME_COLLECTIONS_ERROR'; 4 | 5 | export const FETCH_LAUNCHPAD_COLLECTIONS_IN_PROGRESS = 'FETCH_LAUNCHPAD_COLLECTIONS_IN_PROGRESS'; 6 | export const FETCH_LAUNCHPAD_COLLECTIONS_SUCCESS = 'FETCH_LAUNCHPAD_COLLECTIONS_SUCCESS'; 7 | export const FETCH_LAUNCHPAD_COLLECTIONS_ERROR = 'FETCH_LAUNCHPAD_COLLECTIONS_ERROR'; 8 | 9 | export const LAUNCHPAD_COLLECTION_SEARCH_SET = 'LAUNCHPAD_COLLECTION_SEARCH_SET'; 10 | 11 | export const FETCH_STATS_IN_PROGRESS = 'FETCH_STATS_IN_PROGRESS'; 12 | export const FETCH_STATS_SUCCESS = 'FETCH_STATS_SUCCESS'; 13 | export const FETCH_STATS_ERROR = 'FETCH_STATS_ERROR'; 14 | -------------------------------------------------------------------------------- /src/constants/myAccount.js: -------------------------------------------------------------------------------- 1 | export const FETCH_OWNER_COLLECTIONS_SUCCESS = 'FETCH_OWNER_COLLECTIONS_SUCCESS'; 2 | export const FETCH_OWNER_COLLECTIONS_IN_PROGRESS = 'FETCH_OWNER_COLLECTIONS_IN_PROGRESS'; 3 | export const FETCH_OWNER_COLLECTIONS_ERROR = 'FETCH_OWNER_COLLECTIONS_ERROR'; 4 | 5 | export const FETCH_OWNER_NFT_S_SUCCESS = 'FETCH_OWNER_NFT_S_SUCCESS'; 6 | export const FETCH_OWNER_NFT_S_IN_PROGRESS = 'FETCH_OWNER_NFT_S_IN_PROGRESS'; 7 | export const FETCH_OWNER_NFT_S_ERROR = 'FETCH_OWNER_NFT_S_ERROR'; 8 | 9 | export const FETCH_USER_COLLECTIONS_SUCCESS = 'FETCH_USER_COLLECTIONS_SUCCESS'; 10 | export const FETCH_USER_COLLECTIONS_IN_PROGRESS = 'FETCH_USER_COLLECTIONS_IN_PROGRESS'; 11 | export const FETCH_USER_COLLECTIONS_ERROR = 'FETCH_USER_COLLECTIONS_ERROR'; 12 | 13 | export const FETCH_USER_NFT_S_SUCCESS = 'FETCH_USER_NFT_S_SUCCESS'; 14 | export const FETCH_USER_NFT_S_IN_PROGRESS = 'FETCH_USER_NFT_S_IN_PROGRESS'; 15 | export const FETCH_USER_NFT_S_ERROR = 'FETCH_USER_NFT_S_ERROR'; 16 | 17 | export const FETCH_USER_BALANCE_SUCCESS = 'FETCH_USER_BALANCE_SUCCESS'; 18 | export const FETCH_USER_BALANCE_IN_PROGRESS = 'FETCH_USER_BALANCE_IN_PROGRESS'; 19 | export const FETCH_USER_BALANCE_ERROR = 'FETCH_USER_BALANCE_ERROR'; 20 | 21 | export const DEPOSITE_DIALOG_SHOW = 'DEPOSITE_DIALOG_SHOW'; 22 | export const DEPOSITE_DIALOG_HIDE = 'DEPOSITE_DIALOG_HIDE'; 23 | 24 | export const WITHDRAW_DIALOG_SHOW = 'WITHDRAW_DIALOG_SHOW'; 25 | export const WITHDRAW_DIALOG_HIDE = 'WITHDRAW_DIALOG_HIDE'; 26 | 27 | export const AMOUNT_VALUE_SET = 'AMOUNT_VALUE_SET'; 28 | 29 | export const NFT_TRANSFER_IN_PROGRESS = 'NFT_TRANSFER_IN_PROGRESS'; 30 | export const NFT_TRANSFER_SUCCESS = 'NFT_TRANSFER_SUCCESS'; 31 | export const NFT_TRANSFER_ERROR = 'NFT_TRANSFER_ERROR'; 32 | 33 | export const CLEAR_MY_ACCOUNT_DATA = 'CLEAR_MY_ACCOUNT_DATA'; 34 | -------------------------------------------------------------------------------- /src/constants/navbar.js: -------------------------------------------------------------------------------- 1 | export const SEARCH_VALUE_SET = 'SEARCH_VALUE_SET'; 2 | 3 | export const SHOW_SIDE_BAR_SET = 'SHOW_SIDE_BAR_SET'; 4 | export const HIDE_SIDE_BAR_SET = 'HIDE_SIDE_BAR_SET'; 5 | 6 | export const CONNECT_DIALOG_SHOW = 'CONNECT_DIALOG_SHOW'; 7 | export const CONNECT_DIALOG_HIDE = 'CONNECT_DIALOG_HIDE'; 8 | -------------------------------------------------------------------------------- /src/constants/restURL.js: -------------------------------------------------------------------------------- 1 | import { config } from '../config'; 2 | 3 | const URL = config.REST_URL; 4 | 5 | export const urlFetchBalance = (address) => `${URL}/bank/balances/${address}`; 6 | export const urlFetchAllowances = (address) => `${URL}/cosmos/feegrant/v1beta1/allowances/${address}`; 7 | export const urlFetchIBCBalance = (url, address) => `${url}/bank/balances/${address}`; 8 | export const urlTransferNFT = (denomID, onftId) => `${URL}/onft/onfts/${denomID}/${onftId}/transfer`; 9 | export const urlDeList = (ID) => 10 | `${URL}/marketplace/listings/${ID}/de-list-nft`; 11 | 12 | export const urlFetchTimeoutHeight = (url, channel) => { 13 | let version = 'v1'; 14 | if (url.indexOf('bluenet') > -1) { 15 | version = 'v1beta1'; 16 | } 17 | 18 | return `${url}/ibc/core/channel/${version}/channels/${channel}/ports/transfer`; 19 | }; 20 | export const urlAddFaucet = (chain) => `${config.FAUCET_URL}/${chain}/claim`; 21 | 22 | export const LIST_NFT_URL = `${URL}/marketplace/list-nft`; 23 | -------------------------------------------------------------------------------- /src/constants/seo.js: -------------------------------------------------------------------------------- 1 | export const DEFAULT_TITLE = 'OmniFlix Market | Buy & Sell NFTs with IBC tokens'; 2 | export const DEFAULT_DESCRIPTION = 'OmniFlix Market is the destination for NFT creators, communities & curators to list & collect NFTs with IBC tokens'; 3 | export const DEFAULT_OG_IMAGE = '/assets/logos/og_image.png'; 4 | -------------------------------------------------------------------------------- /src/constants/snackbar.js: -------------------------------------------------------------------------------- 1 | export const SNACKBAR_HIDE = 'SNACKBAR_HIDE'; 2 | export const MESSAGE_SHOW = 'MESSAGE_SHOW'; 3 | -------------------------------------------------------------------------------- /src/constants/wallet.js: -------------------------------------------------------------------------------- 1 | export const CONNECT_KEPLR_ACCOUNT_IN_PROGRESS = 'CONNECT_KEPLR_ACCOUNT_IN_PROGRESS'; 2 | export const CONNECT_KEPLR_ACCOUNT_SUCCESS = 'CONNECT_KEPLR_ACCOUNT_SUCCESS'; 3 | export const CONNECT_KEPLR_ACCOUNT_ERROR = 'CONNECT_KEPLR_ACCOUNT_ERROR'; 4 | 5 | export const WALLET_CONNECT_IN_PROGRESS = 'WALLET_CONNECT_IN_PROGRESS'; 6 | export const WALLET_CONNECT_SUCCESS = 'WALLET_CONNECT_SUCCESS'; 7 | export const WALLET_CONNECT_ERROR = 'WALLET_CONNECT_ERROR'; 8 | 9 | export const BALANCE_FETCH_IN_PROGRESS = 'BALANCE_FETCH_IN_PROGRESS'; 10 | export const BALANCE_FETCH_SUCCESS = 'BALANCE_FETCH_SUCCESS'; 11 | export const BALANCE_FETCH_ERROR = 'BALANCE_FETCH_ERROR'; 12 | 13 | export const ALLOWANCES_FETCH_IN_PROGRESS = 'ALLOWANCES_FETCH_IN_PROGRESS'; 14 | export const ALLOWANCES_FETCH_SUCCESS = 'ALLOWANCES_FETCH_SUCCESS'; 15 | export const ALLOWANCES_FETCH_ERROR = 'ALLOWANCES_FETCH_ERROR'; 16 | 17 | export const TX_SIGN_AND_BROAD_CAST_IN_PROGRESS = 'TX_SIGN_AND_BROAD_CAST_IN_PROGRESS'; 18 | export const TX_SIGN_AND_BROAD_CAST_SUCCESS = 'TX_SIGN_AND_BROAD_CAST_SUCCESS'; 19 | export const TX_SIGN_AND_BROAD_CAST_ERROR = 'TX_SIGN_AND_BROAD_CAST_ERROR'; 20 | 21 | export const TX_HASH_FETCH_IN_PROGRESS = 'TX_HASH_FETCH_CAST_IN_PROGRESS'; 22 | export const TX_HASH_FETCH_SUCCESS = 'TX_HASH_FETCH_CAST_SUCCESS'; 23 | export const TX_HASH_FETCH_ERROR = 'TX_HASH_FETCH_CAST_ERROR'; 24 | 25 | export const TX_HASH_IN_PROGRESS_FALSE_SET = 'TX_HASH_IN_PROGRESS_FALSE_SET'; 26 | 27 | export const TX_SIGN_IN_PROGRESS = 'TX_SIGN_IN_PROGRESS'; 28 | export const TX_SIGN_SUCCESS = 'TX_SIGN_SUCCESS'; 29 | export const TX_SIGN_ERROR = 'TX_SIGN_ERROR'; 30 | export const TX_SIGN_IN_PROGRESS_SET = 'TX_SIGN_IN_PROGRESS_SET'; 31 | -------------------------------------------------------------------------------- /src/containers/Collections/SearchTextField.js: -------------------------------------------------------------------------------- 1 | import * as PropTypes from 'prop-types'; 2 | import React, { useState } from 'react'; 3 | import { connect } from 'react-redux'; 4 | import TextField from '../../components/TextField'; 5 | import variables from '../../utils/variables'; 6 | import { InputAdornment } from '@mui/material'; 7 | import Icon from '../../components/Icon'; 8 | import { fetchCollections, setSearchCollections } from '../../actions/marketplace'; 9 | import { DEFAULT_LIMIT, DEFAULT_SKIP } from '../../config'; 10 | 11 | const SearchTextField = (props) => { 12 | const [time, setTime] = useState(null); 13 | const handleChange = (value) => { 14 | props.onChange(value); 15 | 16 | if (time) { 17 | clearInterval(time); 18 | } 19 | 20 | const interval = setTimeout(() => { 21 | handleSearch(value); 22 | }, 1000); 23 | 24 | setTime(interval); 25 | }; 26 | 27 | const handleSearch = (value) => { 28 | props.fetchCollections(props.address, DEFAULT_SKIP, DEFAULT_LIMIT, value); 29 | }; 30 | 31 | return ( 32 | 38 | 41 | 42 | ), 43 | }} 44 | name="listingSearch" 45 | placeholder={variables[props.lang].search} 46 | value={props.value} 47 | onChange={handleChange}/> 48 | ); 49 | }; 50 | 51 | SearchTextField.propTypes = { 52 | address: PropTypes.string.isRequired, 53 | fetchCollections: PropTypes.func.isRequired, 54 | lang: PropTypes.string.isRequired, 55 | value: PropTypes.string.isRequired, 56 | onChange: PropTypes.func.isRequired, 57 | }; 58 | 59 | const stateToProps = (state) => { 60 | return { 61 | address: state.account.wallet.connection.address, 62 | lang: state.language, 63 | value: state.marketplace.collectionsSearch.value, 64 | }; 65 | }; 66 | 67 | const actionsToProps = { 68 | onChange: setSearchCollections, 69 | fetchCollections, 70 | }; 71 | 72 | export default connect(stateToProps, actionsToProps)(SearchTextField); 73 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/ActiveCard/MoreInfo/Listings.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Button } from '@mui/material'; 3 | 4 | const Listings = () => { 5 | const data = [{ 6 | price: '5500', 7 | expiration: '3 hours', 8 | address: 'omniflix1jpudqpydw26r3297dlaj3whecvatyayklk4k9e', 9 | }, { 10 | price: '6900', 11 | expiration: 'Expired', 12 | address: 'omniflix1jpudqpydw26r3297dlaj3whecvatyayklk4k9e', 13 | }, { 14 | price: '6900', 15 | expiration: 'Expired', 16 | address: 'omniflix1jpudqpydw26r3297dlaj3whecvatyayklk4k9e', 17 | }]; 18 | 19 | return ( 20 |
21 |
22 | Listing Price 23 | Expiration 24 | From 25 | Action 26 |
27 |
28 | { 29 | data.map((item, index) => ( 30 |
31 |
32 | {item.price} 33 | FLIX 34 |
35 |
{item.expiration}
36 |
37 |

{item.address}

38 | {item.address.slice(item.address.length - 4, item.address.length)} 39 |
40 | 43 |
44 | )) 45 | } 46 |
47 |
48 | ); 49 | }; 50 | 51 | export default Listings; 52 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/ActiveCard/MoreInfo/Offers.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Button } from '@mui/material'; 3 | 4 | const Offers = () => { 5 | const data = [{ 6 | price: '5500', 7 | expiration: '3 hours', 8 | address: 'omniflix1jpudqpydw26r3297dlaj3whecvatyayklk4k9e', 9 | }, { 10 | price: '6900', 11 | expiration: 'Expired', 12 | address: 'omniflix1jpudqpydw26r3297dlaj3whecvatyayklk4k9e', 13 | }, { 14 | price: '6900', 15 | expiration: 'Expired', 16 | address: 'omniflix1jpudqpydw26r3297dlaj3whecvatyayklk4k9e', 17 | }]; 18 | 19 | return ( 20 |
21 |
22 | From 23 | Expiration 24 | Price 25 | Action 26 |
27 |
28 | { 29 | data.map((item, index) => ( 30 |
31 |
32 |

{item.address}

33 | {item.address.slice(item.address.length - 4, item.address.length)} 34 |
35 |
{item.expiration}
36 |
37 | {item.price} 38 | FLIX 39 |
40 | 43 |
44 | )) 45 | } 46 |
47 |
48 | ); 49 | }; 50 | 51 | export default Offers; 52 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/ActiveCard/PlaceBid/PlaceBidDialog/index.css: -------------------------------------------------------------------------------- 1 | .buy_nft_dialog .bid_nft { 2 | background-image: none; 3 | } 4 | 5 | .bid_nft_section { 6 | margin-top: 50px; 7 | } 8 | 9 | .bid_nft_section .bid_nft_section1 { 10 | font-family: 'Work Sans', sans-serif; 11 | font-weight: 500; 12 | font-size: 20px; 13 | line-height: 23px; 14 | color: #FFFFFF; 15 | text-align: left; 16 | margin-bottom: 15px; 17 | display: flex; 18 | align-items: center; 19 | justify-content: space-between; 20 | } 21 | 22 | .bid_nft_section .bid_nft_section1 .balance { 23 | font-family: 'Work Sans', sans-serif; 24 | font-weight: 600; 25 | font-size: 14px; 26 | line-height: 16px; 27 | color: #1DA1F2; 28 | } 29 | 30 | .bid_nft_section .amount_field { 31 | width: 100%; 32 | } 33 | 34 | .bid_nft_section .amount_field > div > div:nth-child(1) { 35 | margin: 0 !important; 36 | } 37 | 38 | .bid_nft_section .amount_field .token_start { 39 | font-family: 'Work Sans', sans-serif; 40 | font-size: 20px; 41 | line-height: 23px; 42 | color: #FFFFFF; 43 | margin-left: 10px; 44 | border-right: 1px solid #fff; 45 | padding-right: 20px; 46 | } 47 | 48 | .bid_nft_section .amount_field .amount_end { 49 | font-family: 'Work Sans', sans-serif; 50 | font-size: 14px; 51 | line-height: 16px; 52 | color: #1DA1F2; 53 | cursor: pointer; 54 | } 55 | 56 | .bid_nft_section .amount_field input { 57 | font-family: 'Work Sans', sans-serif; 58 | font-size: 20px; 59 | line-height: 23px; 60 | color: #FFFFFF; 61 | } 62 | 63 | .bid_nft_dialog .delist_dialog_action .delist_confirm { 64 | color: #000000 !important; 65 | } 66 | 67 | .bid_nft_dialog .delist_dialog_action { 68 | justify-content: center; 69 | } 70 | 71 | .bid_nft_section .bid_nft_section2 { 72 | display: flex; 73 | justify-content: flex-end; 74 | } 75 | 76 | .bid_nft_section .bid_nft_section2 .min_bid { 77 | font-family: 'Work Sans', sans-serif; 78 | font-weight: 500; 79 | font-size: 14px; 80 | line-height: 16px; 81 | background: linear-gradient(91.79deg, #FAC01E 3.15%, #FC762A 85.66%); 82 | -webkit-background-clip: text; 83 | -webkit-text-fill-color: transparent; 84 | margin-top: 10px; 85 | } 86 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/ActiveCard/PlaceBid/index.css: -------------------------------------------------------------------------------- 1 | .place_bid_div { 2 | display: flex; 3 | flex-direction: column; 4 | width: 100%; 5 | } 6 | 7 | .purchase_card .place_bid_div .purchase_license { 8 | margin: 0 0 10px 0; 9 | } 10 | 11 | .place_bid_div .counter { 12 | font-family: 'Inter', sans-serif; 13 | font-weight: 600; 14 | font-size: 14px; 15 | line-height: 17px; 16 | font-feature-settings: 'zero' on; 17 | color: #939393; 18 | } 19 | 20 | .place_bid_div .counter > span { 21 | color: #FFFFFF; 22 | } 23 | 24 | .place_bid_tooltip { 25 | width: 100%; 26 | } 27 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/ActiveCard/PurchaseCard/PurchaseTab.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Button } from '@mui/material'; 3 | 4 | class PurchaseTab extends React.Component { 5 | constructor (props) { 6 | super(props); 7 | this.state = { 8 | activePurchase: 'ownership', 9 | }; 10 | 11 | this.handleChange = this.handleChange.bind(this); 12 | } 13 | 14 | handleChange (event, value) { 15 | this.setState({ 16 | activePurchase: value, 17 | }); 18 | } 19 | 20 | render () { 21 | return ( 22 |
23 | {/* */} 30 | {/* */} 37 | 44 | {/* */} 51 |
52 | ); 53 | } 54 | } 55 | 56 | export default PurchaseTab; 57 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/ActiveCard/PurchaseCard/ValidityTab.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Button } from '@mui/material'; 3 | 4 | class ValidityTab extends React.Component { 5 | constructor (props) { 6 | super(props); 7 | this.state = { 8 | activeValidity: '1year', 9 | }; 10 | 11 | this.handleChange = this.handleChange.bind(this); 12 | } 13 | 14 | handleChange (event, value) { 15 | this.setState({ 16 | activeValidity: value, 17 | }); 18 | } 19 | 20 | render () { 21 | return ( 22 |
23 | 30 | 37 | 44 |
45 | ); 46 | } 47 | } 48 | 49 | export default ValidityTab; 50 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/ActiveCard/TransferSell/ListDialog/ChoosePrice/PriceTextField.js: -------------------------------------------------------------------------------- 1 | import * as PropTypes from 'prop-types'; 2 | import React from 'react'; 3 | import { connect } from 'react-redux'; 4 | import TextField from '../../../../../../components/TextField'; 5 | import variables from '../../../../../../utils/variables'; 6 | import { setSellTokenPrice } from '../../../../../../actions/marketplace'; 7 | 8 | const PriceTextField = (props) => { 9 | const handleChange = (value) => { 10 | if (Number(value) > 0 || value === '') { 11 | if (value === '') { 12 | props.onChange(''); 13 | return; 14 | } 15 | 16 | props.onChange(value); 17 | } 18 | }; 19 | 20 | return ( 21 | 28 | ); 29 | }; 30 | 31 | PriceTextField.propTypes = { 32 | lang: PropTypes.string.isRequired, 33 | value: PropTypes.string.isRequired, 34 | onChange: PropTypes.func.isRequired, 35 | }; 36 | 37 | const stateToProps = (state) => { 38 | return { 39 | lang: state.language, 40 | value: state.marketplace.sellTokenPrice, 41 | }; 42 | }; 43 | 44 | const actionsToProps = { 45 | onChange: setSellTokenPrice, 46 | }; 47 | 48 | export default connect(stateToProps, actionsToProps)(PriceTextField); 49 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/ActiveCard/TransferSell/ListDialog/ChoosePrice/SelectTokenSelectField.js: -------------------------------------------------------------------------------- 1 | import * as PropTypes from 'prop-types'; 2 | import React, { Component } from 'react'; 3 | import { connect } from 'react-redux'; 4 | import variables from '../../../../../../utils/variables'; 5 | import SelectField from '../../../../../../components/SelectField/TokenSelectField'; 6 | import { fetchIBCTokensList, setSellTokenValue } from '../../../../../../actions/marketplace'; 7 | import { tokensList } from '../../../../../../utils/defaultOptions'; 8 | import { images } from '../../../../../../components/NetworkImages/ImagesOptions'; 9 | 10 | class SelectTokenSelectField extends Component { 11 | componentDidMount () { 12 | if (this.props.ibcTokensList.length === 0 && !this.props.ibcTokensListInProgress) { 13 | this.props.fetchIBCTokensList(); 14 | } 15 | } 16 | 17 | render () { 18 | const list = this.props.ibcTokensList && this.props.ibcTokensList.length && 19 | this.props.ibcTokensList.filter((val) => val.status === 'ENABLED' && 20 | (val.network && val.network.display_denom !== 'ATOM/CH-0')); 21 | 22 | const options = [...tokensList]; 23 | if (list && list.length) { 24 | options.push(...list); 25 | } 26 | 27 | return ( 28 | 36 | ); 37 | } 38 | } 39 | 40 | SelectTokenSelectField.propTypes = { 41 | fetchIBCTokensList: PropTypes.func.isRequired, 42 | ibcTokensList: PropTypes.array.isRequired, 43 | ibcTokensListInProgress: PropTypes.bool.isRequired, 44 | lang: PropTypes.string.isRequired, 45 | onChange: PropTypes.func.isRequired, 46 | value: PropTypes.object, 47 | }; 48 | 49 | const stateToProps = (state) => { 50 | return { 51 | ibcTokensList: state.marketplace.ibcTokensList.value, 52 | ibcTokensListInProgress: state.marketplace.ibcTokensList.inProgress, 53 | lang: state.language, 54 | value: state.marketplace.sellTokenValue.value, 55 | }; 56 | }; 57 | 58 | const actionsToProps = { 59 | fetchIBCTokensList: fetchIBCTokensList, 60 | onChange: setSellTokenValue, 61 | }; 62 | 63 | export default connect(stateToProps, actionsToProps)(SelectTokenSelectField); 64 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/ActiveCard/TransferSell/ListDialog/ChoosePrice/index.css: -------------------------------------------------------------------------------- 1 | .choose_price { 2 | display: flex; 3 | align-items: center; 4 | justify-content: space-between; 5 | width: 100%; 6 | } 7 | 8 | .choose_price > div { 9 | height: 50px; 10 | } 11 | 12 | .choose_price .select_field_parent { 13 | width: 45%; 14 | } 15 | 16 | .choose_price .text_field { 17 | width: 50%; 18 | } 19 | 20 | .choose_price .select_field .select__control { 21 | height: 50px; 22 | } 23 | 24 | .choose_price .select_field .select__value-container { 25 | padding: 8px 20px; 26 | } 27 | 28 | @media (max-width: 425px) { 29 | .choose_price { 30 | flex-direction: column; 31 | } 32 | 33 | .choose_price > div { 34 | width: 100%; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/ActiveCard/TransferSell/ListDialog/ChoosePrice/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './index.css'; 3 | import SelectTokenSelectField from './SelectTokenSelectField'; 4 | import PriceTextField from './PriceTextField'; 5 | 6 | const ChoosePrice = () => { 7 | return ( 8 |
9 | 10 | 11 |
12 | ); 13 | }; 14 | 15 | export default ChoosePrice; 16 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/ActiveCard/TransferSell/ListDialog/ListingTabs.js: -------------------------------------------------------------------------------- 1 | import { Tab, Tabs } from '@material-ui/core'; 2 | import variables from '../../../../../utils/variables'; 3 | import React from 'react'; 4 | import * as PropTypes from 'prop-types'; 5 | import { connect } from 'react-redux'; 6 | 7 | class ListingTabs extends React.Component { 8 | render () { 9 | return ( 10 | 11 | this.props.handleChange('fixed-price')}/> 16 | 20 |

{variables[this.props.lang]['timed_auction']}

21 | {/* ({variables[this.props.lang]['coming_soon']}) */} 22 |
} 23 | value="timed-auction" 24 | onClick={() => this.props.handleChange('timed-auction')}/> 25 | 26 | ); 27 | } 28 | } 29 | 30 | ListingTabs.propTypes = { 31 | handleChange: PropTypes.func.isRequired, 32 | lang: PropTypes.string.isRequired, 33 | tabValue: PropTypes.string.isRequired, 34 | }; 35 | 36 | const stateToProps = (state) => { 37 | return { 38 | lang: state.language, 39 | }; 40 | }; 41 | 42 | export default connect(stateToProps)(ListingTabs); 43 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/ActiveCard/TransferSell/ListDialog/SplitInfoSwitch.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Switch from '@material-ui/core/Switch'; 3 | import * as PropTypes from 'prop-types'; 4 | import { connect } from 'react-redux'; 5 | import { makeStyles } from '@material-ui/core'; 6 | import { setSplitInfoStatus } from '../../../../../actions/marketplace'; 7 | 8 | const useStyles = makeStyles(() => ({ 9 | root: { 10 | '& .MuiSwitch-switchBase.Mui-checked': { 11 | color: '#FAC01E', 12 | '& + .MuiSwitch-track': { 13 | background: 'linear-gradient(91.79deg, #FAC01E 3.15%, #FC762A 85.66%)', 14 | }, 15 | }, 16 | }, 17 | switchBase: { 18 | color: '#696969', 19 | }, 20 | track: { 21 | background: '#555555', 22 | }, 23 | })); 24 | 25 | const SplitInfoSwitch = (props) => { 26 | const handleChange = (event) => { 27 | props.onChange(event.target.checked); 28 | }; 29 | 30 | return ( 31 | 41 | ); 42 | }; 43 | 44 | SplitInfoSwitch.propTypes = { 45 | value: PropTypes.bool.isRequired, 46 | onChange: PropTypes.func.isRequired, 47 | }; 48 | 49 | const stateToProps = (state) => { 50 | return { 51 | value: state.marketplace.splitInfo.status, 52 | }; 53 | }; 54 | 55 | const actionsToProps = { 56 | onChange: setSplitInfoStatus, 57 | }; 58 | 59 | export default connect(stateToProps, actionsToProps)(SplitInfoSwitch); 60 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/ActiveCard/TransferSell/ListDialog/TimedAuction/MinBidPrice/BidPercentageTextField.js: -------------------------------------------------------------------------------- 1 | import * as PropTypes from 'prop-types'; 2 | import React from 'react'; 3 | import { connect } from 'react-redux'; 4 | import TextField from '../../../../../../../components/TextField'; 5 | import variables from '../../../../../../../utils/variables'; 6 | import { setBidPercentagePrice } from '../../../../../../../actions/marketplace'; 7 | import { InputAdornment } from '@mui/material'; 8 | 9 | const BidPercentageTextField = (props) => { 10 | return ( 11 | 16 | % 17 | 18 | ), 19 | }} 20 | name="price" 21 | placeholder={variables[props.lang]['enter_price']} 22 | type="number" 23 | value={props.value} 24 | onChange={props.onChange}/> 25 | ); 26 | }; 27 | 28 | BidPercentageTextField.propTypes = { 29 | lang: PropTypes.string.isRequired, 30 | value: PropTypes.string.isRequired, 31 | onChange: PropTypes.func.isRequired, 32 | }; 33 | 34 | const stateToProps = (state) => { 35 | return { 36 | lang: state.language, 37 | value: state.marketplace.bidPercentage, 38 | }; 39 | }; 40 | 41 | const actionsToProps = { 42 | onChange: setBidPercentagePrice, 43 | }; 44 | 45 | export default connect(stateToProps, actionsToProps)(BidPercentageTextField); 46 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/ActiveCard/TransferSell/ListDialog/TimedAuction/MinBidPrice/index.css: -------------------------------------------------------------------------------- 1 | .min_bid_section { 2 | display: flex; 3 | align-items: center; 4 | justify-content: space-between; 5 | } 6 | 7 | .min_bid_section > .row { 8 | width: 49%; 9 | display: flex; 10 | flex-direction: column; 11 | align-items: flex-start; 12 | justify-content: flex-start; 13 | } 14 | 15 | .listing_dialog .bid_field .text_field { 16 | margin: 15px 0 25px; 17 | width: 100%; 18 | } 19 | 20 | .listing_dialog .bid_field .text_field p { 21 | font-family: 'Source Sans Pro', sans-serif; 22 | font-weight: 600; 23 | font-size: 18px; 24 | line-height: 23px; 25 | color: #B7B7B7; 26 | } 27 | 28 | .listing_dialog .min_bid_section .select_field_parent { 29 | width: 50%; 30 | margin-right: 0; 31 | } 32 | 33 | .listing_dialog .min_bid_section .row:first-child .text_field > div { 34 | border-radius: 0 5px 5px 0; 35 | } 36 | 37 | .min_bid_section .select_field .select__control > div { 38 | border-radius: 0; 39 | } 40 | 41 | .listing_dialog .white_list_content { 42 | margin: 20px 0 10px 0; 43 | } 44 | 45 | .listing_dialog .white_list_field { 46 | width: 100%; 47 | } 48 | 49 | .listing_dialog .white_list_field.text_field > div { 50 | height: auto; 51 | padding: 0; 52 | } 53 | 54 | @media (max-width: 425px) { 55 | .listing_dialog .min_bid_section .select_field_parent { 56 | width: 100%; 57 | } 58 | 59 | .min_bid_section, 60 | .listing_dialog .date_section { 61 | flex-direction: column; 62 | } 63 | 64 | .min_bid_section > .row, 65 | .listing_dialog .date_section .row { 66 | width: 100%; 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/ActiveCard/TransferSell/ListDialog/TimedAuction/MinBidPrice/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './index.css'; 3 | import SelectTokenSelectField from '../../ChoosePrice/SelectTokenSelectField'; 4 | import PriceTextField from '../../ChoosePrice/PriceTextField'; 5 | 6 | const MinBidPrice = () => { 7 | return ( 8 |
9 | 10 | 11 |
12 | ); 13 | }; 14 | 15 | export default MinBidPrice; 16 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/ActiveCard/TransferSell/ListDialog/TimedAuction/WhiteListSwitch.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Switch from '@material-ui/core/Switch'; 3 | import * as PropTypes from 'prop-types'; 4 | import { connect } from 'react-redux'; 5 | import { makeStyles } from '@material-ui/core'; 6 | import { setWhiteListSwitch } from '../../../../../../actions/marketplace'; 7 | 8 | const useStyles = makeStyles(() => ({ 9 | root: { 10 | '& .MuiSwitch-switchBase.Mui-checked': { 11 | color: '#FAC01E', 12 | '& + .MuiSwitch-track': { 13 | background: 'linear-gradient(91.79deg, #FAC01E 3.15%, #FC762A 85.66%)', 14 | }, 15 | }, 16 | }, 17 | switchBase: { 18 | color: '#696969', 19 | }, 20 | track: { 21 | background: '#555555', 22 | }, 23 | })); 24 | 25 | const WhiteListSwitch = (props) => { 26 | const handleChange = (event) => { 27 | props.onChange(event.target.checked); 28 | }; 29 | 30 | return ( 31 | 41 | ); 42 | }; 43 | 44 | WhiteListSwitch.propTypes = { 45 | value: PropTypes.bool.isRequired, 46 | onChange: PropTypes.func.isRequired, 47 | }; 48 | 49 | const stateToProps = (state) => { 50 | return { 51 | value: state.marketplace.whiteListSwitch, 52 | }; 53 | }; 54 | 55 | const actionsToProps = { 56 | onChange: setWhiteListSwitch, 57 | }; 58 | 59 | export default connect(stateToProps, actionsToProps)(WhiteListSwitch); 60 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/ActiveCard/TransferSell/ListDialog/TimedAuction/WhiteListTags.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import AutoCompleteTextField from '../../../../../../components/AutoCompleteTextField'; 3 | import * as PropTypes from 'prop-types'; 4 | import { connect } from 'react-redux'; 5 | import variables from '../../../../../../utils/variables'; 6 | import { setWhiteListValue } from '../../../../../../actions/marketplace'; 7 | 8 | class WhiteListTags extends Component { 9 | constructor (props) { 10 | super(props); 11 | 12 | this.handleChange = this.handleChange.bind(this); 13 | this.handleTags = this.handleTags.bind(this); 14 | } 15 | 16 | handleChange (value) { 17 | const tags = value.split(/,/); 18 | if (tags.length > 1) { 19 | let array = [...this.props.value, ...tags]; 20 | array = array.filter((item) => item !== ''); 21 | array = array.filter((item, pos) => array.indexOf(item) === pos); 22 | 23 | this.props.onChange(array); 24 | } 25 | } 26 | 27 | handleTags (value) { 28 | this.props.onChange(value); 29 | } 30 | 31 | render () { 32 | return ( 33 | 42 | ); 43 | } 44 | } 45 | 46 | WhiteListTags.propTypes = { 47 | lang: PropTypes.string.isRequired, 48 | value: PropTypes.array.isRequired, 49 | onChange: PropTypes.func.isRequired, 50 | }; 51 | 52 | const stateToProps = (state) => { 53 | return { 54 | lang: state.language, 55 | value: state.marketplace.whiteListValue, 56 | }; 57 | }; 58 | 59 | const actionsToProps = { 60 | onChange: setWhiteListValue, 61 | }; 62 | 63 | export default connect(stateToProps, actionsToProps)(WhiteListTags); 64 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/ActiveCard/TransferSell/ReciepentAddressTextField.js: -------------------------------------------------------------------------------- 1 | import * as PropTypes from 'prop-types'; 2 | import React from 'react'; 3 | import { connect } from 'react-redux'; 4 | import TextField from '../../../../components/TextField'; 5 | import variables from '../../../../utils/variables'; 6 | import { setRecipentAddress } from '../../../../actions/marketplace'; 7 | import { config } from '../../../../config'; 8 | import { decodeFromBech32 } from '../../../../utils/address'; 9 | 10 | const ReciepentAddressTextField = (props) => { 11 | const handleChange = (value) => { 12 | props.onChange(value); 13 | }; 14 | 15 | const valid = props.value && decodeFromBech32(props.value) && (props.value.indexOf(config.PREFIX) > -1); 16 | 17 | return ( 18 | 27 | ); 28 | }; 29 | 30 | ReciepentAddressTextField.propTypes = { 31 | lang: PropTypes.string.isRequired, 32 | value: PropTypes.string.isRequired, 33 | onChange: PropTypes.func.isRequired, 34 | balance: PropTypes.number, 35 | denom: PropTypes.string, 36 | }; 37 | 38 | const stateToProps = (state) => { 39 | return { 40 | lang: state.language, 41 | value: state.marketplace.recipientAddress, 42 | }; 43 | }; 44 | 45 | const actionsToProps = { 46 | onChange: setRecipentAddress, 47 | }; 48 | 49 | export default connect(stateToProps, actionsToProps)(ReciepentAddressTextField); 50 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/Auctions/Filters/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import '../../Filters/index.css'; 3 | import variables from '../../../../utils/variables'; 4 | import * as PropTypes from 'prop-types'; 5 | import { connect } from 'react-redux'; 6 | import { ReactComponent as BackIcon } from '../../../../assets/explore/Vector.svg'; 7 | import { IconButton } from '@mui/material'; 8 | import PriceRange from './PriceRange'; 9 | import ClassNames from 'classnames'; 10 | import OnSaleIn from './OnSaleIn'; 11 | import DotsLoading from '../../../../components/DotsLoading'; 12 | import { hideListingAuctionFilters } from '../../../../actions/auctions/filters'; 13 | import AuctionTypes from './AuctionTypes'; 14 | 15 | class Filters extends React.Component { 16 | render () { 17 | return ( 18 |
19 |
20 |

{variables[this.props.lang].filters}

21 | 22 | 23 | 24 |
25 | 26 | {this.props.ibcTokensListInProgress 27 | ? 28 | : } 29 | 30 |
31 | ); 32 | } 33 | } 34 | 35 | Filters.propTypes = { 36 | filterShow: PropTypes.bool.isRequired, 37 | hideFilters: PropTypes.func.isRequired, 38 | ibcTokensListInProgress: PropTypes.bool.isRequired, 39 | lang: PropTypes.string.isRequired, 40 | }; 41 | 42 | const stateToProps = (state) => { 43 | return { 44 | filterShow: state.auctions.filters.showLA, 45 | lang: state.language, 46 | ibcTokensListInProgress: state.marketplace.ibcTokensList.inProgress, 47 | }; 48 | }; 49 | 50 | const actionToProps = { 51 | hideFilters: hideListingAuctionFilters, 52 | }; 53 | 54 | export default connect(stateToProps, actionToProps)(Filters); 55 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/Auctions/List.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import * as PropTypes from 'prop-types'; 3 | import { connect } from 'react-redux'; 4 | import { withRouter } from 'react-router'; 5 | import Card from './Card'; 6 | import { hideListingAuctionFilters } from '../../../actions/auctions/filters'; 7 | 8 | const AuctionsList = (props) => { 9 | return ( 10 | <> 11 | {props.auctionListings.map((item, index) => { 12 | return ; 15 | })} 16 | 17 | ); 18 | }; 19 | 20 | AuctionsList.propTypes = { 21 | auctionListings: PropTypes.array.isRequired, 22 | filterShowLA: PropTypes.bool.isRequired, 23 | hideListingAuctionFilters: PropTypes.func.isRequired, 24 | }; 25 | 26 | const stateToProps = (state) => { 27 | return { 28 | auctionListings: state.auctions.auctionListings.result, 29 | filterShowLA: state.auctions.filters.showLA, 30 | }; 31 | }; 32 | 33 | const actionToProps = { 34 | hideListingAuctionFilters, 35 | }; 36 | 37 | export default withRouter(connect(stateToProps, actionToProps)(AuctionsList)); 38 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/Auctions/index.css: -------------------------------------------------------------------------------- 1 | .auctions_list .list_section4 > div .lsr_value { 2 | text-align: left; 3 | font-family: 'Work Sans', sans-serif; 4 | font-style: normal; 5 | font-weight: 600; 6 | font-size: 18px; 7 | line-height: 21px; 8 | font-feature-settings: 'zero' on; 9 | background: linear-gradient(91.79deg, #FAC01E 3.15%, #FC762A 85.66%); 10 | -webkit-background-clip: text; 11 | -webkit-text-fill-color: transparent; 12 | text-fill-color: transparent; 13 | display: flex; 14 | align-items: center; 15 | justify-content: flex-end; 16 | } 17 | 18 | .auctions_list .list_section4 > div .lsr_value img { 19 | width: 20px; 20 | margin-right: 10px; 21 | } 22 | 23 | .auctions_list .list_section4 .list_section4_left > span:first-child { 24 | text-align: right; 25 | display: flex; 26 | align-items: flex-start; 27 | justify-content: flex-end; 28 | width: 100%; 29 | } 30 | 31 | .auctions_list .list_section1_right > div { 32 | background: none; 33 | font-family: 'Work Sans', sans-serif; 34 | font-style: normal; 35 | font-weight: 600; 36 | font-size: 12px; 37 | line-height: 14px; 38 | font-feature-settings: 'zero' on; 39 | color: #1EC063; 40 | width: 100%; 41 | backdrop-filter: unset; 42 | flex-shrink: 0; 43 | } 44 | 45 | .auctions_list .list_section1_right > div svg { 46 | margin-right: 2px; 47 | fill: #1EC063; 48 | flex-shrink: 0; 49 | } 50 | 51 | .auctions_list .list_section1_right .list_section4_right { 52 | font-family: 'Work Sans', sans-serif; 53 | font-style: normal; 54 | font-weight: 600; 55 | font-size: 11px; 56 | line-height: 14px; 57 | font-feature-settings: 'zero' on; 58 | color: #EB5757; 59 | } 60 | 61 | .auctions_list .list_section1_right .list_section4_right svg { 62 | margin-right: 2px; 63 | fill: #EB5757; 64 | } 65 | 66 | .auctions_list .list_section4_right span { 67 | font-family: 'Inter', sans-serif; 68 | font-style: normal; 69 | font-weight: 600; 70 | font-size: 14px; 71 | line-height: 17px; 72 | font-feature-settings: 'zero' on; 73 | color: #EB5757; 74 | } 75 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/BurnDialog/BurnIDTextField.js: -------------------------------------------------------------------------------- 1 | import * as PropTypes from 'prop-types'; 2 | import React from 'react'; 3 | import { connect } from 'react-redux'; 4 | import OtpInput from 'react-otp-input'; 5 | import { setBurnId } from '../../../actions/marketplace'; 6 | 7 | const BurnNFTTextField = (props) => { 8 | return ( 9 | 14 | ); 15 | }; 16 | 17 | BurnNFTTextField.propTypes = { 18 | value: PropTypes.string.isRequired, 19 | onChange: PropTypes.func.isRequired, 20 | }; 21 | 22 | const stateToProps = (state) => { 23 | return { 24 | value: state.marketplace.burnID, 25 | }; 26 | }; 27 | 28 | const actionsToProps = { 29 | onChange: setBurnId, 30 | }; 31 | 32 | export default connect(stateToProps, actionsToProps)(BurnNFTTextField); 33 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/BurnDialog/index.js: -------------------------------------------------------------------------------- 1 | import { Dialog, DialogContent } from '@material-ui/core'; 2 | import React from 'react'; 3 | import * as PropTypes from 'prop-types'; 4 | import { connect } from 'react-redux'; 5 | import './index.css'; 6 | import Burn from './Burn'; 7 | import { hideBurnDialog } from '../../../actions/marketplace'; 8 | 9 | const BurnDialog = (props) => { 10 | return ( 11 | 17 | 18 | 19 | 20 | 21 | ); 22 | }; 23 | 24 | BurnDialog.propTypes = { 25 | asset: PropTypes.object.isRequired, 26 | handleClose: PropTypes.func.isRequired, 27 | lang: PropTypes.string.isRequired, 28 | open: PropTypes.bool.isRequired, 29 | }; 30 | 31 | const stateToProps = (state) => { 32 | return { 33 | open: state.marketplace.burnDialog.open, 34 | asset: state.marketplace.burnDialog.asset, 35 | lang: state.language, 36 | }; 37 | }; 38 | 39 | const actionToProps = { 40 | handleClose: hideBurnDialog, 41 | }; 42 | 43 | export default connect(stateToProps, actionToProps)(BurnDialog); 44 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/Filters/Status.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import * as PropTypes from 'prop-types'; 3 | import { connect } from 'react-redux'; 4 | import Accordions from '../../../components/Accordions'; 5 | import variables from '../../../utils/variables'; 6 | import { setStatus } from '../../../actions/filters'; 7 | 8 | const Status = (props) => { 9 | const handleSelect = (value) => { 10 | const list = new Set(props.value); 11 | 12 | if (list.has(value)) { 13 | list.delete(value); 14 | } else { 15 | list.add(value); 16 | } 17 | 18 | props.onChange(list); 19 | }; 20 | 21 | return ( 22 | 23 | {props.list.map((val) => { 24 | return ( 25 | handleSelect(val.value)}> 29 | {val.name} 30 | 31 | ); 32 | })} 33 | 34 | ); 35 | }; 36 | 37 | Status.propTypes = { 38 | lang: PropTypes.string.isRequired, 39 | list: PropTypes.array.isRequired, 40 | value: PropTypes.object.isRequired, 41 | onChange: PropTypes.func.isRequired, 42 | }; 43 | 44 | const stateToProps = (state) => { 45 | return { 46 | lang: state.language, 47 | list: state.filters.status.list, 48 | value: state.filters.status.value, 49 | }; 50 | }; 51 | 52 | const actionToProps = { 53 | onChange: setStatus, 54 | }; 55 | 56 | export default connect(stateToProps, actionToProps)(Status); 57 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/Filters/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './index.css'; 3 | import variables from '../../../utils/variables'; 4 | import * as PropTypes from 'prop-types'; 5 | import { connect } from 'react-redux'; 6 | import { ReactComponent as BackIcon } from '../../../assets/explore/Vector.svg'; 7 | import { IconButton } from '@mui/material'; 8 | // import Status from './Status'; 9 | import PriceRange from './PriceRange'; 10 | import { hideFilters } from '../../../actions/filters'; 11 | import ClassNames from 'classnames'; 12 | // import Genre from './Genre'; 13 | // import SingleCollection from './SingleCollection'; 14 | // import Chains from './Chains'; 15 | import OnSaleIn from './OnSaleIn'; 16 | // import Types from './Types'; 17 | import DotsLoading from '../../../components/DotsLoading'; 18 | import SearchTextField from '../SearchTextField'; 19 | 20 | class Filters extends React.Component { 21 | render () { 22 | return ( 23 |
24 |
25 |

{variables[this.props.lang].filters}

26 | 27 | 28 | 29 |
30 | 31 | {/* */} 32 | 33 | {/* */} 34 | {/* */} 35 | {/* */} 36 | {this.props.ibcTokensListInProgress 37 | ? 38 | : } 39 | {/* */} 40 |
41 | ); 42 | } 43 | } 44 | 45 | Filters.propTypes = { 46 | filterShow: PropTypes.bool.isRequired, 47 | hideFilters: PropTypes.func.isRequired, 48 | ibcTokensListInProgress: PropTypes.bool.isRequired, 49 | lang: PropTypes.string.isRequired, 50 | }; 51 | 52 | const stateToProps = (state) => { 53 | return { 54 | filterShow: state.filters.show, 55 | lang: state.language, 56 | ibcTokensListInProgress: state.marketplace.ibcTokensList.inProgress, 57 | }; 58 | }; 59 | 60 | const actionToProps = { 61 | hideFilters, 62 | }; 63 | 64 | export default connect(stateToProps, actionToProps)(Filters); 65 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/MenuPopover/index.css: -------------------------------------------------------------------------------- 1 | .menu_popover > div:nth-child(3) { 2 | background: #23282C; 3 | border: 1px solid #22272B; 4 | border-radius: 10px; 5 | } 6 | 7 | .menu_popover .menu_list { 8 | width: 160px; 9 | display: flex; 10 | align-items: center; 11 | justify-content: center; 12 | flex-direction: column; 13 | } 14 | 15 | .menu_popover .menu_list button { 16 | font-family: 'Work Sans', sans-serif; 17 | font-style: normal; 18 | font-weight: 500; 19 | font-size: 18px; 20 | line-height: 21px; 21 | letter-spacing: 0.005em; 22 | color: #969696; 23 | border-bottom: 1px solid #3E5364; 24 | border-radius: 0; 25 | padding: 12px 10px; 26 | width: 100%; 27 | text-transform: capitalize; 28 | } 29 | 30 | .menu_popover .menu_list button:last-child { 31 | border: none; 32 | } 33 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/MenuPopover/index.js: -------------------------------------------------------------------------------- 1 | import { Button, Popover } from '@mui/material'; 2 | import React from 'react'; 3 | import * as PropTypes from 'prop-types'; 4 | import { connect } from 'react-redux'; 5 | import { hideMenuPopover, showBurnDialog } from '../../../actions/marketplace'; 6 | import variables from '../../../utils/variables'; 7 | import './index.css'; 8 | 9 | const MenuPopover = (props) => { 10 | const open = Boolean(props.anchorEl); 11 | const id = open ? 'simple-popover' : undefined; 12 | 13 | const handleBurn = () => { 14 | props.hideMenuPopover(); 15 | props.showBurnDialog(props.asset); 16 | }; 17 | 18 | return ( 19 | 33 |
34 | 37 |
38 |
39 | ); 40 | }; 41 | 42 | MenuPopover.propTypes = { 43 | asset: PropTypes.object.isRequired, 44 | hideMenuPopover: PropTypes.func.isRequired, 45 | lang: PropTypes.string.isRequired, 46 | showBurnDialog: PropTypes.func.isRequired, 47 | anchorEl: PropTypes.any, 48 | }; 49 | 50 | const stateToProps = (state) => { 51 | return { 52 | lang: state.language, 53 | anchorEl: state.marketplace.menuPopover.anchorEl, 54 | asset: state.marketplace.menuPopover.asset, 55 | }; 56 | }; 57 | 58 | const actionToProps = { 59 | hideMenuPopover, 60 | showBurnDialog, 61 | }; 62 | 63 | export default connect(stateToProps, actionToProps)(MenuPopover); 64 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/Tabs/index.css: -------------------------------------------------------------------------------- 1 | .marketplace_tabs_section { 2 | display: flex; 3 | align-items: center; 4 | justify-content: space-between; 5 | padding: 20px 40px 0; 6 | } 7 | 8 | .marketplace_tabs_section .marketplace_tabs { 9 | display: flex; 10 | overflow: auto; 11 | } 12 | 13 | .marketplace_tabs .active_tab { 14 | font-family: 'Work Sans', sans-serif; 15 | font-style: normal; 16 | font-weight: 600; 17 | font-size: 18px; 18 | line-height: 21px; 19 | background: linear-gradient(91.79deg, #FAC01E 3.15%, #FC762A 85.66%); 20 | border-radius: 50px; 21 | } 22 | 23 | .marketplace_tabs .active_tab p { 24 | background: linear-gradient(180deg, #0E151B 0%, #000000 100%); 25 | -webkit-background-clip: text; 26 | -webkit-text-fill-color: transparent; 27 | text-fill-color: transparent; 28 | } 29 | 30 | .marketplace_tabs button { 31 | font-family: 'Work Sans', sans-serif; 32 | font-style: normal; 33 | font-weight: 500; 34 | font-size: 18px; 35 | line-height: 21px; 36 | color: #7B7B7B; 37 | background: rgba(33, 38, 43, 0.4); 38 | border: 1px solid #2F363D; 39 | border-radius: 50px; 40 | text-align: center; 41 | cursor: pointer; 42 | margin-right: 15px; 43 | padding: 8px 15px; 44 | text-transform: capitalize; 45 | flex-shrink: 0; 46 | } 47 | 48 | .marketplace_tabs button:last-child { 49 | margin-right: unset; 50 | } 51 | 52 | @media (max-width: 425px) { 53 | .marketplace_tabs_section { 54 | padding: 20px 20px 0; 55 | } 56 | 57 | .marketplace_tabs button { 58 | font-size: 14px; 59 | padding: 6px 10px; 60 | margin-right: 10px; 61 | } 62 | 63 | .marketplace_tabs .active_tab { 64 | font-size: 14px; 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/containers/MarketPlace/Tabs/index.js: -------------------------------------------------------------------------------- 1 | import * as PropTypes from 'prop-types'; 2 | import { connect } from 'react-redux'; 3 | import React from 'react'; 4 | import variables from '../../../utils/variables'; 5 | import { Button } from '@mui/material'; 6 | import './index.css'; 7 | import { hideActiveCard } from '../../../actions/explore'; 8 | 9 | const Tabs = (props) => { 10 | const handleClick = (value) => { 11 | props.onClick(value); 12 | props.hideActiveCard(); 13 | }; 14 | 15 | return ( 16 |
17 | 23 | 29 | 35 |
36 | ); 37 | }; 38 | 39 | Tabs.propTypes = { 40 | hideActiveCard: PropTypes.func.isRequired, 41 | lang: PropTypes.string.isRequired, 42 | statsData: PropTypes.object.isRequired, 43 | value: PropTypes.string.isRequired, 44 | onClick: PropTypes.func.isRequired, 45 | auctionListingsTotal: PropTypes.number, 46 | listingsTotal: PropTypes.number, 47 | }; 48 | 49 | const stateToProps = (state) => { 50 | return { 51 | lang: state.language, 52 | value: state.marketplace.marketPlaceTab.value, 53 | listingsTotal: state.marketplace.listings.total, 54 | auctionListingsTotal: state.auctions.auctionListings.total, 55 | }; 56 | }; 57 | 58 | const actionsToProps = { 59 | hideActiveCard, 60 | }; 61 | 62 | export default connect(stateToProps, actionsToProps)(Tabs); 63 | -------------------------------------------------------------------------------- /src/containers/MyAccount/IBCTokens/AmountValueTextField.js: -------------------------------------------------------------------------------- 1 | import * as PropTypes from 'prop-types'; 2 | import React from 'react'; 3 | import { connect } from 'react-redux'; 4 | import TextField from '../../../components/TextField'; 5 | // import variables from '../../../utils/variables'; 6 | import { InputAdornment } from '@mui/material'; 7 | import { setAmountValue } from '../../../actions/myAccount'; 8 | import NetworkImages from '../../../components/NetworkImages'; 9 | 10 | const AmountValueTextField = (props) => { 11 | const handleChange = (value) => { 12 | props.onChange(value); 13 | }; 14 | 15 | return ( 16 | 22 | 23 | {props.denom} 24 | 25 | ), 26 | // endAdornment: ( 27 | // props.onChange(props.balance > 0.1 ? (props.balance - 0.1) : props.balance)}> 30 | // {variables[props.lang].max} 31 | // 32 | // ), 33 | }} 34 | name="amount_value" 35 | type="number" 36 | value={props.value} 37 | onChange={handleChange}/> 38 | ); 39 | }; 40 | 41 | AmountValueTextField.propTypes = { 42 | lang: PropTypes.string.isRequired, 43 | value: PropTypes.string.isRequired, 44 | onChange: PropTypes.func.isRequired, 45 | balance: PropTypes.number, 46 | denom: PropTypes.string, 47 | }; 48 | 49 | const stateToProps = (state) => { 50 | return { 51 | lang: state.language, 52 | value: state.myAccount.amountValue, 53 | }; 54 | }; 55 | 56 | const actionsToProps = { 57 | onChange: setAmountValue, 58 | }; 59 | 60 | export default connect(stateToProps, actionsToProps)(AmountValueTextField); 61 | -------------------------------------------------------------------------------- /src/containers/MyAccount/IBCTokens/index.js: -------------------------------------------------------------------------------- 1 | import Table from './Table'; 2 | import './index.css'; 3 | import React, { useEffect } from 'react'; 4 | import DepositDialog from './DepositeDialog'; 5 | import WithDrawDialog from './WithDrawDialog'; 6 | 7 | const IBCTokens = () => { 8 | useEffect(() => { 9 | document.body.style.overflow = null; 10 | }, []); 11 | 12 | return ( 13 | <> 14 | 15 | 16 | 17 | 18 | ); 19 | }; 20 | 21 | export default IBCTokens; 22 | -------------------------------------------------------------------------------- /src/containers/NavBar/AppsPopover.js: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import Popover from '@mui/material/Popover'; 3 | import Typography from '@mui/material/Typography'; 4 | import AppsIcon from '@mui/icons-material/Apps'; 5 | import { Button, IconButton } from '@mui/material'; 6 | import { appsLinks } from '../../config'; 7 | import { ReactComponent as StudioIcon } from '../../assets/apps/studio.svg'; 8 | import { ReactComponent as InSyncIcon } from '../../assets/apps/insync.svg'; 9 | import { ReactComponent as TvIcon } from '../../assets/apps/tv.svg'; 10 | 11 | const AppsPopover = () => { 12 | const [anchorEl, setAnchorEl] = React.useState(null); 13 | 14 | const handleClick = (event) => { 15 | setAnchorEl(event.currentTarget); 16 | }; 17 | 18 | const handleClose = () => { 19 | setAnchorEl(null); 20 | }; 21 | 22 | const handleRedirect = (value) => { 23 | window.open(value, '_self'); 24 | handleClose(); 25 | }; 26 | 27 | const open = Boolean(anchorEl); 28 | const id = open ? 'apps-popover' : undefined; 29 | 30 | return ( 31 |
32 | 33 | 34 | 35 | 49 | handleRedirect(appsLinks.STUDIO)}> 50 | 53 | 54 | handleRedirect(appsLinks.IN_SYNC)}> 55 | 58 | 59 | handleRedirect(appsLinks.TV)}> 60 | 63 | 64 | 65 |
66 | ); 67 | }; 68 | 69 | export default AppsPopover; 70 | -------------------------------------------------------------------------------- /src/containers/NavBar/ConnectButton.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Button } from '@mui/material'; 3 | import * as PropTypes from 'prop-types'; 4 | import { connect } from 'react-redux'; 5 | import variables from '../../utils/variables'; 6 | import walletIcon from '../../assets/navbar/wallet.svg'; 7 | import { showConnectDialog } from '../../actions/navbar'; 8 | 9 | const ConnectButton = (props) => { 10 | return ( 11 | 15 | ); 16 | }; 17 | 18 | ConnectButton.propTypes = { 19 | lang: PropTypes.string.isRequired, 20 | showConnectDialog: PropTypes.func.isRequired, 21 | }; 22 | 23 | const stateToProps = (state) => { 24 | return { 25 | lang: state.language, 26 | }; 27 | }; 28 | 29 | const actionToProps = { 30 | showConnectDialog, 31 | }; 32 | 33 | export default connect(stateToProps, actionToProps)(ConnectButton); 34 | -------------------------------------------------------------------------------- /src/containers/NavBar/ConnectDialog/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import * as PropTypes from 'prop-types'; 3 | import { Dialog } from '@material-ui/core'; 4 | import variables from '../../../utils/variables'; 5 | import { connect } from 'react-redux'; 6 | import './index.css'; 7 | import { hideConnectDialog } from '../../../actions/navbar'; 8 | import KeplrButton from './KeplrButton'; 9 | // import WalletConnectButton from './WalletConnectButton'; 10 | 11 | const ConnectDialog = (props) => { 12 | return ( 13 | 19 |
20 |

{variables[props.lang]['connect_wallet']}

21 |
22 | 23 | {/* */} 24 |
25 |
26 |
27 | ); 28 | }; 29 | 30 | ConnectDialog.propTypes = { 31 | handleClose: PropTypes.func.isRequired, 32 | lang: PropTypes.string.isRequired, 33 | open: PropTypes.bool.isRequired, 34 | }; 35 | 36 | const stateToProps = (state) => { 37 | return { 38 | lang: state.language, 39 | open: state.navbar.connectDialog, 40 | }; 41 | }; 42 | 43 | const actionToProps = { 44 | handleClose: hideConnectDialog, 45 | }; 46 | 47 | export default connect(stateToProps, actionToProps)(ConnectDialog); 48 | -------------------------------------------------------------------------------- /src/containers/NavBar/ExpansionButton.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import * as PropTypes from 'prop-types'; 3 | import { connect } from 'react-redux'; 4 | import { Button } from '@material-ui/core'; 5 | import { Menu } from '@material-ui/icons'; 6 | import { showSideBar } from '../../actions/navbar'; 7 | 8 | const ExpansionButton = (props) => { 9 | const handleOpen = () => { 10 | props.showSideBar(); 11 | 12 | document.body.style.overflow = 'hidden'; 13 | }; 14 | 15 | return ( 16 | 23 | ); 24 | }; 25 | 26 | ExpansionButton.propTypes = { 27 | showSideBar: PropTypes.func.isRequired, 28 | }; 29 | 30 | const actionToProps = { 31 | showSideBar, 32 | }; 33 | 34 | export default connect(null, actionToProps)(ExpansionButton); 35 | -------------------------------------------------------------------------------- /src/containers/SingleAsset/Breadcrumb/index.css: -------------------------------------------------------------------------------- 1 | /* Breadcrumb CSS */ 2 | .breadcrumb { 3 | display: flex; 4 | align-items: center; 5 | font-family: 'Rubik', sans-serif; 6 | font-weight: 500; 7 | font-size: 20px; 8 | line-height: 24px; 9 | color: #FFFFFF; 10 | flex-wrap: wrap; 11 | margin-bottom: 20px; 12 | } 13 | 14 | .breadcrumb .home_icon svg { 15 | width: 15px; 16 | height: auto; 17 | } 18 | 19 | .breadcrumb .slash { 20 | margin: 0 8px; 21 | } 22 | 23 | .breadcrumb_collection, 24 | .home_icon { 25 | cursor: pointer; 26 | position: relative; 27 | } 28 | 29 | .home_icon img { 30 | width: 20px; 31 | } 32 | 33 | .breadcrumb_collection:hover:after { 34 | content: ""; 35 | width: 100%; 36 | position: absolute; 37 | left: 0; 38 | bottom: 0; 39 | border-width: 0 0 1px; 40 | border-style: solid; 41 | } 42 | 43 | /*.home_icon:hover:after {*/ 44 | /* content: '';*/ 45 | 46 | /* width: 100%;*/ 47 | /* position: absolute;*/ 48 | /* left: 0;*/ 49 | /* bottom: -3px;*/ 50 | 51 | /* border-width: 0 0 1px;*/ 52 | /* border-style: solid;*/ 53 | /*}*/ 54 | 55 | .breadcrumb > div { 56 | text-align: left; 57 | word-break: break-word; 58 | font-family: 'Source Sans Pro', sans-serif; 59 | font-weight: 500; 60 | font-size: 20px; 61 | line-height: 30px; 62 | display: flex; 63 | align-items: center; 64 | color: #F2F2F2; 65 | } 66 | 67 | .breadcrumb > span { 68 | color: #F2F2F2; 69 | } 70 | 71 | .breadcrumb > div .icon { 72 | width: 20px; 73 | } 74 | 75 | .breadcrumb > div:first-child { 76 | cursor: pointer; 77 | margin-left: unset; 78 | } 79 | -------------------------------------------------------------------------------- /src/containers/SingleAsset/Controls.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './index.css'; 3 | import { connect } from 'react-redux'; 4 | import * as PropTypes from 'prop-types'; 5 | import BackButton from '../../components/Player/Controls/BackButton'; 6 | import PlayButton from '../../components/Player/Controls/PlayButton'; 7 | import ForwardButton from '../../components/Player/Controls/ForwardButton'; 8 | import VolumeButton from '../../components/Player/Controls/VolumeButton'; 9 | 10 | const Controls = (props) => { 11 | return ( 12 |
13 | 14 | 15 | 16 | 17 |
18 | ); 19 | }; 20 | 21 | Controls.propTypes = { 22 | player: PropTypes.object, 23 | }; 24 | 25 | const stateToProps = (state) => { 26 | return { 27 | player: state.marketplace.player, 28 | }; 29 | }; 30 | 31 | export default connect(stateToProps)(Controls); 32 | -------------------------------------------------------------------------------- /src/containers/SingleCollection/Auctions/Filters/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import '../../../MarketPlace/Filters/index.css'; 3 | import variables from '../../../../utils/variables'; 4 | import * as PropTypes from 'prop-types'; 5 | import { connect } from 'react-redux'; 6 | import { ReactComponent as BackIcon } from '../../../../assets/explore/Vector.svg'; 7 | import { IconButton } from '@mui/material'; 8 | import PriceRange from './PriceRange'; 9 | import ClassNames from 'classnames'; 10 | import OnSaleIn from './OnSaleIn'; 11 | import DotsLoading from '../../../../components/DotsLoading'; 12 | import SearchTextField from '../../SearchListedTextField'; 13 | import { hideCollectionAuctionFilters } from '../../../../actions/auctions/filters'; 14 | import AuctionTypes from './AuctionTypes'; 15 | 16 | class Filters extends React.Component { 17 | render () { 18 | return ( 19 |
20 |
21 |

{variables[this.props.lang].filters}

22 | 23 | 24 | 25 |
26 | 27 | 28 | {this.props.ibcTokensListInProgress 29 | ? 30 | : } 31 | 32 |
33 | ); 34 | } 35 | } 36 | 37 | Filters.propTypes = { 38 | activeTab: PropTypes.string.isRequired, 39 | filterShow: PropTypes.bool.isRequired, 40 | hideFilters: PropTypes.func.isRequired, 41 | ibcTokensListInProgress: PropTypes.bool.isRequired, 42 | lang: PropTypes.string.isRequired, 43 | }; 44 | 45 | const stateToProps = (state) => { 46 | return { 47 | filterShow: state.auctions.filters.showCA, 48 | lang: state.language, 49 | ibcTokensListInProgress: state.marketplace.ibcTokensList.inProgress, 50 | }; 51 | }; 52 | 53 | const actionToProps = { 54 | hideFilters: hideCollectionAuctionFilters, 55 | }; 56 | 57 | export default connect(stateToProps, actionToProps)(Filters); 58 | -------------------------------------------------------------------------------- /src/containers/SingleCollection/Filters/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import '../../MarketPlace/Filters/index.css'; 3 | import variables from '../../../utils/variables'; 4 | import * as PropTypes from 'prop-types'; 5 | import { connect } from 'react-redux'; 6 | import { ReactComponent as BackIcon } from '../../../assets/explore/Vector.svg'; 7 | import { IconButton } from '@mui/material'; 8 | import PriceRange from './PriceRange'; 9 | import ClassNames from 'classnames'; 10 | import OnSaleIn from './OnSaleIn'; 11 | import DotsLoading from '../../../components/DotsLoading'; 12 | import SearchTextField from '../SearchListedTextField'; 13 | import { hideCollectionFilters } from '../../../actions/collections/filters'; 14 | 15 | class Filters extends React.Component { 16 | render () { 17 | return ( 18 |
19 |
20 |

{variables[this.props.lang].filters}

21 | 22 | 23 | 24 |
25 | 26 | 27 | {this.props.ibcTokensListInProgress 28 | ? 29 | : } 30 |
31 | ); 32 | } 33 | } 34 | 35 | Filters.propTypes = { 36 | activeTab: PropTypes.string.isRequired, 37 | filterShow: PropTypes.bool.isRequired, 38 | hideFilters: PropTypes.func.isRequired, 39 | ibcTokensListInProgress: PropTypes.bool.isRequired, 40 | lang: PropTypes.string.isRequired, 41 | }; 42 | 43 | const stateToProps = (state) => { 44 | return { 45 | filterShow: state.collection.filters.showCollectionFilter, 46 | lang: state.language, 47 | ibcTokensListInProgress: state.marketplace.ibcTokensList.inProgress, 48 | }; 49 | }; 50 | 51 | const actionToProps = { 52 | hideFilters: hideCollectionFilters, 53 | }; 54 | 55 | export default connect(stateToProps, actionToProps)(Filters); 56 | -------------------------------------------------------------------------------- /src/containers/SingleCollection/JsonSchemaDialog/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Button, Dialog } from '@mui/material'; 3 | import * as PropTypes from 'prop-types'; 4 | import { hideSchemaJsonDialog } from '../../../actions/marketplace'; 5 | import { connect } from 'react-redux'; 6 | import variables from '../../../utils/variables'; 7 | import './index.css'; 8 | import CopyButton from '../../../components/CopyButton'; 9 | 10 | const JsonSchemaDialog = (props) => { 11 | return ( 12 | 18 |
19 |

{variables[props.lang]['json_schema_properties']}

20 |
21 |
22 |                         {JSON.stringify(props.schema, undefined, 4)}
23 |                     
24 | 25 |
26 |
27 | 30 |
31 |
32 |
33 | ); 34 | }; 35 | 36 | JsonSchemaDialog.propTypes = { 37 | handleClose: PropTypes.func.isRequired, 38 | lang: PropTypes.string.isRequired, 39 | open: PropTypes.bool.isRequired, 40 | schema: PropTypes.object.isRequired, 41 | }; 42 | 43 | const stateToProps = (state) => { 44 | return { 45 | open: state.marketplace.jsonSchemaDialog.open, 46 | lang: state.language, 47 | schema: state.marketplace.jsonSchemaDialog.value, 48 | }; 49 | }; 50 | 51 | const actionToProps = { 52 | handleClose: hideSchemaJsonDialog, 53 | }; 54 | 55 | export default connect(stateToProps, actionToProps)(JsonSchemaDialog); 56 | -------------------------------------------------------------------------------- /src/containers/Snackbar.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { connect } from 'react-redux'; 3 | import * as PropTypes from 'prop-types'; 4 | import { hideSnackbar } from '../actions/snackbar'; 5 | import Snackbar from '../components/Snackbar'; 6 | 7 | const SnackbarMessage = (props) => { 8 | return ( 9 | 18 | ); 19 | }; 20 | 21 | SnackbarMessage.propTypes = { 22 | ibcTxInProgress: PropTypes.bool.isRequired, 23 | message: PropTypes.string.isRequired, 24 | open: PropTypes.bool.isRequired, 25 | onClose: PropTypes.func.isRequired, 26 | explorer: PropTypes.string, 27 | hash: PropTypes.string, 28 | variant: PropTypes.string, 29 | }; 30 | 31 | const stateToProps = (state) => { 32 | return { 33 | explorer: state.snackbar.explorer, 34 | ibcTxInProgress: state.account.ibc.ibcTxInProgress, 35 | open: state.snackbar.open, 36 | message: state.snackbar.message, 37 | variant: state.snackbar.variant, 38 | hash: state.snackbar.hash, 39 | }; 40 | }; 41 | 42 | const actionsToProps = { 43 | onClose: hideSnackbar, 44 | }; 45 | 46 | export default connect(stateToProps, actionsToProps)(SnackbarMessage); 47 | -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | } 7 | 8 | code { 9 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 10 | monospace; 11 | } 12 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | // eslint-disable-next-line 4 | import { Provider } from 'react-redux'; 5 | import { BrowserRouter, Route } from 'react-router-dom'; 6 | import { applyMiddleware, createStore } from 'redux'; 7 | import thunk from 'redux-thunk'; 8 | import App from './App'; 9 | import './index.css'; 10 | import reducer from './reducers'; 11 | import { composeWithDevTools } from 'redux-devtools-extension/developmentOnly'; 12 | import * as serviceWorker from './serviceWorker'; 13 | 14 | const store = createStore( 15 | reducer, 16 | composeWithDevTools({ 17 | trace: true, 18 | })(applyMiddleware( 19 | thunk)), 20 | ); 21 | 22 | const app = ( 23 | 24 | 25 | 26 | 27 | 28 | ); 29 | 30 | ReactDOM.render(app, document.getElementById('root')); 31 | serviceWorker.unregister(); 32 | -------------------------------------------------------------------------------- /src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /src/reducers/account/index.js: -------------------------------------------------------------------------------- 1 | import { combineReducers } from 'redux'; 2 | import BCDetails from './BCDetails'; 3 | import wallet from './wallet'; 4 | import { CHAIN_ID_SET, CONFIRM_DEPOSIT_SET, CONFIRM_WITHDRAW_SET } from '../../constants/account'; 5 | import { tokensList } from '../../utils/defaultOptions'; 6 | import { 7 | IBC_TOKENS_LIST_FETCH_ERROR, 8 | IBC_TOKENS_LIST_FETCH_IN_PROGRESS, 9 | IBC_TOKENS_LIST_FETCH_SUCCESS, 10 | } from '../../constants/marketplace'; 11 | import IBCTokens from './IBCTokens'; 12 | import { DEPOSITE_DIALOG_HIDE, WITHDRAW_DIALOG_HIDE } from '../../constants/myAccount'; 13 | 14 | const chainID = (state = { 15 | inProgress: false, 16 | value: tokensList[0], 17 | list: [], 18 | }, action) => { 19 | switch (action.type) { 20 | case CHAIN_ID_SET: 21 | return { 22 | ...state, 23 | value: action.value, 24 | }; 25 | case IBC_TOKENS_LIST_FETCH_IN_PROGRESS: 26 | return { 27 | ...state, 28 | inProgress: true, 29 | }; 30 | case IBC_TOKENS_LIST_FETCH_SUCCESS: { 31 | const array = [...action.value]; 32 | return { 33 | ...state, 34 | inProgress: false, 35 | list: [...array], 36 | }; 37 | } 38 | case IBC_TOKENS_LIST_FETCH_ERROR: 39 | return { 40 | ...state, 41 | inProgress: false, 42 | }; 43 | default: 44 | return state; 45 | } 46 | }; 47 | 48 | const confirmDeposit = (state = false, action) => { 49 | switch (action.type) { 50 | case CONFIRM_DEPOSIT_SET: 51 | return action.value; 52 | case DEPOSITE_DIALOG_HIDE: 53 | return false; 54 | 55 | default: 56 | return state; 57 | } 58 | }; 59 | 60 | const confirmWithdraw = (state = false, action) => { 61 | switch (action.type) { 62 | case CONFIRM_WITHDRAW_SET: 63 | return action.value; 64 | case WITHDRAW_DIALOG_HIDE: 65 | return false; 66 | 67 | default: 68 | return state; 69 | } 70 | }; 71 | 72 | export default combineReducers({ 73 | chainID, 74 | wallet, 75 | bc: BCDetails, 76 | ibc: IBCTokens, 77 | confirmDeposit, 78 | confirmWithdraw, 79 | }); 80 | -------------------------------------------------------------------------------- /src/reducers/campaign.js: -------------------------------------------------------------------------------- 1 | import { combineReducers } from 'redux'; 2 | import { 3 | FEE_GRANT_ALLOWANCE_ERROR, 4 | FEE_GRANT_ALLOWANCE_IN_PROGRESS, 5 | FEE_GRANT_ALLOWANCE_SUCCESS, 6 | } from '../constants/campaign'; 7 | 8 | const feeGrant = (state = { 9 | inProgress: false, 10 | value: {}, 11 | }, action) => { 12 | switch (action.type) { 13 | case FEE_GRANT_ALLOWANCE_IN_PROGRESS: 14 | return { 15 | ...state, 16 | inProgress: true, 17 | }; 18 | case FEE_GRANT_ALLOWANCE_SUCCESS: 19 | return { 20 | inProgress: false, 21 | value: action.value, 22 | }; 23 | case FEE_GRANT_ALLOWANCE_ERROR: 24 | return { 25 | ...state, 26 | inProgress: false, 27 | }; 28 | default: 29 | return state; 30 | } 31 | }; 32 | 33 | export default combineReducers({ 34 | feeGrant, 35 | }); 36 | -------------------------------------------------------------------------------- /src/reducers/collection/filters.js: -------------------------------------------------------------------------------- 1 | import { combineReducers } from 'redux'; 2 | import { ACTIVE_CARD_SET } from '../../constants/explore'; 3 | import { coinsList, onSaleList } from '../../utils/filters'; 4 | import { tokensList } from '../../utils/defaultOptions'; 5 | import { 6 | COLLECTION_FILTERS_HIDE, 7 | COLLECTION_FILTERS_SHOW, 8 | COLLECTION_ON_SALE_IN_SEARCH_SET, 9 | COLLECTION_ON_SALE_IN_SET, 10 | COLLECTION_PRICE_RANGE_COIN_SET, 11 | COLLECTION_PRICE_RANGE_SET, 12 | } from '../../constants/collections'; 13 | 14 | const showCollectionFilter = (state = false, action) => { 15 | switch (action.type) { 16 | case COLLECTION_FILTERS_SHOW: 17 | return true; 18 | case COLLECTION_FILTERS_HIDE: 19 | case ACTIVE_CARD_SET: 20 | return false; 21 | default: 22 | return state; 23 | } 24 | }; 25 | 26 | const priceRangeCollection = (state = { 27 | list: coinsList, 28 | value: tokensList && tokensList.length && tokensList[0], 29 | range: [0, 50000], 30 | min: 0, 31 | max: 50000, 32 | }, action) => { 33 | switch (action.type) { 34 | case COLLECTION_PRICE_RANGE_COIN_SET: 35 | return { 36 | ...state, 37 | value: action.value, 38 | }; 39 | case COLLECTION_PRICE_RANGE_SET: 40 | return { 41 | ...state, 42 | range: action.value, 43 | }; 44 | default: 45 | return state; 46 | } 47 | }; 48 | 49 | const onSaleInCollection = (state = { 50 | list: onSaleList, 51 | value: new Set(), 52 | search: '', 53 | }, action) => { 54 | switch (action.type) { 55 | case COLLECTION_ON_SALE_IN_SET: 56 | return { 57 | ...state, 58 | value: action.value, 59 | }; 60 | case COLLECTION_ON_SALE_IN_SEARCH_SET: 61 | return { 62 | ...state, 63 | search: action.value, 64 | }; 65 | default: 66 | return state; 67 | } 68 | }; 69 | 70 | export default combineReducers({ 71 | showCollectionFilter, 72 | priceRangeCollection, 73 | onSaleInCollection, 74 | }); 75 | -------------------------------------------------------------------------------- /src/reducers/explore.js: -------------------------------------------------------------------------------- 1 | import { combineReducers } from 'redux'; 2 | import { ACTIVE_CARD_HIDE, ACTIVE_CARD_SET } from '../constants/explore'; 3 | import { FILTERS_SHOW } from '../constants/filters'; 4 | 5 | const activeCard = (state = { 6 | open: false, 7 | value: {}, 8 | activeNFTID: '', 9 | }, action) => { 10 | switch (action.type) { 11 | case ACTIVE_CARD_SET: 12 | return { 13 | open: true, 14 | value: action.value, 15 | activeNFTID: action.value && action.value.nftDetails && action.value.nftDetails.id, 16 | }; 17 | case ACTIVE_CARD_HIDE: 18 | case FILTERS_SHOW: 19 | return { 20 | open: false, 21 | value: {}, 22 | activeNFTID: '', 23 | }; 24 | default: 25 | return state; 26 | } 27 | }; 28 | 29 | export default combineReducers({ 30 | activeCard, 31 | }); 32 | -------------------------------------------------------------------------------- /src/reducers/index.js: -------------------------------------------------------------------------------- 1 | import { combineReducers } from 'redux'; 2 | import language from './language'; 3 | import snackbar from './snackbar'; 4 | import account from './account'; 5 | import navbar from './navbar'; 6 | import filters from './filters'; 7 | import explore from './explore'; 8 | import marketplace from './marketplace'; 9 | import activity from './activity'; 10 | import myAccount from './myAccount'; 11 | import faucet from './faucet'; 12 | import collection from './collection'; 13 | import campaign from './campaign'; 14 | import home from './home'; 15 | import auctions from './auctions'; 16 | 17 | export default combineReducers({ 18 | account, 19 | auctions, 20 | language, 21 | snackbar, 22 | explore, 23 | navbar, 24 | filters, 25 | marketplace, 26 | activity, 27 | myAccount, 28 | faucet, 29 | collection, 30 | campaign, 31 | home, 32 | }); 33 | -------------------------------------------------------------------------------- /src/reducers/language.js: -------------------------------------------------------------------------------- 1 | const language = (state = 'en') => { 2 | return state; 3 | }; 4 | 5 | export default language; 6 | -------------------------------------------------------------------------------- /src/reducers/navbar.js: -------------------------------------------------------------------------------- 1 | import { combineReducers } from 'redux'; 2 | import { 3 | CONNECT_DIALOG_HIDE, 4 | CONNECT_DIALOG_SHOW, 5 | HIDE_SIDE_BAR_SET, 6 | SEARCH_VALUE_SET, 7 | SHOW_SIDE_BAR_SET, 8 | } from '../constants/navbar'; 9 | 10 | const searchValue = (state = '', action) => { 11 | if (action.type === SEARCH_VALUE_SET) { 12 | return action.value; 13 | } 14 | 15 | return state; 16 | }; 17 | 18 | const show = (state = false, action) => { 19 | switch (action.type) { 20 | case SHOW_SIDE_BAR_SET: 21 | return true; 22 | case HIDE_SIDE_BAR_SET: 23 | return false; 24 | default: 25 | return state; 26 | } 27 | }; 28 | 29 | const connectDialog = (state = false, action) => { 30 | switch (action.type) { 31 | case CONNECT_DIALOG_SHOW: 32 | return true; 33 | case CONNECT_DIALOG_HIDE: 34 | return false; 35 | default: 36 | return state; 37 | } 38 | }; 39 | 40 | export default combineReducers({ 41 | searchValue, 42 | show, 43 | connectDialog, 44 | }); 45 | -------------------------------------------------------------------------------- /src/reducers/snackbar.js: -------------------------------------------------------------------------------- 1 | import { MESSAGE_SHOW, SNACKBAR_HIDE } from '../constants/snackbar'; 2 | import { 3 | CONNECT_KEPLR_ACCOUNT_ERROR, 4 | TX_HASH_FETCH_SUCCESS, 5 | TX_SIGN_AND_BROAD_CAST_ERROR, 6 | TX_SIGN_AND_BROAD_CAST_SUCCESS, 7 | TX_SIGN_ERROR, 8 | WALLET_CONNECT_ERROR, 9 | } from '../constants/wallet'; 10 | import { CONNECT_BC_ACCOUNT_ERROR, VERIFY_ACCOUNT_ERROR, VERIFY_ACCOUNT_SUCCESS } from '../constants/account'; 11 | import { 12 | AMINO_SIGN_IBC_TX_ERROR, 13 | AMINO_SIGN_IBC_TX_SUCCESS, 14 | CONNECT_IBC_ACCOUNT_ERROR, 15 | IBC_BALANCE_FETCH_ERROR, 16 | IBC_TX_IN_PROGRESS_SET, 17 | TIMEOUT_HEIGHT_FETCH_ERROR, 18 | } from '../constants/IBCTokens'; 19 | import { FAUCET_BALANCE_ADD_ERROR } from '../constants/faucet'; 20 | import { FEE_GRANT_ALLOWANCE_ERROR, FEE_GRANT_ALLOWANCE_SUCCESS } from '../constants/campaign'; 21 | 22 | const snackbar = (state = { 23 | open: false, 24 | message: '', 25 | explorer: null, 26 | }, action) => { 27 | switch (action.type) { 28 | case FEE_GRANT_ALLOWANCE_SUCCESS: 29 | case FEE_GRANT_ALLOWANCE_ERROR: 30 | case CONNECT_BC_ACCOUNT_ERROR:// BC Account 31 | case CONNECT_KEPLR_ACCOUNT_ERROR: 32 | case WALLET_CONNECT_ERROR: 33 | case VERIFY_ACCOUNT_ERROR: 34 | case VERIFY_ACCOUNT_SUCCESS: 35 | case TX_SIGN_ERROR: 36 | case TX_SIGN_AND_BROAD_CAST_ERROR: 37 | case TX_SIGN_AND_BROAD_CAST_SUCCESS: 38 | case TX_HASH_FETCH_SUCCESS: 39 | case FAUCET_BALANCE_ADD_ERROR: 40 | case CONNECT_IBC_ACCOUNT_ERROR:// IBC Account 41 | case IBC_BALANCE_FETCH_ERROR: 42 | case AMINO_SIGN_IBC_TX_SUCCESS: 43 | case AMINO_SIGN_IBC_TX_ERROR: 44 | case TIMEOUT_HEIGHT_FETCH_ERROR: 45 | case MESSAGE_SHOW: 46 | return { 47 | open: true, 48 | message: action.message, 49 | variant: action.variant, 50 | hash: action.hash, 51 | explorer: action.explorer ? action.explorer : null, 52 | }; 53 | case SNACKBAR_HIDE: 54 | return { 55 | open: false, 56 | message: '', 57 | variant: '', 58 | hash: '', 59 | explorer: null, 60 | }; 61 | case IBC_TX_IN_PROGRESS_SET: 62 | if (action.type === false) { 63 | return { 64 | open: false, 65 | message: '', 66 | }; 67 | } 68 | return state; 69 | default: 70 | return state; 71 | } 72 | }; 73 | 74 | export default snackbar; 75 | -------------------------------------------------------------------------------- /src/registry/omniflix_custom_ts_types/gogoproto/gogo.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | import {configure, util} from "protobufjs/minimal"; 3 | import Long from "long"; 4 | 5 | export const protobufPackage = "gogoproto"; 6 | 7 | // If you get a compile-error about 'Constructor and ... have no overlap', 8 | // add '--ts_proto_opt=esModuleInterop=true' as a flag when calling 'protoc'. 9 | if (util.Long !== Long) { 10 | util.Long = Long as any; 11 | configure(); 12 | } 13 | -------------------------------------------------------------------------------- /src/registry/omniflix_custom_ts_types/google/api/annotations.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | import {configure, util} from "protobufjs/minimal"; 3 | import Long from "long"; 4 | 5 | export const protobufPackage = "google.api"; 6 | 7 | // If you get a compile-error about 'Constructor and ... have no overlap', 8 | // add '--ts_proto_opt=esModuleInterop=true' as a flag when calling 'protoc'. 9 | if (util.Long !== Long) { 10 | util.Long = Long as any; 11 | configure(); 12 | } 13 | -------------------------------------------------------------------------------- /src/utils/address.js: -------------------------------------------------------------------------------- 1 | import { Bech32 } from '@cosmjs/encoding'; 2 | 3 | export const decodeFromBech32 = (key) => { 4 | try { 5 | Bech32.decode(key); 6 | return true; 7 | } catch (e) { 8 | return false; 9 | } 10 | }; 11 | -------------------------------------------------------------------------------- /src/utils/arrays.js: -------------------------------------------------------------------------------- 1 | export const randomNoRepeats = (array) => { 2 | for (let i = array.length - 1; i > 0; i--) { 3 | const j = Math.floor(Math.random() * (i + 1)); 4 | [array[i], array[j]] = [array[j], array[i]]; 5 | } 6 | 7 | return array; 8 | }; 9 | -------------------------------------------------------------------------------- /src/utils/defaultOptions.js: -------------------------------------------------------------------------------- 1 | import { config } from '../config'; 2 | 3 | export const tokensList = [{ 4 | network: config, 5 | value: 'uflix', 6 | label: 'FLIX', 7 | }]; 8 | 9 | export const auctionsList = [{ 10 | value: '', 11 | label: 'All', 12 | }, { 13 | value: 'myAuctions', 14 | label: 'My Auctions', 15 | }, { 16 | value: 'myBids', 17 | label: 'My Bids', 18 | }]; 19 | -------------------------------------------------------------------------------- /src/utils/filters.js: -------------------------------------------------------------------------------- 1 | export const statusList = [{ 2 | name: 'Buy Now', 3 | value: 'buy_now', 4 | }, { 5 | name: 'On Auction', 6 | value: 'auction', 7 | }, { 8 | name: 'New', 9 | value: 'new', 10 | }, { 11 | name: 'Has Offers', 12 | value: 'offers', 13 | }]; 14 | 15 | export const coinsList = [{ 16 | name: 'FLIX', 17 | }, { 18 | name: 'USD', 19 | }, { 20 | name: 'JUNO', 21 | }, { 22 | name: 'ATOM', 23 | }, { 24 | name: 'AKT', 25 | }]; 26 | 27 | export const genreList = [{ 28 | name: 'Action', 29 | value: 'action', 30 | }, { 31 | name: 'Adventure', 32 | value: 'adventure', 33 | }, { 34 | name: 'Comedy', 35 | value: 'comedy', 36 | }, { 37 | name: 'Fantasy', 38 | value: 'fantasy', 39 | }, { 40 | name: 'Horror', 41 | value: 'horror', 42 | }, { 43 | name: 'Thriller', 44 | value: 'thriller', 45 | }, { 46 | name: 'Documentary', 47 | value: 'documentary', 48 | }, { 49 | name: 'Sports', 50 | value: 'sports', 51 | }, { 52 | name: 'Romantic', 53 | value: 'romantic', 54 | }, { 55 | name: 'Crime', 56 | value: 'crime', 57 | }, { 58 | name: 'Sci-Fi', 59 | value: 'sci_fi', 60 | }, { 61 | name: 'War', 62 | value: 'war', 63 | }, { 64 | name: 'Biographies', 65 | value: 'biographies', 66 | }]; 67 | 68 | export const collectionsList = ['CryptoPunk', 'Dragon Coins', 'Art of Bala', 'Ninja Kids', 'Elon Musk Emoji']; 69 | export const chainsList = ['OmniFlix Network', 'Smart Chain', 'KAVA', 'Sentinel', 'JUNO', 'OSMOSIS']; 70 | export const onSaleList = ['FLIX', 'BNC', 'DVPN', 'ATOM', 'ETH', 'JUNO', 'OSMOSIS']; 71 | 72 | export const typesList = [{ 73 | name: 'Videos', 74 | value: 'videos', 75 | }, { 76 | name: 'Gifs', 77 | value: 'gifs', 78 | }, { 79 | name: 'Images', 80 | value: 'images', 81 | }, { 82 | name: 'Music', 83 | value: 'music', 84 | }, { 85 | name: 'Podcast', 86 | value: 'podcast', 87 | }, { 88 | name: 'Files', 89 | value: 'files', 90 | }]; 91 | -------------------------------------------------------------------------------- /src/utils/numbers.js: -------------------------------------------------------------------------------- 1 | export const splitDecimals = (value) => { 2 | return value.toString().split('.'); 3 | }; 4 | 5 | export const commaSeparator = (value) => { 6 | return value.replace(/\B(?=(\d{3})+(?!\d))/g, ','); 7 | }; 8 | 9 | export const mathCeilDecimals = (value, decimal) => { 10 | let decimalLength = null; 11 | if ((value % 1) !== 0) { 12 | const amount = value.toString().split('.'); 13 | if (amount && amount.length && amount[1]) { 14 | decimalLength = amount[1].length; 15 | } 16 | } 17 | 18 | if (decimalLength > 2) { 19 | value = value * (10 ** decimal); 20 | value = Math.ceil(value); 21 | value = value / (10 ** decimal); 22 | 23 | return value; 24 | } 25 | 26 | return value; 27 | }; 28 | 29 | export const noExponent = (value) => { 30 | const data = String(value).split(/[eE]/); 31 | 32 | if (data.length === 1) { 33 | return data[0]; 34 | } 35 | 36 | let z = ''; 37 | const sign = this < 0 ? '-' : ''; 38 | const str = data[0].replace('.', ''); 39 | let mag = Number(data[1]) + 1; 40 | 41 | if (mag < 0) { 42 | z = sign + '0.'; 43 | while (mag++) { 44 | z += '0'; 45 | } 46 | return z + str.replace(/^\\-/, ''); 47 | } 48 | 49 | mag -= str.length; 50 | 51 | while (mag--) { 52 | z += '0'; 53 | } 54 | return str + z; 55 | }; 56 | -------------------------------------------------------------------------------- /src/utils/price.js: -------------------------------------------------------------------------------- 1 | const COUNT_ABBRS = ['', 'K', 'M', 'B', 'T', 'P', 'E', 'Z', 'Y']; 2 | 3 | export const formatCount = (count, withAbbr = false, decimals = 4) => { 4 | const i = (count === 0) ? count : Math.floor(Math.log(count) / Math.log(1000)); 5 | let result = parseFloat((count / Math.pow(1000, i)).toFixed(decimals)); 6 | if (withAbbr) { 7 | result += `${COUNT_ABBRS[i]}`; 8 | } 9 | 10 | return result; 11 | }; 12 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "downlevelIteration": true, 10 | "allowJs": true, 11 | "skipLibCheck": true, 12 | "esModuleInterop": true, 13 | "allowSyntheticDefaultImports": true, 14 | "strict": true, 15 | "forceConsistentCasingInFileNames": true, 16 | "module": "esnext", 17 | "moduleResolution": "node", 18 | "resolveJsonModule": true, 19 | "isolatedModules": true, 20 | "noEmit": true, 21 | "jsx": "react" 22 | }, 23 | "include": [ 24 | "src" 25 | ] 26 | } 27 | --------------------------------------------------------------------------------