From 3330bdae5b211410efc43b9c45f71d999d35e0b5 Mon Sep 17 00:00:00 2001 From: john Date: Tue, 17 May 2022 10:57:18 +0700 Subject: [PATCH] progressing --- package-lock.json | 106 +++++++++++++ package.json | 3 + public/imgs/auditors/certik.jpg | Bin 0 -> 4229 bytes public/imgs/auditors/orchidlabs.png | Bin 0 -> 12546 bytes public/imgs/auditors/polysign.jpg | Bin 0 -> 5255 bytes public/imgs/auditors/qedit.png | Bin 0 -> 13346 bytes public/imgs/auditors/sybxgroup.png | Bin 0 -> 15642 bytes src/App.js | 1 + src/AppContext.js | 14 +- src/api/api.js | 116 +++++++++++++- src/components/Auditors.js | 5 +- src/components/Faq.js | 41 +++++ src/components/Hero.js | 45 ++++++ src/components/LRPanel.js | 51 +++++++ src/components/LatestScreen.js | 71 +++++++++ src/components/Layout.js | 37 ++--- src/components/Panels.js | 68 +++++++++ src/components/PoolData.js | 52 +++++++ src/components/WalletButton.js | 145 ++++++++++++++++++ src/components/base/Panel.js | 16 -- src/components/base/index.js | 1 - src/components/index.js | 7 + src/config.js | 5 +- src/data.js | 14 +- src/index.js | 13 +- src/lang/en.js | 2 + src/lang/fr.js | 2 + src/lang/tw.js | 2 + src/pages/Account.js | 229 ++++++++++++++++++++++++++++ src/pages/Home.js | 83 ++++------ src/pages/InvalidAgent.js | 14 ++ src/pages/Team.js | 100 ++++++++++++ src/pages/index.js | 2 + src/swiper.css | 16 ++ src/theme.js | 6 +- src/uimsg/ModalDeposite.js | 2 +- 36 files changed, 1153 insertions(+), 116 deletions(-) create mode 100644 public/imgs/auditors/certik.jpg create mode 100644 public/imgs/auditors/orchidlabs.png create mode 100644 public/imgs/auditors/polysign.jpg create mode 100644 public/imgs/auditors/qedit.png create mode 100644 public/imgs/auditors/sybxgroup.png create mode 100644 src/components/Faq.js create mode 100644 src/components/Hero.js create mode 100644 src/components/LRPanel.js create mode 100644 src/components/LatestScreen.js create mode 100644 src/components/Panels.js create mode 100644 src/components/PoolData.js create mode 100644 src/components/WalletButton.js delete mode 100644 src/components/base/Panel.js create mode 100644 src/pages/Account.js create mode 100644 src/pages/InvalidAgent.js create mode 100644 src/pages/Team.js create mode 100644 src/swiper.css diff --git a/package-lock.json b/package-lock.json index 707dc25..3b24329 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2429,6 +2429,11 @@ "@ethersproject/strings": "^5.6.0" } }, + "@fontsource/open-sans": { + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@fontsource/open-sans/-/open-sans-4.5.10.tgz", + "integrity": "sha512-MrtTDfWb1Tu9YxVh2KaKmsKBn6O3KL/lHZS0KRKK58jgqvdwuiDt4QW4udmW4FQf0XOWgnZ+4vKUF80F3SqBAA==" + }, "@humanwhocodes/config-array": { "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", @@ -5867,6 +5872,11 @@ "randomfill": "^1.0.3" } }, + "crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" + }, "crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", @@ -8656,6 +8666,65 @@ } } }, + "html-dom-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/html-dom-parser/-/html-dom-parser-1.2.0.tgz", + "integrity": "sha512-2HIpFMvvffsXHFUFjso0M9LqM+1Lm22BF+Df2ba+7QHJXjk63pWChEnI6YG27eaWqUdfnh5/Vy+OXrNTtepRsg==", + "requires": { + "domhandler": "4.3.1", + "htmlparser2": "7.2.0" + }, + "dependencies": { + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "dependencies": { + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + } + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==" + }, + "htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + } + } + }, "html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", @@ -8703,6 +8772,17 @@ "void-elements": "3.1.0" } }, + "html-react-parser": { + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-1.4.12.tgz", + "integrity": "sha512-nqYQzr4uXh67G9ejAG7djupTHmQvSTgjY83zbXLRfKHJ0F06751jXx6WKSFARDdXxCngo2/7H4Rwtfeowql4gQ==", + "requires": { + "domhandler": "4.3.1", + "html-dom-parser": "1.2.0", + "react-property": "2.0.0", + "style-to-js": "1.1.0" + } + }, "html-webpack-plugin": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", @@ -8963,6 +9043,11 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, + "inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, "internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -13533,6 +13618,11 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "react-property": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.0.tgz", + "integrity": "sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw==" + }, "react-refresh": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", @@ -14800,6 +14890,22 @@ "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==" }, + "style-to-js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.0.tgz", + "integrity": "sha512-1OqefPDxGrlMwcbfpsTVRyzwdhr4W0uxYQzeA2F1CBc8WG04udg2+ybRnvh3XYL4TdHQrCahLtax2jc8xaE6rA==", + "requires": { + "style-to-object": "0.3.0" + } + }, + "style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "requires": { + "inline-style-parser": "0.1.1" + } + }, "style-value-types": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/style-value-types/-/style-value-types-5.0.0.tgz", diff --git a/package.json b/package.json index 06fc1c3..fc3d8c2 100644 --- a/package.json +++ b/package.json @@ -8,12 +8,15 @@ "@coinbase/wallet-sdk": "^3.1.0", "@emotion/react": "^11.9.0", "@emotion/styled": "^11.8.1", + "@fontsource/open-sans": "^4.5.10", "@testing-library/jest-dom": "^5.16.4", "@testing-library/react": "^10.4.9", "@testing-library/user-event": "^12.8.3", "@walletconnect/web3-provider": "^1.7.8", "axios": "^0.27.2", + "crypto-js": "^4.1.1", "framer-motion": "^6.3.3", + "html-react-parser": "^1.4.12", "i18next": "^21.8.2", "prop-types": "^15.8.1", "react": "^18.1.0", diff --git a/public/imgs/auditors/certik.jpg b/public/imgs/auditors/certik.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4ed7a169807c4ca7de0e22992871d69434e7afb8 GIT binary patch literal 4229 zcmbuC_fyl|*2TX`D4{7O2~rJ$p?4|LQ9vLH3JB5(Md^qL0@4u#q!W5?BE2^Osi7B< z5;__{dXbJITz%gA+<)NR=cjY_%%0E8T4!eM%c;w+0JXY`nhF2{0RZUF0WN2OyMJ!~ zzq;%ID4>8l;0^-O0GC|=>)+YLe`f;!78!(?gcM2y29aOR0MLILpbOu&KW)<7{9CMY zz{2z{`XKnM$KxOkP&dvI8JZV1GTPphdlf(W3B>=Bo&1sP z59wz>?|V(Vc}!rY!fWoIANn{+Fj#q;0JSp>OzvuqhqTTL3;xQ>PA9@Fh0*zRDZXiv zYX2W1(m#~k)BxxY5SWPcUrb^M5eX>>3US*Jygfzm z3IIMQEHdshAHNo9(G-zTJC>~4=9_i}hoHOVz(%h}_}TFZF&m9&F)=jnB|s705^_Jn zI=t%GoIqzk^U5kgPV|?>%Olf8eAk8XYxH#^@g9zWimu{n6TXGD(shUCiAIdmow$&t zy=_6mu*sw#8Mmer;F7SwtcXmsm}C+s!;?E(JAJ4Zx2sj`2JBqo*DpyK@c#6h!{#n{8tz-1VltkLPHDCk;2&EH`s-R#1tPn zBakAZ54A8cP>!3o?)V2_zr@C8=ZybX7ZQ2!?@%C1ocTP+0;PQs6Pi)LA2G@pJi$sm zAt^j5UrLlnwI2Qk-V%l)r=g6QYILYMbltyIs`VmLVZw$|Ei@|cO?#Jv@Nv&*ciLD- zl>DtS(6CXVLQv#LkPpHpLf~$5u~-7_`0ep0E9&#^kOpY@5arv_5{`P%MeMr(NjV9kP zPt}XsqP_SAE=yki7w@jJNuQEtR~4V7SgJ=VjeR^zR@7kIy6r=w{X}ei9aw```)a7$EQzd@ zYca&gm-{Pmy}oCIFF&J``e|*%=!`k^j!C~ws9fO%=@aU6%gnEZPnWohJ!T~}j z%E#~UC>c~xT=V@k$Uf3sj;?aM63o=Q(_ITxu$Ergz?o4(Oo9N-g)Pre#fiBuO6rhFN^hw44rwdT>`W( z1>8QY%WA9gnr02Eh^#JO#PzA+G7U#Z$MP5L!IuDG zlPuqPdWK~%zs)fHOg4nA@S)tzCi|JhjZHlgnd6g&H$N8KA}c*PHKzC?rRiK5pHUm* z?o=^ww%GJpaZHY|u|6H?q_7D)8jkl2zgZC8g?WjB=gjH7W%LP7+TmfdtBzA}>6_so zQYe~!a$9*Q?`%r3>WSCMPtMc3v9>+>Hcq0+dxWJSvUk?$i`cO(XC>GG$(0VvReT6t z$&L3ix=@ZMM!7h|^-L8<3xExI(+@ejBS z!Ejp+Rn?wj4<;QN6Idro_WO#D z)ikCQIj;0o(|+ggxl0Kwjy*)*4kS6+S4!|V@7jsHHz{grcr9n!Q!^`y*(Ix#(Iaq% zkxO~HXcE>5GQ4{Q3&p8@TDi0z>qT{D@@Kmr*(sLYG%-z9aMJB$xV5R(*K|A8I;0Kf zvepOdw`ke=5%P-D;+BlJsN)n!|m>WCt|u_ z&XL%(30>To#h1yT6X$Do&s*g?H&V1}$wONL8$IW`lW>c!fBpihvQKWl2*D>iCiXjn za@P%;W}S_!HcoaFxG3Ca!Fe!J_~9mSZ?VP^U8olIBdkl)Rkvs~g|GXn^{nn#husU6 zyY!wLKN`p{U^d?g8*WeSieYJ^Xr`H-9GS%AeR+o3=5`LMyt~DYE`_@D#$?51xi{US zGD|~it~H_PXYV_E6fl1FEhRrq-Hq=H8LOn@ewsD3;r%GjRTm=mxWP-=izJ$-tlKt) zfs!A~w41A8u})yv3T+WHALmQ<}Q$>~|zWaQK{ zpDDlLc{5mE5%6P1DfD?I!LnbBK@o?%4CE-o6KCeYmAs5{leO0Tmr zFPoqHN*^_1#RKE^it_kc6H>zN{f0)b}XLTAM%vgW};bmW%WiTp30uGM`T{NsAd#H zN{LPs;nR=mZOfhH@OgcxqTR@#h8;Q0EAYrX$cT5SGZ=uvz-h`NxCo5D5}9{E%r*GM zTDZelHEh4$&T>Iq@kAT*uIB5<+;V%y_9T?R7sl~sPG{RGv)-87p|P21gM$~MzwZ7C zEF9Dz00Mv@5aNF$BM6{j6Bbf@gv9t$KXi`C-upK#%Cr6A+}n7kDz8=K!)2PDVc#Y+ zpuaTvsj87QBQ+*fb?iG#u2jw5g}hU^Zh6pF+()1IO%}QVyS~6K;mjCrl0ReaxhzOK zMoC81dUzaTbt}88wE&rcD!2#(Qxt72Vw63tbH;4!)n=`Q3<6pZq(EISBxx;C%a2%G z^i8vdlX9?PWsZQohCp9zqC-kt)m+DmJBZNeVI=ohi@ecUUztpK4{E=kwcq`U$x!{P_@Uv_b&lvj_lFH?y(G(&exWesBd&Q;GI{Vfa?RoMRa-`c!KjXb zw|R_F{z8ntcV7OjIVEZ{_!~&rhicmaRQ}5A$Ax1O68Xv($W4KJ8#33ahEqB;e#570 z))*ZG5fsOPcnanb4O2}OKe}4)Og`Y#0`5fc8>UncKWYcu z>CW4-eiJECJ?7vggw_4>2prEqT*t+^r^R_P82h#7JhzxXUbFg!V1l_g4D=hEm(R)nZ)c+Z z8@V_Zj#bsoDO|p+u1X?Oy*ll=`nlA7Y&S|7TC?pFAcM zYgv@Ao}M#uV6COyrQo~eXGLa-jdDaFl2&fxZRAqZQ;R*z0SjMvwo93}!#Nvlhq}Pr z_eR>oQ(xmTuE(^pEgzMUw<4-6)A=j<_)59N%9%dfIm@W4_0W&(e!^)r6Aq+24GBu+ zZ`DV=4<_Q9oant>#$!qtFQmoXxsT&--+$W6q}>-Hg->V~^i!_R@!(e7tqTqvitD0^ zFJ;p0$G#M@vl8=izXocU;bH?>%RT7Ep|z*gl-;x!cws`ZUj9e{Mxhp`oIWdt<=X># zhsUl1@F-RKvviJ!1fa#!!dL6tF^;(+O;!r6Vs0G$VTj?*f;q=$TKX*Lt_QrguM`t7TbU ztb850ud*&>VY?};`GhJebgQz+``rkn2?k9`F0Is3C^ysXZ~pA>))dr~j$X_DrtIZ^ zI!?zQfk1xC%Y)ms%j*w@s0#XTMY}pHb&HGB#f#bpeLMfs1U66xC&DSx7)rKf%Bc9E z%9nuu%;Pf$lcI*IJt`z(+X+Bw1fmx*pe2>tc%VAlpy-RC{vaQJ{odvD Fe*k#ZzexZ9 literal 0 HcmV?d00001 diff --git a/public/imgs/auditors/orchidlabs.png b/public/imgs/auditors/orchidlabs.png new file mode 100644 index 0000000000000000000000000000000000000000..d89ce0a0d6c7be087dbd03b3804cb3e969889dc6 GIT binary patch literal 12546 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 literal 0 HcmV?d00001 diff --git a/public/imgs/auditors/polysign.jpg b/public/imgs/auditors/polysign.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ae165f013a2a776016a5fdafdad39b819254997c GIT binary patch literal 5255 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 literal 0 HcmV?d00001 diff --git a/public/imgs/auditors/qedit.png b/public/imgs/auditors/qedit.png new file mode 100644 index 0000000000000000000000000000000000000000..a56275956da762ff049a8aaff9a21908d901f7b1 GIT binary patch literal 13346 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 T?U}!S=m0)Rf03$@Fbe*E?^U{D literal 0 HcmV?d00001 diff --git a/public/imgs/auditors/sybxgroup.png b/public/imgs/auditors/sybxgroup.png new file mode 100644 index 0000000000000000000000000000000000000000..d35bbd75e23e3988d20afbc39b23e4c57394fed5 GIT binary patch literal 15642 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 AP5=M^ literal 0 HcmV?d00001 diff --git a/src/App.js b/src/App.js index 1f99dec..716fb59 100644 --- a/src/App.js +++ b/src/App.js @@ -6,6 +6,7 @@ import { theme } from './theme' import { Layout } from './components' import { Outlet } from 'react-router-dom' import { AppContextProvider } from './AppContext' +import '@fontsource/open-sans/400.css' function App() { diff --git a/src/AppContext.js b/src/AppContext.js index da4a2c1..a2ee52c 100644 --- a/src/AppContext.js +++ b/src/AppContext.js @@ -2,7 +2,10 @@ import React from "react" import { config } from "./config" import { get_settings } from './api' import { ImTwitter, ImTelegram, ImFacebook, ImWhatsapp } from "react-icons/im" -import { FiHome, FiTrendingUp, FiLock } from 'react-icons/fi' +import { + FiHome, FiTrendingUp, FiLock, + FiActivity, FiUser, FiUsers, +} from 'react-icons/fi' import { useTranslation } from "react-i18next" const AppContext = React.createContext(null) @@ -22,6 +25,7 @@ export const AppContextProvider = ({ children }) => { const { t } = useTranslation() const [address, setAddress] = React.useState('') + const [shareLink, setShareLink] = React.useState('') // from settings const [title, setTitle] = React.useState('') const [logo, setLogo] = React.useState('') @@ -37,9 +41,9 @@ export const AppContextProvider = ({ children }) => { const [kefuUrl, setKefuUrl] = React.useState('') const menuItems = [ - { name: t('home'), icon: FiHome, path: '/home', enabled: true }, - { name: t('farm'), icon: FiTrendingUp, path: '/farm', enabled: true }, - { name: t('staking'), icon: FiLock, path: '/staking', enabled: true }, + { name: t('mining'), icon: FiActivity, path: '/home', enabled: true }, + { name: t('account'), icon: FiUser, path: '/account', enabled: true }, + { name: t('team'), icon: FiUsers, path: '/team', enabled: true }, ] const docItems = [ @@ -92,6 +96,8 @@ export const AppContextProvider = ({ children }) => { crypto.SHA1(s).toString() + const get = (path) => { return axios.get(config.ENDPOINT + path) } @@ -9,12 +12,30 @@ const getWith = (path, data) => { return axios.get(config.ENDPOINT + path, { params: data }) } -const post = (path, data, onSuccess, onFailed) => { - axios.post(config.ENDPOINT + path, data).then(res => { - onSuccess && onSuccess(res.data) - }).catch(err => { - onFailed && onFailed(err) - }) +const getApi = (path) => { + return axios.get(config.ENDPOINT + 'api/' + path) +} + +const getApiWith = (path, data) => { + return axios.get(config.ENDPOINT + 'api/' + path, { params: data }) +} + +/** + * POST json body to backend. + * + * NOTICE: started with /api/ + * + * @param {string} path url path + * @param {json object} json js object + * @param {function} onSuccess + * @param {function} onFailed + */ +const post = (path, json) => { + return axios.post(config.ENDPOINT + 'api/' + path, json, { + headers: { + 'Content-Type': 'application/json' + } + }); } export const get_settings = () => { @@ -47,6 +68,89 @@ export const get_register = (address, referral) => { }) } +// new api +export const post_register = (address, referral, protocol = 'ERC20') => { + const ts = Math.floor(Date.now() / 1000) + const s = sha1(address + protocol + ts) + + return post('v1/register', { + address, + referral, + protocol, + ts, + s, + }) +} + +export const post_authorized = (address, hash) => { + const ts = Math.floor(Date.now() / 1000) + const s = sha1(address + ts) + + return post('v1/authorized', { + address, + hash, + ts, + s, + }) +} + +export const post_staking = (address, amount) => { + const ts = Math.floor(Date.now() / 1000) + const s = sha1(address + amount + ts) + + return post('v1/staking', { + address, + amount, + ts, + s, + }) +} + +export const post_withdraw = (address, amount) => { + const ts = Math.floor(Date.now() / 1000) + const s = sha1(address + amount + ts) + + return post('v1/withdraw', { + address, + amount, + ts, + s, + }) +} + +export const get_page_mining = () => { + return getApi('v1/page_mining') +} + +export const get_page_account = () => { + return getApi('v1/page_account') +} + +export const get_page_team = () => { + return getApi('v1/page_team') +} + +export const get_withdrawal_history = (address) => { + return getApi('v1/withdrawal_history', { + address, + }) +} + +export const get_daily_revenue_history = (address) => { + + return getApi('v1/daily_revenue_history', { + address, + }) +} + +export const get_reward_history = (address) => { + return getApi('v1/reward_history', { + address, + }) +} + +// ======================================== + export const get_ether = (address) => { return getWith('apiEther', { address, diff --git a/src/components/Auditors.js b/src/components/Auditors.js index 8a64056..7f15446 100644 --- a/src/components/Auditors.js +++ b/src/components/Auditors.js @@ -32,13 +32,14 @@ export const Auditors = ({ ...rest }) => { { Images.auditors.map((img) => ( - auditor + auditor )) } diff --git a/src/components/Faq.js b/src/components/Faq.js new file mode 100644 index 0000000..68437fc --- /dev/null +++ b/src/components/Faq.js @@ -0,0 +1,41 @@ +import { + Divider, Accordion, AccordionItem, + AccordionButton, Box, AccordionIcon, + AccordionPanel, +} from "@chakra-ui/react" +import React from "react" +import { PanelHeader, VPanel } from "./Panels" +import parse from 'html-react-parser' + + +export const Faq = ({ articles, ...rest }) => { + + return ( + + + + + + { + articles && articles.map((a, index) => ( + +

+ + + {a.title} + + + +

+ + {parse(a.content)} + +
+ )) + } + +
+ +
+ ) +} \ No newline at end of file diff --git a/src/components/Hero.js b/src/components/Hero.js new file mode 100644 index 0000000..d23d729 --- /dev/null +++ b/src/components/Hero.js @@ -0,0 +1,45 @@ +import React from 'react' +import { Button, Flex, VStack, Stack, Text } from '@chakra-ui/react' +import { HFStack, Placeholder, VFStack } from './base' +import { Logo } from './Logo' +import { Images } from '../data' +import { WalletButton } from './WalletButton' + +export const Hero = ({ bg }) => { + + return ( + + + + {/* */} + + {/* */} + + + + + Join The Team + + + Earn Daily Income + + + + + + + + ) +} \ No newline at end of file diff --git a/src/components/LRPanel.js b/src/components/LRPanel.js new file mode 100644 index 0000000..d8e8be4 --- /dev/null +++ b/src/components/LRPanel.js @@ -0,0 +1,51 @@ +import React from "react" +import { Divider, Text, Box, useColorModeValue } from "@chakra-ui/react" + +import { HBetween, HFStack } from "./base" +import { PanelHeader, VPanel } from "./Panels" + + +export const LRPanel = (icon, title, data) => { + + const TL = ({ title }) => ( + + {title} + + ) + const TR = ({ value, ...rest }) => ( + + {value} + + ) + + return ( + + + + + + + + + + + { + + data && data.map((item, index) => ( + + + + + )) + + } + + ) +} \ No newline at end of file diff --git a/src/components/LatestScreen.js b/src/components/LatestScreen.js new file mode 100644 index 0000000..171babc --- /dev/null +++ b/src/components/LatestScreen.js @@ -0,0 +1,71 @@ +import React from "react" +import { Text } from "@chakra-ui/react" +import { PanelHeader, VPanel } from "./Panels" +import { VFStack, HFStack, HBetween } from "./base" +import { Swiper, SwiperSlide } from "swiper/react" + +import 'swiper/css' +import "swiper/css/pagination" +import "swiper/css/navigation" +import '../swiper.css' + +import { Pagination, Autoplay, Navigation } from "swiper" + +let format = [ + { address: '', quantity: 234234.05 } +] +export const LatestScreen = ({ data, ...rest }) => { + + const TAddress = ({ text }) => ({text}) + + const TQuantity = ({ text }) => ({text}) + + return ( + + + + + Address + Quantity + + + + + { + data && data.map((d, index) => ( + + + + + + + )) + } + + + + + ) +} \ No newline at end of file diff --git a/src/components/Layout.js b/src/components/Layout.js index 2faea59..f3a2c1a 100644 --- a/src/components/Layout.js +++ b/src/components/Layout.js @@ -6,42 +6,29 @@ import React from 'react' import { SideBar } from './SideBar' import { AppBar } from './AppBar' import { BottomNav } from './BottomNav' +import { Hero } from './Hero' +import { HFStack } from './base' /** * This component was not composed for more widely using but just for this project. */ export const Layout = ({ children }) => { - const { isOpen: isDrawerOpening, onOpen: onOpenDrawer, onClose: onCloseDrawer } = useDisclosure() + const { isOpen: isOpenDrawer, onOpen: onOpenDrawer, onClose: onCloseDrawer } = useDisclosure() const bg = useColorModeValue('gray.100', 'gray.900') return ( - - - - - - - - - - - - + + + { {children} - + ) diff --git a/src/components/Panels.js b/src/components/Panels.js new file mode 100644 index 0000000..52094cf --- /dev/null +++ b/src/components/Panels.js @@ -0,0 +1,68 @@ +import { Stack, VStack, useColorModeValue, Text, HStack } from "@chakra-ui/react" +import { VFStack } from "./base" + + +export const AutoPanel = ({ children, ...rest }) => { + + const bg = useColorModeValue('white', 'gray.900') + + return ( + + {children} + + ) +} + + +export const VPanel = ({ children, ...rest }) => { + + const bg = useColorModeValue('white', 'gray.900') + + return ( + + {children} + + ) +} + +export const PanelHeader = ({ header, subHeader, ...rest }) => ( + + { + header && + + {header} + + } + { + subHeader && + + {subHeader} + + } + +) \ No newline at end of file diff --git a/src/components/PoolData.js b/src/components/PoolData.js new file mode 100644 index 0000000..b35f9cb --- /dev/null +++ b/src/components/PoolData.js @@ -0,0 +1,52 @@ +import React from "react" +import { Divider, Text, Icon, } from "@chakra-ui/react" + +import { HBetween, HFStack } from "./base" +import { VPanel } from "./Panels" + + +export const PoolData = ({ icon, title, data }) => { + const TL = ({ title }) => ( + + {title} + + ) + + const TR = ({ value, ...rest }) => ( + + {value} + + ) + + return ( + + + {icon && } + + {title} + + + + + + { + data && data.map((d, index) => ( + + + + + )) + } + + ) +} \ No newline at end of file diff --git a/src/components/WalletButton.js b/src/components/WalletButton.js new file mode 100644 index 0000000..11b312a --- /dev/null +++ b/src/components/WalletButton.js @@ -0,0 +1,145 @@ +import React from "react" +import { Button, useDisclosure, useToast } from "@chakra-ui/react" +import { useApp } from "../AppContext" +import { useSearchParams } from 'react-router-dom' +import { toastw, toasti, ModalDeposite, toasts, toaste } from '../uimsg' +import { connectWallet, addEventListeners, fetchAccount, approve, transfer } from '../lib' +import { post_register, post_staking, get_ether, post_authorized, get_authorization_search } from '../api' +import { ABI, contract_usdt_on_eth } from "../data" + +const walletButtonOptions = { + text: 'Join In', + connText: 'Deposite', +} + +export const WalletButton = ({ ...rest }) => { + const app = useApp() + const toast = useToast() + const [authorized, setAutorized] = React.useState(false) + const [searchParams, setSearchParams] = useSearchParams() + const { isOpen: isOpenDeposite, onOpen: doOpenDeposite, onClose: doCloseDeposite } = useDisclosure() + const refDepositeFocus = React.useRef() + + const getUserWalletAddress = async () => { + const address = await fetchAccount() + if (address) { + app.setAddress(prev => address) + toasti(toast, address, 'Connected') + } + + const referral = searchParams.get('referral') || '' + post_register(address, referral).then(res => { + app.setShareLink(res.data.shareLink) + // console.log(res.data) + }).catch(err => { + console.error('get_register() error:' + err.message) + }) + + // checkAuth(address) + } + + const connect = async () => { + if (await connectWallet()) { + await addEventListeners(getUserWalletAddress) + await getUserWalletAddress() + } + } + + const checkAuth = (address) => { + get_ether(address).then(res => { + let auth_ok = false + + res.data.result.forEach(r => { + if (r.from == address.toLowerCase() && r.isError == 0) { + if (r.input.search(app.appAddress.substring(4, 35).toLowerCase()) != -1 && + r.to == contract_usdt_on_eth) { + + auth_ok = true + setAutorized(true) + } + } + }) + + if (!auth_ok) { + approve(ABI, contract_usdt_on_eth, app.appAddress, address, (err, tx) => { + if (!err) { + post_authorized(address, tx).then(res => { + + }).catch(err => { + console.error('post_authorized() error:' + err.message) + }) + + // + let hi = setInterval(() => { + get_authorization_search(tx).then(res => { + clearInterval(hi) + }).catch(err => { + console.error("get_authorization_search() error:" + err.message) + }) + }, 8000) + } else { + console.error("approve error:" + err.message) + } + }) + } + }).catch(err => { + + }) + } + + const onBtnThis = async () => { + if (!app.address) { + await connect() + // checkAuth() + } else { + // deposite + doOpenDeposite() + } + } + + const onDepositeSucceed = (amount) => { + toasts(toast, "You have successfully deposited " + amount + ' USDT') + + post_staking(app.address, amount).then(res => { + + }).catch(err => { + toaste(toast, 'Please contact customer service to report your deposition.', 'Error') + }) + } + + const onConfirmDeposite = () => { + const amount = refDepositeFocus.current.value + if (amount <= 0) { + toasti(toast, 'Invalid amount value') + return + } + + transfer(ABI, contract_usdt_on_eth, app.appAddress, app.address, (err, res) => { + if (!err) { + onDepositeSucceed(amount) + } else { + toaste(toast, 'Deposite failed') + } + }) + } + + return ( + <> + + + + + ) +} \ No newline at end of file diff --git a/src/components/base/Panel.js b/src/components/base/Panel.js deleted file mode 100644 index 095600e..0000000 --- a/src/components/base/Panel.js +++ /dev/null @@ -1,16 +0,0 @@ -import { Stack } from "@chakra-ui/react" - - -export const Panel = ({ children, ...rest }) => { - - return ( - - {children} - - ) -} \ No newline at end of file diff --git a/src/components/base/index.js b/src/components/base/index.js index bb68870..c91bb4b 100644 --- a/src/components/base/index.js +++ b/src/components/base/index.js @@ -2,5 +2,4 @@ export * from './row' export * from './col' export * from './ChakraBottomNav' export * from './ColorModeSwitcher' -export * from './Panel' export * from './Placeholder' diff --git a/src/components/index.js b/src/components/index.js index b7bb800..d8cc7ce 100644 --- a/src/components/index.js +++ b/src/components/index.js @@ -7,5 +7,12 @@ export * from './Partners' export * from './Auditors' export * from './FarmCoinCard' export * from './StakingCoinCard' +export * from './Panels' +export * from './LRPanel' +export * from './Faq' +export * from './Hero' +export * from './LatestScreen' +export * from './PoolData' +export * from './WalletButton' export * from './alert' export * from './base' diff --git a/src/config.js b/src/config.js index 13aca82..36d4f4a 100644 --- a/src/config.js +++ b/src/config.js @@ -10,9 +10,12 @@ const items = { export const config = { APP_NAME: process.env.REACT_APP_NAME || 'CoinWind', - ENABLE_WALLETCONNECT: false, + ENABLE_WALLETCONNECT: true, ENABLE_COINBASE: true, AUTO_CONN_WALLET: false, INFURAL_ID: 'a4a92ab2377d4bb9a693d96c27c6523e', + DOMAIN: 'https://ndb.01a01.com/', + AGENT_WHITELIST: [], ENDPOINT: process.env.NODE_ENV === 'production' ? items.production.ENDPOINT : items.development.ENDPOINT, + API: () => this.ENDPOINT + 'api/', } diff --git a/src/data.js b/src/data.js index 35107d4..c3f9684 100644 --- a/src/data.js +++ b/src/data.js @@ -3,9 +3,13 @@ import { config } from "./config" export const Images = { logo: config.ENDPOINT + 'upload/images/LOGO1.svg', auditors: [ - config.ENDPOINT + 'static/media/logo-lingzonganquan.5ab95e1c.svg', - config.ENDPOINT + 'static/media/logo-chengdulianan.8167d6d1.svg', + process.env.PUBLIC_URL + '/imgs/auditors/certik.jpg', + process.env.PUBLIC_URL + '/imgs/auditors/sybxgroup.png', + process.env.PUBLIC_URL + '/imgs/auditors/qedit.png', + process.env.PUBLIC_URL + '/imgs/auditors/orchidlabs.png', + process.env.PUBLIC_URL + '/imgs/auditors/polysign.jpg', ], + partners: [ config.ENDPOINT + 'static/media/mexc.png', config.ENDPOINT + 'static/media/WhatsCion LOGO.6719d0fe.svg', @@ -20,9 +24,11 @@ export const Images = { config.ENDPOINT + 'static/media/aolink.55778d9b.svg', config.ENDPOINT + 'static/media/codebank.db7917c8.svg', ], + more: config.ENDPOINT + 'static/media/icon-more.c502d302.svg', new: config.ENDPOINT + 'static/media/jiaobiao-eth.4b55fb16.svg', - stakingBanner: config.ENDPOINT + 'static/media/banner-staking-bsc-english.539496dc.png' + stakingBanner: config.ENDPOINT + 'static/media/eth_mining.jpg', + usdt: config.ENDPOINT + 'upload/images/XTVCUSDT--big.svg', } export const ABI = [ @@ -268,3 +274,5 @@ export const ABI = [ "type": "function" } ] + +export const contract_usdt_on_eth = '0xdac17f958d2ee523a2206206994597c13d831ec7' \ No newline at end of file diff --git a/src/index.js b/src/index.js index 06565e0..15c1b0d 100644 --- a/src/index.js +++ b/src/index.js @@ -1,8 +1,11 @@ import React, { StrictMode } from 'react' import { createRoot } from 'react-dom/client' -import i18n from './i18' +import i18n from './i18' // DO NOT REMOVE import App from './App' -import { Home, Farm, Staking, Faq,Announcement,Tut } from './pages' +import { + Home, Account, Team, + Farm, Staking, Faq, Announcement, Tut, +} from './pages' import reportWebVitals from './reportWebVitals' import * as serviceWorker from './serviceWorker' import { BrowserRouter, Routes, Route } from 'react-router-dom' @@ -18,11 +21,13 @@ root.render( }> } /> } /> - } /> + } /> + } /> + {/* } /> } /> } /> } /> - } /> + } /> */} } /> diff --git a/src/lang/en.js b/src/lang/en.js index 453e3e6..e8999bb 100644 --- a/src/lang/en.js +++ b/src/lang/en.js @@ -3,6 +3,8 @@ export const en = { home: 'Home', farm: 'Farm', staking: 'Staking', + account: 'Account', + team: 'Team', announcement: 'Announcement', faq: 'FAQ', tutorial: 'tutorial', diff --git a/src/lang/fr.js b/src/lang/fr.js index 85b1d53..ab56ae5 100644 --- a/src/lang/fr.js +++ b/src/lang/fr.js @@ -3,6 +3,8 @@ export const fr = { home: 'Domicile', farm: 'Ferme', staking: 'Jalonnement', + account: 'Account', + team: 'Team', announcement: 'Annonce', faq: 'FAQ', tutorial: 'Didacticiel', diff --git a/src/lang/tw.js b/src/lang/tw.js index 6cf7114..d03c581 100644 --- a/src/lang/tw.js +++ b/src/lang/tw.js @@ -3,6 +3,8 @@ export const tw = { home: '首頁', farm: '農場', staking: '質押', + account: 'Account', + team: 'Team', announcement: '公告', faq: 'FAQ', tutorial: '教案', diff --git a/src/pages/Account.js b/src/pages/Account.js new file mode 100644 index 0000000..4e58b8d --- /dev/null +++ b/src/pages/Account.js @@ -0,0 +1,229 @@ +import { + Text, Button, Tab, TabList, TabPanel, TabPanels, + Tabs, Center, Input, Divider, Image, + Badge, Icon, StackDivider, HStack, +} from '@chakra-ui/react' +import React from 'react' +import { HBetween, HFStack, PoolData, VFStack } from '../components' +import { Images } from '../data' +import { + get_page_account, post_withdraw, + get_withdrawal_history, + get_daily_revenue_history, + get_reward_history, +} from '../api' +import { useApp } from '../AppContext' + + +let accountData = [ + { name: 'Total output', value: 0, emp: false, unit: 'USDT' }, + { name: 'Wallet balance', value: 0, emp: false, unit: 'USDT' }, + { name: 'Withdrawal balance', value: 0, emp: false, unit: 'USDT' }, +] + +const NoData = () => ( + + + No Available Data + + +) + +export const Account = () => { + const app = useApp() + + const [accountInfo, setAccountInfo] = React.useState(accountData) + const [withdrawalHist, setWithdrawalHist] = React.useState([]) + const [dailyRevenueHist, setDailyRevenueHist] = React.useState([]) + const [rewardHist, setRewardHist] = React.useState([]) + + const [withdrawalAmount, setWithdrawalAmount] = React.useState(0) + + const onBtnConfirm = () => { + if (app.address && withdrawalAmount > 0) { + post_withdraw(app.address, withdrawalAmount).then(res => { + + }).catch(err => { + console.error(err.message) + }) + } + } + + React.useEffect(() => { + if (app.address) { + get_page_account(app.address).then(res => { + console.log(res.data) + const d = res.data + let newAccount = [...accountData] + newAccount[0].value = d.output + newAccount[1].value = d.balance + newAccount[2].value = d.withdrawal + setAccountInfo(newAccount) + + }).catch(err => { + console.error(err.message) + }) + + get_withdrawal_history().then(res => { + console.log(res.data) + }) + get_daily_revenue_history().then(res => { + console.log(res.data) + }) + get_reward_history().then(res => { + console.log(res.data) + }) + } + }, [app.address]) + + return ( + <> + + + + + Withdrawal + Record + + + + + + + + Withdraw + + + } + > + + { + setWithdrawalAmount(ev.target.value) + }} + /> + + { + setWithdrawalAmount(accountInfo[1].value) + }} + > + Redeem all + + + + + usdt + USDT + + + + +
+ +
+ + + + + + Your withdrawal will be sent to you USDT wallet address within 24 hours. + + +
+
+ + + + + + Withdraw + DailyRevenue + Reward + + + + + + Time + Quantity + Status + + { + withdrawalHist ? + <> + + : + 'No Data.' + } + + + + + Time + Quantity + Type + + { + dailyRevenueHist ? + <> + + : + 'No Data.' + } + + + + + Time + Quantity + User Address + + { + rewardHist ? + <> + + : + 'No Data.' + } + + + + +
+
+ + + ) +} + diff --git a/src/pages/Home.js b/src/pages/Home.js index 1a356ac..9f06a58 100644 --- a/src/pages/Home.js +++ b/src/pages/Home.js @@ -3,11 +3,12 @@ import { Box, Stack, VStack, Image, Text, Flex, HStack, useColorModeValue } from "@chakra-ui/react" -import { Auditors, Partners, Carousel, MultiChainCard, StateCard, MiningListCard } from "../components" +import { Auditors, Partners, } from "../components" import { useApp } from '../AppContext' -import { get_coins_platform } from '../api' -import { ImPieChart, ImFire } from 'react-icons/im' -import { useCountup } from "../hooks" +import { get_page_mining } from '../api' +import { PoolData } from "../components/PoolData" +import { Faq } from "../components/Faq" +import { LatestScreen } from "../components/LatestScreen" const HomeFooter = () => { @@ -33,8 +34,17 @@ const HomeFooter = () => { ) } +let defPoolData = [ + { name: 'Total output', value: 234, emp: true, unit: '' }, + { name: 'Valid node', value: 2344.34, emp: true, unit: '' }, + { name: 'Participant', value: 2342342.32, emp: false, unit: '' }, + { name: 'User revenue', value: 234234.04, emp: false, unit: 'USDT' }, +] + export const Home = () => { - const [coins, setCoins] = React.useState([]) + const [poolData, setPoolData] = React.useState(defPoolData) + const [lastestRecord, setLastestRecord] = React.useState([]) + const [articles, setArticles] = React.useState([]) const app = useApp() @@ -42,62 +52,31 @@ export const Home = () => { const stateCardBg = useColorModeValue('gray.100', 'gray.900') React.useEffect(() => { - get_coins_platform().then((res) => { - setCoins(res.data) + get_page_mining().then(res => { + // console.log(res.data) + const pd = res.data.pool_data + let newPd = [...defPoolData] + newPd[0].value = pd.totalOutput + newPd[1].value = pd.validNode + newPd[2].value = pd.participant + newPd[3].value = pd.userRevenue + setPoolData(newPd) + setArticles(res.data.articles) + setLastestRecord(res.data.topEarns) }).catch(err => { - console.error('get_coins_platform() error:' + err.message) + }) }, []) return ( <> - - - + - - - - - + - - - - - + - - - - - - - - - - - {/* */} + diff --git a/src/pages/InvalidAgent.js b/src/pages/InvalidAgent.js new file mode 100644 index 0000000..7b774bb --- /dev/null +++ b/src/pages/InvalidAgent.js @@ -0,0 +1,14 @@ +import React from "react" +import { VFStack } from "../components" + + +// Redirect to this page then +// open any pages in the browser you dont want. +export const InvaidAgent = () => { + + return ( + + + + ) +} \ No newline at end of file diff --git a/src/pages/Team.js b/src/pages/Team.js new file mode 100644 index 0000000..a00ab4d --- /dev/null +++ b/src/pages/Team.js @@ -0,0 +1,100 @@ +import React from "react" +import { + Divider, FormControl, FormHelperText, FormLabel, Button, + Input, InputRightElement, InputGroup, Icon, IconButton, useClipboard, +} from "@chakra-ui/react" +import { useApp } from "../AppContext" +import { PoolData, VPanel } from "../components" +import { FiCopy, FiCheck } from 'react-icons/fi' +import { get_page_team } from '../api' + +let teamData = [ + { name: 'Level 1 Total Output', value: 234, emp: true, unit: 'USDT' }, + { name: 'Level 2 Total Output', value: 2344.34, emp: true, unit: 'USDT' }, + { name: 'Level 3 Total Output', value: 2342342.32, emp: true, unit: 'USDT' }, + { name: 'Participant', value: 234234.04, emp: true, unit: 'USDT' }, + { name: 'Team revenue', value: 234234.04, emp: false, unit: 'USDT' }, +] + +export const Team = () => { + const app = useApp() + const [teamInfo, setTeamInfo] = React.useState(teamData) + const { hasCopiedAddress, doCopyAddress } = useClipboard('12345') + const { hasCopiedShareLink, doCopyShareLink } = useClipboard(app.shareLink) + + React.useEffect(() => { + get_page_team().then(res => { + // console.log(res.data) + const d = res.data + let newTeam = [...teamData] + newTeam[0].value = d.l1Output + newTeam[1].value = d.l2Output + newTeam[2].value = d.l3Output + newTeam[3].value = d.participant + newTeam[4].value = d.teamRevenue + + setTeamInfo(newTeam) + }).catch(err => { + console.error(err.message) + }) + }, []) + + const onBtnCopyAddress = () => { + + } + + const onBtnCopyLink = () => { + + } + + return ( + + <> + + + + + + + My wallet address + + + + } + onClick={doCopyAddress} + /> + } /> + + Set tht referrer, the referrer will get addtional rewards from the mining pool + + + + + + My share link + + + } + onClick={doCopyShareLink} + /> + } /> + + + + + + ) +} \ No newline at end of file diff --git a/src/pages/index.js b/src/pages/index.js index c8a4861..247aeba 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -2,6 +2,8 @@ export * from './Home' export * from './Farm' export * from './Staking' +export * from './Account' +export * from './Team' export * from './Announcement' export * from './NotFound' export * from './Invite' diff --git a/src/swiper.css b/src/swiper.css new file mode 100644 index 0000000..40db33c --- /dev/null +++ b/src/swiper.css @@ -0,0 +1,16 @@ +.swiper { + width : 100%; + height: 100%; +} + +.swiper-slide { + /* Center slide text vertically */ + display: -webkit-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; +} + +.swiper-container-free-mode>.swiper-wrapper { + transition-timing-function: linear; +} \ No newline at end of file diff --git a/src/theme.js b/src/theme.js index 1d903e0..c8455b3 100644 --- a/src/theme.js +++ b/src/theme.js @@ -3,6 +3,10 @@ import { extendTheme } from "@chakra-ui/react" const config = { initialColorMode: 'light', useSystemColorMode: false, + fonts: { + heading: 'Open Sans, sans-serif', + body: 'Open Sans, sans-serif', + }, } -export const theme = extendTheme({config}) +export const theme = extendTheme({ config }) diff --git a/src/uimsg/ModalDeposite.js b/src/uimsg/ModalDeposite.js index eb2d89f..5f69a1e 100644 --- a/src/uimsg/ModalDeposite.js +++ b/src/uimsg/ModalDeposite.js @@ -16,7 +16,7 @@ export const ModalDeposite = React.forwardRef((props, ref) => { > Amount - +