├── Procfile
├── public
├── _redirects
├── robots.txt
├── favicon.ico
├── images
│ ├── logo-512.png
│ ├── flag-logo.png
│ ├── logo-black.png
│ ├── logo-white.png
│ ├── not-found.png
│ ├── about-alerts.png
│ ├── about-focus.png
│ ├── about-trader.png
│ ├── banner-city.jpeg
│ ├── banner-main.jpeg
│ ├── chat-avatar.png
│ ├── landing-money.png
│ ├── landing-price.png
│ ├── landing-works.png
│ ├── sidebar-logo.png
│ ├── about-education.png
│ ├── auth-background.png
│ ├── footer-facebook.png
│ ├── footer-twitter.png
│ ├── landing-action.png
│ ├── landing-market.png
│ ├── landing-trader.png
│ ├── profile-avatar.png
│ ├── about-professional.png
│ ├── about-real-market.png
│ ├── banner-background.png
│ ├── chat-header-logo.png
│ ├── footer-instagram.png
│ ├── offers-background.png
│ ├── banner-background-2.jpg
│ ├── education-background.png
│ ├── features-curvylines.png
│ ├── about-customer-support.png
│ ├── slider-arrow-forward.svg
│ ├── decoration
│ │ ├── triangle-deco.svg
│ │ └── circle-deco.svg
│ ├── features-signal.svg
│ ├── features-news.svg
│ ├── features-support.svg
│ └── features-broker.svg
├── locales
│ ├── zh
│ │ ├── starter-landing.json
│ │ └── common.json
│ ├── id
│ │ ├── starter-landing.json
│ │ └── common.json
│ ├── ar
│ │ ├── starter-landing.json
│ │ └── common.json
│ ├── de
│ │ ├── starter-landing.json
│ │ └── common.json
│ ├── en
│ │ ├── starter-landing.json
│ │ └── common.json
│ └── pt
│ │ ├── starter-landing.json
│ │ └── common.json
├── text
│ ├── link.js
│ └── brand.js
├── manifest.json
└── index.html
├── icon.png
├── src
├── views
│ ├── web
│ │ ├── auth
│ │ │ └── components
│ │ │ │ ├── Title
│ │ │ │ ├── index.js
│ │ │ │ ├── TitleSecondary.js
│ │ │ │ ├── Title.js
│ │ │ │ └── title-style.js
│ │ │ │ ├── SocialAuth
│ │ │ │ └── SocialAuth.js
│ │ │ │ └── AuthFrame
│ │ │ │ └── AuthFrame.js
│ │ ├── landing
│ │ │ ├── components
│ │ │ │ ├── FAQ
│ │ │ │ │ └── index.js
│ │ │ │ ├── Contact
│ │ │ │ │ └── index.js
│ │ │ │ ├── Footer
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── footer-style.js
│ │ │ │ ├── Header
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── menu.js
│ │ │ │ │ └── MobileMenu.js
│ │ │ │ ├── PageNav
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── pagenav-style.js
│ │ │ │ │ └── PageNav.js
│ │ │ │ ├── Counter
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── counter-style.js
│ │ │ │ │ └── Counter.js
│ │ │ │ ├── Feature
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── Feature.js
│ │ │ │ │ ├── Parallax.js
│ │ │ │ │ ├── MainFeature.js
│ │ │ │ │ └── feature-style.js
│ │ │ │ ├── Pricing
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── pricing-style.js
│ │ │ │ │ └── Pricing.js
│ │ │ │ ├── Subscribe
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── subscribe-style.js
│ │ │ │ │ └── SubscribeForm.js
│ │ │ │ ├── Testimonials
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── testi-style.js
│ │ │ │ │ └── Testimonials.js
│ │ │ │ ├── AnimateSlider
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── slider-style.js
│ │ │ │ │ └── AnimateSlider.js
│ │ │ │ └── Disclaimer
│ │ │ │ │ └── Disclaimer.js
│ │ │ └── Landing.js
│ │ ├── notFound
│ │ │ ├── NotFound.js
│ │ │ └── notFound-style.js
│ │ └── resetPassword
│ │ │ └── resetPassword-style.js
│ ├── admin
│ │ ├── support
│ │ │ └── Support.js
│ │ ├── education
│ │ │ └── Education.js
│ │ ├── social
│ │ │ └── Social.js
│ │ ├── dashboard
│ │ │ └── components
│ │ │ │ ├── TotalSponsoredUsers.js
│ │ │ │ ├── TotalUsers.js
│ │ │ │ ├── TotalSignals.js
│ │ │ │ ├── TotalLogins.js
│ │ │ │ ├── TotalFreeSignals.js
│ │ │ │ └── TotalPayingUsers.js
│ │ ├── logs
│ │ │ └── Logs.js
│ │ ├── subscriptions
│ │ │ ├── components
│ │ │ │ └── SubscriptionsList.js
│ │ │ └── Subscriptions.js
│ │ ├── questions
│ │ │ └── Questions.js
│ │ ├── groupChat
│ │ │ └── components
│ │ │ │ └── GroupChatMembers.js
│ │ ├── sponsor
│ │ │ └── Sponsor.js
│ │ ├── users
│ │ │ └── Users.js
│ │ ├── signals
│ │ │ └── Signals.js
│ │ └── account
│ │ │ └── Account.js
│ └── user
│ │ ├── support
│ │ ├── Support.js
│ │ └── components
│ │ │ ├── SupportLive.js
│ │ │ └── ComingSoon.js
│ │ ├── dashboard
│ │ └── components
│ │ │ ├── Budget.js
│ │ │ ├── TotalPips.js
│ │ │ ├── TotalUsers.js
│ │ │ ├── TotalProfits.js
│ │ │ ├── UpgradePlan.js
│ │ │ ├── TradePie.js
│ │ │ └── LatestAlerts.js
│ │ ├── education
│ │ └── Education.js
│ │ ├── groupChat
│ │ ├── components
│ │ │ ├── GroupChatMembers.js
│ │ │ └── UpgradePlan.js
│ │ └── GroupChat.js
│ │ └── viewSignals
│ │ └── ViewSignals.js
├── theme
│ ├── overrides
│ │ ├── MuiTypography.js
│ │ ├── MuiPaper.js
│ │ ├── MuiTableHead.js
│ │ ├── MuiButton.js
│ │ ├── MuiIconButton.js
│ │ ├── MuiTableCell.js
│ │ ├── MuiTableRow.js
│ │ └── index.js
│ ├── common.js
│ ├── Palette.js
│ └── Typography.js
├── vendors
│ ├── slick
│ │ ├── ajax-loader.gif
│ │ ├── fonts
│ │ │ ├── slick.eot
│ │ │ ├── slick.ttf
│ │ │ ├── slick.woff
│ │ │ └── slick.svg
│ │ ├── slick.css
│ │ └── slick-theme.css
│ ├── page-transition.css
│ └── animate-extends.css
├── helpers
│ └── getInitials.js
├── common
│ └── Validators.js
├── index.js
├── config
│ └── Constants.js
├── components
│ ├── RouteWithLayout.js
│ ├── AuthRouteWithLayout.js
│ └── AuthAdminRouteWithLayout.js
├── layouts
│ ├── web
│ │ ├── Main.js
│ │ └── components
│ │ │ └── Footer.js
│ ├── admin
│ │ ├── components
│ │ │ ├── Footer.js
│ │ │ ├── Topbar.js
│ │ │ └── sidebar
│ │ │ │ └── components
│ │ │ │ ├── Profile.js
│ │ │ │ └── SidebarNav.js
│ │ └── Main.js
│ └── user
│ │ ├── components
│ │ ├── Footer.js
│ │ ├── Topbar.js
│ │ └── sidebar
│ │ │ └── components
│ │ │ ├── UpgradePlan.js
│ │ │ ├── Profile.js
│ │ │ └── SidebarNav.js
│ │ └── Main.js
├── assets
│ └── scss
│ │ └── index.scss
└── App.js
├── screetshots
└── website.png
├── jsconfig.json
├── .gitignore
└── package.json
/Procfile:
--------------------------------------------------------------------------------
1 | web: npm run start
--------------------------------------------------------------------------------
/public/_redirects:
--------------------------------------------------------------------------------
1 | /* /index.html 200
--------------------------------------------------------------------------------
/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/icon.png
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 |
--------------------------------------------------------------------------------
/src/views/web/auth/components/Title/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './Title';
2 |
--------------------------------------------------------------------------------
/src/views/web/landing/components/FAQ/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './FAQ'
2 |
--------------------------------------------------------------------------------
/src/views/web/landing/components/Contact/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './Contact'
--------------------------------------------------------------------------------
/src/views/web/landing/components/Footer/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './Footer'
2 |
--------------------------------------------------------------------------------
/src/views/web/landing/components/Header/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './Header'
2 |
--------------------------------------------------------------------------------
/src/views/web/landing/components/PageNav/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './PageNav'
--------------------------------------------------------------------------------
/src/views/web/landing/components/Counter/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './Counter'
2 |
--------------------------------------------------------------------------------
/src/views/web/landing/components/Feature/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './Feature'
2 |
--------------------------------------------------------------------------------
/src/views/web/landing/components/Pricing/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './Pricing'
2 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/favicon.ico
--------------------------------------------------------------------------------
/src/views/web/landing/components/Subscribe/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './SubscribeForm'
2 |
--------------------------------------------------------------------------------
/src/views/web/landing/components/Testimonials/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './Testimonials'
--------------------------------------------------------------------------------
/src/views/web/landing/components/AnimateSlider/index.js:
--------------------------------------------------------------------------------
1 | export { default } from './AnimateSlider'
2 |
--------------------------------------------------------------------------------
/screetshots/website.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/screetshots/website.png
--------------------------------------------------------------------------------
/public/images/logo-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/logo-512.png
--------------------------------------------------------------------------------
/public/locales/zh/starter-landing.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "一个简单的例子",
3 | "description_text": "从这里开始建立你的页面。"
4 | }
--------------------------------------------------------------------------------
/public/images/flag-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/flag-logo.png
--------------------------------------------------------------------------------
/public/images/logo-black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/logo-black.png
--------------------------------------------------------------------------------
/public/images/logo-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/logo-white.png
--------------------------------------------------------------------------------
/public/images/not-found.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/not-found.png
--------------------------------------------------------------------------------
/public/images/about-alerts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/about-alerts.png
--------------------------------------------------------------------------------
/public/images/about-focus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/about-focus.png
--------------------------------------------------------------------------------
/public/images/about-trader.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/about-trader.png
--------------------------------------------------------------------------------
/public/images/banner-city.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/banner-city.jpeg
--------------------------------------------------------------------------------
/public/images/banner-main.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/banner-main.jpeg
--------------------------------------------------------------------------------
/public/images/chat-avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/chat-avatar.png
--------------------------------------------------------------------------------
/public/images/landing-money.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/landing-money.png
--------------------------------------------------------------------------------
/public/images/landing-price.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/landing-price.png
--------------------------------------------------------------------------------
/public/images/landing-works.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/landing-works.png
--------------------------------------------------------------------------------
/public/images/sidebar-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/sidebar-logo.png
--------------------------------------------------------------------------------
/src/theme/overrides/MuiTypography.js:
--------------------------------------------------------------------------------
1 | export default {
2 | gutterBottom: {
3 | marginBottom: 8
4 | }
5 | }
--------------------------------------------------------------------------------
/public/images/about-education.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/about-education.png
--------------------------------------------------------------------------------
/public/images/auth-background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/auth-background.png
--------------------------------------------------------------------------------
/public/images/footer-facebook.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/footer-facebook.png
--------------------------------------------------------------------------------
/public/images/footer-twitter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/footer-twitter.png
--------------------------------------------------------------------------------
/public/images/landing-action.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/landing-action.png
--------------------------------------------------------------------------------
/public/images/landing-market.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/landing-market.png
--------------------------------------------------------------------------------
/public/images/landing-trader.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/landing-trader.png
--------------------------------------------------------------------------------
/public/images/profile-avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/profile-avatar.png
--------------------------------------------------------------------------------
/src/vendors/slick/ajax-loader.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/src/vendors/slick/ajax-loader.gif
--------------------------------------------------------------------------------
/src/vendors/slick/fonts/slick.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/src/vendors/slick/fonts/slick.eot
--------------------------------------------------------------------------------
/src/vendors/slick/fonts/slick.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/src/vendors/slick/fonts/slick.ttf
--------------------------------------------------------------------------------
/jsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "baseUrl": "src"
4 | },
5 | "include": [
6 | "src",
7 | "i18n.js"
8 | ]
9 | }
--------------------------------------------------------------------------------
/public/images/about-professional.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/about-professional.png
--------------------------------------------------------------------------------
/public/images/about-real-market.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/about-real-market.png
--------------------------------------------------------------------------------
/public/images/banner-background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/banner-background.png
--------------------------------------------------------------------------------
/public/images/chat-header-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/chat-header-logo.png
--------------------------------------------------------------------------------
/public/images/footer-instagram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/footer-instagram.png
--------------------------------------------------------------------------------
/public/images/offers-background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/offers-background.png
--------------------------------------------------------------------------------
/src/vendors/slick/fonts/slick.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/src/vendors/slick/fonts/slick.woff
--------------------------------------------------------------------------------
/public/images/banner-background-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/banner-background-2.jpg
--------------------------------------------------------------------------------
/public/images/education-background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/education-background.png
--------------------------------------------------------------------------------
/public/images/features-curvylines.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/features-curvylines.png
--------------------------------------------------------------------------------
/public/images/about-customer-support.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbdeenM/megatrade-website/HEAD/public/images/about-customer-support.png
--------------------------------------------------------------------------------
/public/locales/id/starter-landing.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Contoh sederhana",
3 | "description_text": "Mulai buat halaman Anda dari sini."
4 | }
--------------------------------------------------------------------------------
/public/locales/ar/starter-landing.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "مثال بسيط",
3 | "description_text": "إنها صفحة فارغة. ابدأ في إنشاء صفحتك من هنا."
4 | }
--------------------------------------------------------------------------------
/public/locales/de/starter-landing.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Ein einfaches Beispiel",
3 | "description_text": "Baue deine Seite mit here auf"
4 | }
--------------------------------------------------------------------------------
/public/locales/en/starter-landing.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "A simple example",
3 | "description_text": "Start to build your'e page from here."
4 | }
--------------------------------------------------------------------------------
/public/locales/pt/starter-landing.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Um exemplo simples",
3 | "description_text": "Comece a construir sua página aqui."
4 | }
--------------------------------------------------------------------------------
/src/theme/overrides/MuiPaper.js:
--------------------------------------------------------------------------------
1 | export default {
2 | elevation1: {
3 | boxShadow: '0 0 0 1px rgba(63,63,68,0.05), 0 1px 3px 0 rgba(63,63,68,0.15)'
4 | }
5 | }
--------------------------------------------------------------------------------
/src/theme/overrides/MuiTableHead.js:
--------------------------------------------------------------------------------
1 | import { colors } from '@material-ui/core'
2 |
3 | export default {
4 | root: {
5 | backgroundColor: colors.grey[50]
6 | }
7 | }
--------------------------------------------------------------------------------
/src/helpers/getInitials.js:
--------------------------------------------------------------------------------
1 | export default (name = '') =>
2 | name
3 | .replace(/\s+/, ' ')
4 | .split(' ')
5 | .slice(0, 2)
6 | .map(v => v && v[0].toUpperCase())
7 | .join('')
--------------------------------------------------------------------------------
/src/common/Validators.js:
--------------------------------------------------------------------------------
1 | const checked = (value, options) => {
2 | if (value !== true) {
3 | return options.message || 'must be checked'
4 | }
5 | };
6 |
7 | export default {
8 | checked
9 | };
--------------------------------------------------------------------------------
/public/text/link.js:
--------------------------------------------------------------------------------
1 | const link = {
2 | starter: {
3 | home: '/',
4 | contact: '/contact',
5 | login: '/login',
6 | register: '/register'
7 | }
8 | };
9 |
10 | export default link;
11 |
--------------------------------------------------------------------------------
/src/views/web/landing/components/Header/menu.js:
--------------------------------------------------------------------------------
1 | const menu = [
2 | 'home',
3 | 'feature',
4 | 'testimonials',
5 | 'pricing',
6 | 'faq',
7 | 'subscribe',
8 | 'contact'
9 | ]
10 |
11 | export default menu
12 |
--------------------------------------------------------------------------------
/src/theme/overrides/MuiButton.js:
--------------------------------------------------------------------------------
1 | export default {
2 | contained: {
3 | backgroundColor: '#FFFFFF',
4 | boxShadow:
5 | '0 1px 1px 0 rgba(0,0,0,0.14), 0 2px 1px -1px rgba(0,0,0,0.12), 0 1px 3px 0 rgba(0,0,0,0.20)'
6 | }
7 | }
--------------------------------------------------------------------------------
/src/theme/overrides/MuiIconButton.js:
--------------------------------------------------------------------------------
1 | import Palette from '../Palette'
2 |
3 | export default {
4 | root: {
5 | color: Palette.icon,
6 | '&:hover': {
7 | backgroundColor: 'rgba(0, 0, 0, 0.03)'
8 | }
9 | }
10 | }
--------------------------------------------------------------------------------
/src/theme/overrides/MuiTableCell.js:
--------------------------------------------------------------------------------
1 | import Palette from '../Palette'
2 | import Typography from '../Typography'
3 |
4 | export default {
5 | root: {
6 | ...Typography.body1,
7 | borderBottom: `1px solid ${Palette.divider}`
8 | }
9 | }
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ReactDOM from 'react-dom'
3 |
4 | import App from './App'
5 | import * as serviceWorker from './serviceWorker'
6 |
7 | ReactDOM.render( , document.getElementById('root'))
8 |
9 | serviceWorker.unregister()
--------------------------------------------------------------------------------
/public/images/slider-arrow-forward.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/theme/overrides/MuiTableRow.js:
--------------------------------------------------------------------------------
1 | import Palette from '../Palette'
2 |
3 | export default {
4 | root: {
5 | '&$selected': {
6 | backgroundColor: Palette.background.default
7 | },
8 | '&$hover': {
9 | '&:hover': {
10 | backgroundColor: Palette.background.default
11 | }
12 | }
13 | }
14 | }
--------------------------------------------------------------------------------
/src/views/web/landing/components/AnimateSlider/slider-style.js:
--------------------------------------------------------------------------------
1 | import { makeStyles } from '@material-ui/core/styles'
2 |
3 | const sliderStyles = makeStyles(theme => ({
4 | heroButtons: {
5 | marginTop: theme.spacing(4),
6 | },
7 | heroContent: {
8 | position: 'relative'
9 | }
10 | }))
11 |
12 | export default sliderStyles
--------------------------------------------------------------------------------
/src/config/Constants.js:
--------------------------------------------------------------------------------
1 | // https://megatrade-server.herokuapp.com
2 |
3 | export default {
4 | SERVER_URL: 'https://megatrade-server.herokuapp.com',
5 | GOOGLE_TRACKING_ID: 'UA-158201801-1',
6 | FACEBOOK_APP_ID: '442263256673614',
7 | GOOGLE_CLIENT_ID: '94334450177-alqfl3cs59hmue1ebk5dvtuv973k3qa4.apps.googleusercontent.com'
8 | }
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "Mega Trade",
3 | "name": "Mega Trade Website - World Class Trading Signals",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | }
10 | ],
11 | "start_url": ".",
12 | "display": "standalone",
13 | "theme_color": "#000000",
14 | "background_color": "#ffffff"
15 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # misc
12 | .DS_Store
13 | .env.local
14 | .env.development.local
15 | .env.test.local
16 | .env.production.local
17 |
18 | /package-lock.json
19 |
20 | npm-debug.log*
21 | yarn-debug.log*
22 | yarn-error.log*
23 |
--------------------------------------------------------------------------------
/public/images/decoration/triangle-deco.svg:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/theme/common.js:
--------------------------------------------------------------------------------
1 | import { makeStyles } from '@material-ui/core/styles'
2 |
3 | export const useTextAlign = makeStyles({
4 | textCenter: {
5 | textAlign: 'center'
6 | },
7 | textLeft: {
8 | textAlign: 'left'
9 | },
10 | textRight: {
11 | textAlign: 'right'
12 | }
13 | })
14 |
15 | export const useFloat = makeStyles({
16 | floatLeft: {
17 | float: 'left'
18 | },
19 | floatRight: {
20 | float: 'right'
21 | },
22 | })
23 |
--------------------------------------------------------------------------------
/src/theme/overrides/index.js:
--------------------------------------------------------------------------------
1 | import MuiPaper from './MuiPaper'
2 | import MuiButton from './MuiButton'
3 | import MuiTableCell from './MuiTableCell'
4 | import MuiTableHead from './MuiTableHead'
5 | import MuiIconButton from './MuiIconButton'
6 | import MuiTypography from './MuiTypography'
7 |
8 | export default {
9 | MuiPaper,
10 | MuiButton,
11 | MuiTableCell,
12 | MuiTableHead,
13 | MuiIconButton,
14 | MuiTypography
15 | }
--------------------------------------------------------------------------------
/public/text/brand.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | starter: {
3 | name: 'Luxi Starter',
4 | desc: 'Luxi Starter - React Starter Template',
5 | prefix: 'luxi',
6 | footerText: 'Luxi Theme All Rights Reserved 2019',
7 | logoText: 'Luxi Theme',
8 | projectName: 'Starter Project',
9 | url: 'luxi.ux-maestro.com',
10 | img: '/public/images/logo.png',
11 | notifMsg: 'Donec sit amet nulla sed arcu pulvinar ultricies commodo id ligula.'
12 | }
13 | };
14 |
--------------------------------------------------------------------------------
/src/vendors/page-transition.css:
--------------------------------------------------------------------------------
1 | .page-fade-transition-enter {
2 | opacity: 0;
3 | }
4 |
5 | .page-fade-transition-enter-active {
6 | opacity: 1;
7 | transition: opacity 300ms;
8 | }
9 |
10 | .page-fade-transition-exit {
11 | opacity: 1;
12 | }
13 |
14 | .page-fade-transition-exit-active {
15 | opacity: 0;
16 | transition: opacity 300ms;
17 | }
18 |
19 | .fragment-fadeIn {
20 | opacity: 0;
21 | transition-delay: 300ms
22 | }
23 |
24 | .page-transition-enter-done .fragment-fadeIn {
25 | opacity: 1;
26 | transition: opacity 400ms;
27 | }
--------------------------------------------------------------------------------
/src/views/web/landing/components/Pricing/pricing-style.js:
--------------------------------------------------------------------------------
1 | import { makeStyles } from '@material-ui/core/styles'
2 |
3 | const useStyles = makeStyles(theme => ({
4 | pricingWrap: {
5 | marginTop: theme.spacing(5)
6 | },
7 | cardHeader: {
8 | backgroundColor: theme.palette.type === 'dark' ? theme.palette.grey[900] : theme.palette.grey[200],
9 | },
10 | cardPricing: {
11 | display: 'flex',
12 | justifyContent: 'center',
13 | alignItems: 'baseline',
14 | marginBottom: theme.spacing(2),
15 | }
16 | }))
17 |
18 | export default useStyles
19 |
--------------------------------------------------------------------------------
/src/views/web/landing/components/Feature/Feature.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Container } from '@material-ui/core'
3 |
4 | import Parallax from './Parallax'
5 | import useStyles from './feature-style'
6 | import MainFeature from './MainFeature'
7 | import MoreFeature from './MoreFeature'
8 |
9 | const Feature = () => {
10 | const classes = useStyles()
11 | return (
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | )
21 | }
22 |
23 | export default Feature
24 |
--------------------------------------------------------------------------------
/src/views/web/landing/components/Subscribe/subscribe-style.js:
--------------------------------------------------------------------------------
1 | import { makeStyles } from '@material-ui/core/styles'
2 |
3 | const subscribeStyles = makeStyles(theme => ({
4 | subscribeWrap: {
5 | maxWidth: 600,
6 | margin: theme.spacing(0, 2),
7 | [theme.breakpoints.up('md')]: {
8 | margin: '0 auto -32px',
9 | },
10 | zIndex: 10,
11 | position: 'relative'
12 | },
13 | paper: {
14 | padding: theme.spacing(4)
15 | },
16 | textField: {
17 | marginTop: theme.spacing(3)
18 | },
19 | rightIcon: {
20 | marginLeft: theme.spacing(2)
21 | }
22 | }))
23 |
24 | export default subscribeStyles
25 |
--------------------------------------------------------------------------------
/public/images/decoration/circle-deco.svg:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/views/admin/support/Support.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Grid } from '@material-ui/core'
3 | import { makeStyles } from '@material-ui/styles'
4 |
5 | const useStyles = makeStyles(theme => ({
6 | root: {
7 | padding: theme.spacing(3)
8 | }
9 | }))
10 |
11 | const Support = () => {
12 | const classes = useStyles()
13 |
14 | return (
15 |
16 |
20 |
21 |
22 | )
23 | }
24 |
25 | export default Support
--------------------------------------------------------------------------------
/src/components/RouteWithLayout.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PropTypes from 'prop-types'
3 | import { Route } from 'react-router-dom'
4 |
5 | const RouteWithLayout = props => {
6 | const { layout: Layout, component: Component, ...rest } = props
7 |
8 | return (
9 | (
12 |
13 |
14 |
15 | )} />
16 | )
17 | }
18 |
19 | RouteWithLayout.propTypes = {
20 | path: PropTypes.string,
21 | layout: PropTypes.any.isRequired,
22 | component: PropTypes.any.isRequired
23 | }
24 |
25 | export default RouteWithLayout
--------------------------------------------------------------------------------
/src/views/admin/education/Education.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Grid } from '@material-ui/core'
3 | import { makeStyles } from '@material-ui/styles'
4 |
5 | const useStyles = makeStyles(theme => ({
6 | root: {
7 | padding: theme.spacing(4)
8 | }
9 | }))
10 |
11 | const Education = () => {
12 | const classes = useStyles()
13 |
14 | return (
15 |
16 |
20 |
21 |
22 | )
23 | }
24 |
25 | export default Education
--------------------------------------------------------------------------------
/src/layouts/web/Main.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import React from 'react'
3 | import PropTypes from 'prop-types'
4 | import { makeStyles } from '@material-ui/styles'
5 |
6 | import Footer from './components/Footer'
7 |
8 | const useStyles = makeStyles(theme => ({
9 | root: {},
10 | content: {
11 | height: '100%'
12 | }
13 | }))
14 |
15 | const Main = props => {
16 | const { children } = props
17 |
18 | const classes = useStyles()
19 |
20 | return (
21 |
22 |
23 | {children}
24 |
25 |
26 |
27 |
28 | )
29 | }
30 |
31 | Main.propTypes = {
32 | children: PropTypes.node
33 | }
34 |
35 | export default Main
--------------------------------------------------------------------------------
/src/layouts/web/components/Footer.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import React from 'react'
3 | import PropTypes from 'prop-types'
4 | import { Typography } from '@material-ui/core'
5 | import { makeStyles } from '@material-ui/styles'
6 |
7 | const useStyles = makeStyles(theme => ({
8 | root: {
9 | padding: theme.spacing(1)
10 | }
11 | }))
12 |
13 | const Footer = props => {
14 | const { className, ...rest } = props
15 |
16 | const classes = useStyles()
17 |
18 | return (
19 |
22 | © 2020 – Mega Trade, All rights reserved.
23 |
24 | )
25 | }
26 |
27 | Footer.propTypes = {
28 | className: PropTypes.string
29 | }
30 |
31 | export default Footer
--------------------------------------------------------------------------------
/src/layouts/admin/components/Footer.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import React from 'react'
3 | import PropTypes from 'prop-types'
4 | import { Typography } from '@material-ui/core'
5 | import { makeStyles } from '@material-ui/styles'
6 |
7 | const useStyles = makeStyles(theme => ({
8 | root: {
9 | padding: theme.spacing(1)
10 | }
11 | }))
12 |
13 | const Footer = props => {
14 | const { className, ...rest } = props
15 |
16 | const classes = useStyles()
17 |
18 | return (
19 |
22 | © 2020 – Mega Trade, All rights reserved.
23 |
24 | )
25 | }
26 |
27 | Footer.propTypes = {
28 | className: PropTypes.string
29 | }
30 |
31 | export default Footer
--------------------------------------------------------------------------------
/src/layouts/user/components/Footer.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import React from 'react'
3 | import PropTypes from 'prop-types'
4 | import { Typography } from '@material-ui/core'
5 | import { makeStyles } from '@material-ui/styles'
6 |
7 | const useStyles = makeStyles(theme => ({
8 | root: {
9 | padding: theme.spacing(1)
10 | }
11 | }))
12 |
13 | const Footer = props => {
14 | const { className, ...rest } = props
15 |
16 | const classes = useStyles()
17 |
18 | return (
19 |
22 | © 2020 – Mega Trade, All rights reserved.
23 |
24 | )
25 | }
26 |
27 | Footer.propTypes = {
28 | className: PropTypes.string
29 | }
30 |
31 | export default Footer
--------------------------------------------------------------------------------
/src/views/user/support/Support.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Grid } from '@material-ui/core'
3 | import { makeStyles } from '@material-ui/styles'
4 |
5 | import SupportLive from './components/SupportLive'
6 |
7 | const useStyles = makeStyles(theme => ({
8 | root: {
9 | padding: theme.spacing(3)
10 | }
11 | }))
12 |
13 | const Support = () => {
14 | const classes = useStyles()
15 |
16 | return (
17 |
18 |
24 |
30 |
31 |
32 | )
33 | }
34 |
35 | export default Support
--------------------------------------------------------------------------------
/src/assets/scss/index.scss:
--------------------------------------------------------------------------------
1 | * {
2 | box-sizing: border-box;
3 | margin: 0;
4 | padding: 0;
5 | }
6 |
7 | html {
8 | height: 100%;
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 | }
12 |
13 | body {
14 | background-color: #f4f6f8;
15 | height: 100%;
16 | }
17 |
18 | a {
19 | text-decoration: none;
20 | }
21 |
22 | #root {
23 | height: 100%;
24 | }
25 |
26 | .rcw-conversation-container > .rcw-header {
27 | background-color:#549FFC;
28 | }
29 |
30 | .rcw-launcher {
31 | background-color:#549FFC;
32 | }
33 |
34 | .rcw-message > .rcw-client {
35 | background-color: #549FFC;
36 | color: white;
37 | }
38 |
39 | .rcw-message > .rcw-response {
40 | background-color: #f4f6f8;
41 | color: black;
42 | }
43 |
44 | .rcw-send-icon {
45 | color: #549FFC;
46 | }
--------------------------------------------------------------------------------
/src/views/web/landing/components/Testimonials/testi-style.js:
--------------------------------------------------------------------------------
1 | import { colors } from '@material-ui/core'
2 | import { makeStyles } from '@material-ui/core/styles'
3 |
4 | const testiStyles = makeStyles(theme => ({
5 | testimonialWrap: {
6 | width: '100%',
7 | position: 'relative',
8 | overflow: 'hidden'
9 | },
10 | carousel: {
11 | marginTop: theme.spacing(3)
12 | },
13 | item: {
14 | padding: theme.spacing(2)
15 | },
16 | card: {
17 | padding: theme.spacing(3)
18 | },
19 | name: {
20 | display: 'flex',
21 | marginTop: theme.spacing(),
22 | alignItems: 'center',
23 | '& span': {
24 | display: 'inline-block',
25 | marginLeft: theme.spacing()
26 | }
27 | },
28 | avatar: {
29 | width: 30,
30 | height: 30,
31 | backgroundColor: colors.blue[500]
32 | }
33 | }))
34 |
35 | export default testiStyles
36 |
--------------------------------------------------------------------------------
/src/components/AuthRouteWithLayout.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PropTypes from 'prop-types'
3 | import { Route, Redirect } from 'react-router-dom'
4 |
5 | const AuthRouteWithLayout = props => {
6 | const { layout: Layout, component: Component, ...rest } = props
7 |
8 | const userId = localStorage.getItem('userId')
9 |
10 | return (
11 |
15 | userId
16 | ?
17 |
18 |
19 | :
24 | } />
25 | )
26 | }
27 |
28 | AuthRouteWithLayout.propTypes = {
29 | path: PropTypes.string,
30 | layout: PropTypes.any.isRequired,
31 | component: PropTypes.any.isRequired
32 | }
33 |
34 | export default AuthRouteWithLayout
--------------------------------------------------------------------------------
/src/views/web/landing/components/Counter/counter-style.js:
--------------------------------------------------------------------------------
1 | import { makeStyles } from '@material-ui/core/styles'
2 |
3 | const counterStyles = makeStyles(theme => ({
4 | counterWrap: {
5 | background: theme.palette.primary.main,
6 | padding: theme.spacing(8, 0)
7 | },
8 | text: {},
9 | counterItem: {
10 | color: theme.palette.common.white,
11 | [theme.breakpoints.up('md')]: {
12 | display: 'flex',
13 | },
14 | textAlign: 'center',
15 | alignItems: 'center',
16 | justifyContent: 'center',
17 | '& svg': {
18 | marginRight: theme.spacing(2),
19 | fill: theme.palette.common.white,
20 | width: 40,
21 | height: 40,
22 | [theme.breakpoints.up('md')]: {
23 | width: 80,
24 | height: 80,
25 | },
26 | },
27 | '& $text': {
28 | '& h4': {
29 | fontWeight: 'bold',
30 | }
31 | }
32 | }
33 | }))
34 |
35 | export default counterStyles
36 |
--------------------------------------------------------------------------------
/src/views/admin/social/Social.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Grid } from '@material-ui/core'
3 | import { makeStyles } from '@material-ui/styles'
4 |
5 | import Post from './components/Post'
6 |
7 |
8 | const useStyles = makeStyles(theme => ({
9 | root: {
10 | padding: theme.spacing(4)
11 | }
12 | }))
13 |
14 | const Social = () => {
15 | const classes = useStyles()
16 |
17 | return (
18 |
19 |
22 |
28 |
29 |
30 |
31 |
32 | )
33 | }
34 |
35 | export default Social
--------------------------------------------------------------------------------
/src/views/web/auth/components/Title/TitleSecondary.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PropTypes from 'prop-types'
3 | import Typography from '@material-ui/core/Typography'
4 | import clsx from 'clsx'
5 | import useStyles from './title-style'
6 |
7 | export default function TitleSecondary(props) {
8 | const classes = useStyles()
9 | const { children, align } = props
10 | const setAlign = alignment => {
11 | switch (alignment) {
12 | case 'left':
13 | return classes.left
14 | case 'right':
15 | return classes.right
16 | case 'center':
17 | return classes.center
18 | default:
19 | return classes.left
20 | }
21 | }
22 | return (
23 |
24 |
25 | {children}
26 |
27 |
28 | )
29 | }
30 |
31 | TitleSecondary.propTypes = {
32 | children: PropTypes.node.isRequired,
33 | align: PropTypes.string,
34 | }
35 |
36 | TitleSecondary.defaultProps = {
37 | align: 'left'
38 | }
39 |
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
19 | Mega Trade - World Class Trading Signals
20 |
21 |
22 |
23 | You need to enable JavaScript to run this app.
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/src/components/AuthAdminRouteWithLayout.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PropTypes from 'prop-types'
3 | import { Route, Redirect } from 'react-router-dom'
4 |
5 | const AuthAdminRouteWithLayout = props => {
6 | const { layout: Layout, component: Component, ...rest } = props
7 |
8 | const adminId = localStorage.getItem('adminId')
9 |
10 | return (
11 |
15 | adminId
16 | ?
17 |
18 |
19 | :
24 | } />
25 | )
26 | }
27 |
28 | AuthAdminRouteWithLayout.propTypes = {
29 | path: PropTypes.string,
30 | layout: PropTypes.any.isRequired,
31 | component: PropTypes.any.isRequired
32 | }
33 |
34 | export default AuthAdminRouteWithLayout
--------------------------------------------------------------------------------
/src/views/web/auth/components/Title/Title.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PropTypes from 'prop-types'
3 | import Typography from '@material-ui/core/Typography'
4 | import clsx from 'clsx'
5 | import useStyles from './title-style'
6 |
7 | export default function Title(props) {
8 | const classes = useStyles()
9 | const {
10 | caption,
11 | text,
12 | align,
13 | dark
14 | } = props
15 | const setAlign = alignment => {
16 | switch (alignment) {
17 | case 'left':
18 | return classes.left
19 | case 'right':
20 | return classes.right
21 | case 'center':
22 | return classes.center
23 | default:
24 | return classes.left
25 | }
26 | }
27 | return (
28 |
29 |
30 | {caption}
31 |
32 |
33 | {text}
34 |
35 |
36 | )
37 | }
38 |
39 | Title.propTypes = {
40 | caption: PropTypes.string.isRequired,
41 | text: PropTypes.string.isRequired,
42 | align: PropTypes.string,
43 | dark: PropTypes.bool,
44 | }
45 |
46 | Title.defaultProps = {
47 | align: 'left',
48 | dark: false
49 | }
50 |
--------------------------------------------------------------------------------
/src/views/web/notFound/NotFound.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Button, Grid, Container, Typography } from '@material-ui/core'
3 |
4 | import useStyles from './notFound-style'
5 |
6 | const NotFound = () => {
7 | const classes = useStyles()
8 |
9 | return (
10 |
11 |
12 |
13 |
14 |
15 |
16 |
19 |
20 |
21 | 404
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | This page could not be found.
30 |
31 |
32 | You can either stay and chill here, or go back to the beginning.
33 |
34 |
35 |
36 | Back Home
37 |
38 |
39 |
40 |
41 |
42 |
43 | )
44 | }
45 |
46 | export default NotFound
47 |
--------------------------------------------------------------------------------
/src/layouts/admin/components/Topbar.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import React from 'react'
3 | import PropTypes from 'prop-types'
4 | import MenuIcon from '@material-ui/icons/Menu'
5 | import { makeStyles } from '@material-ui/styles'
6 | import { Link as RouterLink } from 'react-router-dom'
7 | import { AppBar, Toolbar, Hidden, IconButton } from '@material-ui/core'
8 |
9 | const useStyles = makeStyles(theme => ({
10 | root: {
11 | boxShadow: 'none'
12 | },
13 | flexGrow: {
14 | flexGrow: 1
15 | },
16 | signOutButton: {
17 | marginLeft: theme.spacing(1)
18 | }
19 | }))
20 |
21 | const Topbar = props => {
22 | const { className, onSidebarOpen, history, ...rest } = props
23 |
24 | const classes = useStyles()
25 |
26 | return (
27 |
30 |
31 |
32 |
35 |
36 |
37 |
38 |
39 |
40 |
43 |
44 |
45 |
46 |
47 |
48 | )
49 | }
50 |
51 | Topbar.propTypes = {
52 | history: PropTypes.object,
53 | className: PropTypes.string,
54 | onSidebarOpen: PropTypes.func
55 | }
56 |
57 | export default Topbar
--------------------------------------------------------------------------------
/public/locales/zh/common.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "一个简单的例子",
3 | "subtitle": "这是一个空白页面。从这里开始建立你的页面。",
4 | "error_with_status": "服务器上发生错误",
5 | "404": "无法找到此页面。",
6 | "404_subtitle": "你可以留在这里冷静,或者回到起点。",
7 | "back": "回到家",
8 | "error_without_status": "服务器上发生错误",
9 | "contact_title": "免费项目报价",
10 | "contact_title2": "向我们问好",
11 | "contact_subtitle": "你有什么问题吗?你准备好降低成本并创造新的收入吗?或者你只是想打个招呼?给我们留言。",
12 | "form_name": "你叫什么名字?*",
13 | "form_email": "你的电子邮件是什么?*",
14 | "form_phone": "你的电话号码是多少?",
15 | "form_company": "你的公司是什么?",
16 | "form_message": "在这里写下你的留言",
17 | "form_terms": "我已阅读并接受条款",
18 | "form_privacy": "服务与隐私政策*",
19 | "form_send": "发送消息",
20 | "login": "登录",
21 | "login_create": "创建新帐户",
22 | "login_or": "或通过电子邮件登录",
23 | "login_email": "电子邮件",
24 | "login_password": "密码",
25 | "login_remember": "记住",
26 | "login_forgot": "忘记密码",
27 | "continue": "继续",
28 | "login_title": "欢迎回来",
29 | "login_subtitle": "请先登录以继续",
30 | "register": "注册",
31 | "register_already": "已经有帐户?",
32 | "register_or": "或通过电子邮件注册",
33 | "register_name": "名称?*",
34 | "register_email": "电子邮件?*",
35 | "register_password": "密码",
36 | "register_confirm": "确认密码",
37 | "register_title": "很高兴认识您:)",
38 | "register_subtitle": "只需注册即可加入我们",
39 | "accept": "接受",
40 | "en": "English",
41 | "de": "Deutsch",
42 | "zh": "简体中文",
43 | "pt": "Português",
44 | "id": "Bahasa Indonesia",
45 | "ar": "العربيّة"
46 | }
--------------------------------------------------------------------------------
/public/images/features-signal.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 |
9 |
12 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/src/views/web/notFound/notFound-style.js:
--------------------------------------------------------------------------------
1 | import { makeStyles } from '@material-ui/core/styles'
2 |
3 | const useStyles = makeStyles(theme => ({
4 | errorWrap: {
5 | width: '100%',
6 | minHeight: '90vh',
7 | display: 'flex',
8 | alignItems: 'center'
9 | },
10 | flex: {
11 | display: 'flex',
12 | justifyContent: 'center'
13 | },
14 | deco: {
15 | position: 'relative',
16 | [theme.breakpoints.down('md')]: {
17 | height: 320,
18 | },
19 | '& h3': {
20 | fontFamily: 'Roboto Condensed',
21 | color: theme.palette.primary.main,
22 | fontSize: 106,
23 | textTransform: 'capitalize',
24 | fontWeight: 700,
25 | paddingTop: 40,
26 | paddingLeft: 20,
27 | position: 'relative',
28 | zIndex: 1,
29 | },
30 | '&:before': {
31 | content: '"',
32 | width: 210,
33 | height: 220,
34 | background: theme.palette.primary.main,
35 | borderRadius: 24,
36 | transform: 'rotate(45deg)',
37 | position: 'absolute',
38 | top: theme.spacing(-1),
39 | left: 0,
40 | }
41 | },
42 | text: {
43 | borderLeft: `1px solid ${theme.palette.divider}`,
44 | [theme.breakpoints.up('md')]: {
45 | paddingLeft: theme.spacing(5),
46 | },
47 | [theme.breakpoints.down('md')]: {
48 | textAlign: 'center'
49 | },
50 | '& h4': {
51 | fontWeight: theme.typography.fontWeightBold,
52 | marginBottom: theme.spacing(4)
53 | },
54 | '& p': {
55 | fontSize: 22,
56 | color: theme.palette.text.secondary
57 | }
58 | },
59 | button: {
60 | marginTop: theme.spacing(4)
61 | }
62 | }))
63 |
64 | export default useStyles
65 |
--------------------------------------------------------------------------------
/src/views/web/auth/components/SocialAuth/SocialAuth.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import GoogleLogin from 'react-google-login'
3 | import Button from '@material-ui/core/Button'
4 | import GoogleIcon from 'react-ionicons/lib/LogoGoogle'
5 | import FacebookIcon from 'react-ionicons/lib/LogoFacebook'
6 | import FacebookLogin from 'react-facebook-login/dist/facebook-login-render-props'
7 |
8 | import Constants from 'config/Constants'
9 | import useStyles from '../../form-style'
10 |
11 | const SocialAuth = props => {
12 | const classes = useStyles()
13 | const { onFacebook, onGoogle } = props
14 |
15 | return (
16 |
17 | {/*
28 |
29 | Facebook
30 | } /> */}
31 |
32 |
43 |
44 | Google
45 | } />
46 |
47 | )
48 | }
49 |
50 |
51 | export default SocialAuth
52 |
--------------------------------------------------------------------------------
/src/views/user/dashboard/components/Budget.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import React from 'react'
3 | import PropTypes from 'prop-types'
4 | import MoneyIcon from '@material-ui/icons/Money'
5 | import { makeStyles } from '@material-ui/styles'
6 | import { Card, CardContent, Grid, Typography, Avatar } from '@material-ui/core'
7 |
8 | const useStyles = makeStyles(theme => ({
9 | root: {
10 | height: '100%'
11 | },
12 | content: {
13 | display: 'flex',
14 | alignItems: 'center'
15 | },
16 | title: {
17 | fontWeight: 700
18 | },
19 | avatar: {
20 | width: 56,
21 | height: 56,
22 | backgroundColor: theme.palette.error.main
23 | },
24 | icon: {
25 | width: 32,
26 | height: 32
27 | }
28 | }))
29 |
30 | const Budget = props => {
31 | const { className, budget, ...rest } = props
32 |
33 | const classes = useStyles()
34 |
35 | return (
36 |
39 |
40 |
43 |
44 |
49 | TRADING BUDGET
50 |
51 |
52 | ${budget}
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 | )
64 | }
65 |
66 | Budget.propTypes = {
67 | className: PropTypes.string
68 | }
69 |
70 | export default Budget
--------------------------------------------------------------------------------
/src/views/user/dashboard/components/TotalPips.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import React from 'react'
3 | import PropTypes from 'prop-types'
4 | import { makeStyles } from '@material-ui/styles'
5 | import BarChartIcon from '@material-ui/icons/BarChart'
6 | import { Card, CardContent, Grid, Typography, Avatar } from '@material-ui/core'
7 |
8 | const useStyles = makeStyles(theme => ({
9 | root: {
10 | height: '100%'
11 | },
12 | content: {
13 | display: 'flex',
14 | alignItems: 'center'
15 | },
16 | title: {
17 | fontWeight: 700
18 | },
19 | avatar: {
20 | width: 56,
21 | height: 56,
22 | backgroundColor: theme.palette.primary.main
23 | },
24 | icon: {
25 | width: 32,
26 | height: 32
27 | }
28 | }))
29 |
30 | const TotalPips = props => {
31 | const { className, pips, ...rest } = props
32 |
33 | const classes = useStyles()
34 |
35 | return (
36 |
39 |
40 |
43 |
44 |
49 | TOTAL PIPS
50 |
51 |
52 | {pips}
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 | )
64 | }
65 |
66 | TotalPips.propTypes = {
67 | className: PropTypes.string
68 | }
69 |
70 | export default TotalPips
--------------------------------------------------------------------------------
/src/views/user/dashboard/components/TotalUsers.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import React from 'react'
3 | import PropTypes from 'prop-types'
4 | import { makeStyles } from '@material-ui/styles'
5 | import PeopleIcon from '@material-ui/icons/PeopleOutlined'
6 | import { Card, CardContent, Grid, Typography, Avatar } from '@material-ui/core'
7 |
8 | const useStyles = makeStyles(theme => ({
9 | root: {
10 | height: '100%'
11 | },
12 | content: {
13 | display: 'flex',
14 | alignItems: 'center'
15 | },
16 | title: {
17 | fontWeight: 700
18 | },
19 | avatar: {
20 | width: 56,
21 | height: 56,
22 | backgroundColor: theme.palette.success.main
23 | },
24 | icon: {
25 | height: 32,
26 | width: 32
27 | }
28 | }))
29 |
30 | const TotalUsers = props => {
31 | const { className, users, ...rest } = props
32 |
33 | const classes = useStyles()
34 |
35 | return (
36 |
39 |
40 |
43 |
44 |
49 | TOTAL USERS
50 |
51 |
52 | {users}
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 | )
64 | }
65 |
66 | TotalUsers.propTypes = {
67 | className: PropTypes.string
68 | }
69 |
70 | export default TotalUsers
--------------------------------------------------------------------------------
/src/views/admin/dashboard/components/TotalSponsoredUsers.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import React from 'react'
3 | import PropTypes from 'prop-types'
4 | import { makeStyles } from '@material-ui/styles'
5 | import SponsoredIcon from '@material-ui/icons/MoneyOff'
6 | import { Card, CardContent, Grid, Typography, Avatar } from '@material-ui/core'
7 |
8 | const useStyles = makeStyles(theme => ({
9 | root: {
10 | height: '100%'
11 | },
12 | content: {
13 | display: 'flex',
14 | alignItems: 'center'
15 | },
16 | title: {
17 | fontWeight: 700
18 | },
19 | avatar: {
20 | width: 56,
21 | height: 56,
22 | backgroundColor: 'firebrick'
23 | },
24 | icon: {
25 | height: 32,
26 | width: 32
27 | }
28 | }))
29 |
30 | const TotalUsers = props => {
31 | const { className, sponsoredUsers, ...rest } = props
32 |
33 | const classes = useStyles()
34 |
35 | return (
36 |
39 |
40 |
43 |
44 |
49 | TOTAL SPONSORED USERS
50 |
51 |
52 | {sponsoredUsers}
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 | )
64 | }
65 |
66 | TotalUsers.propTypes = {
67 | className: PropTypes.string
68 | }
69 |
70 | export default TotalUsers
--------------------------------------------------------------------------------
/src/layouts/user/Main.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import PropTypes from 'prop-types'
3 | import React, { useState } from 'react'
4 | import { useMediaQuery } from '@material-ui/core'
5 | import { makeStyles, useTheme } from '@material-ui/styles'
6 |
7 | import Footer from './components/Footer'
8 | import Topbar from './components/Topbar'
9 | import Sidebar from './components/sidebar/Sidebar'
10 |
11 | const useStyles = makeStyles(theme => ({
12 | root: {
13 | paddingTop: 56,
14 | height: '100%',
15 | [theme.breakpoints.up('sm')]: {
16 | paddingTop: 64
17 | }
18 | },
19 | shiftContent: {
20 | paddingLeft: 240
21 | },
22 | content: {
23 | height: '100%'
24 | }
25 | }))
26 |
27 | const Main = props => {
28 | const { children } = props
29 |
30 | const theme = useTheme()
31 | const classes = useStyles()
32 | const isDesktop = useMediaQuery(theme.breakpoints.up('lg'), {
33 | defaultMatches: true
34 | })
35 |
36 | const [openSidebar, setOpenSidebar] = useState(false)
37 |
38 | const onSidebarOpen = () => {
39 | setOpenSidebar(true)
40 | }
41 |
42 | const onSidebarClose = () => {
43 | setOpenSidebar(false)
44 | }
45 |
46 | const shouldOpenSidebar = isDesktop ? true : openSidebar
47 |
48 | return (
49 |
54 |
55 |
56 |
60 |
61 |
62 | {children}
63 |
64 |
65 |
66 |
67 | )
68 | }
69 |
70 | Main.propTypes = {
71 | children: PropTypes.node
72 | }
73 |
74 | export default Main
--------------------------------------------------------------------------------
/src/views/web/landing/components/Feature/Parallax.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import React from 'react'
3 | import { Parallax, ParallaxProvider } from 'react-scroll-parallax'
4 |
5 | import useStyles from './feature-style'
6 |
7 | export default function ParallaxDeco() {
8 | const classes = useStyles()
9 | return (
10 |
11 |
12 |
13 |
16 |
26 |
27 |
28 |
29 |
30 |
33 |
43 |
44 |
45 |
46 |
47 |
50 |
60 |
61 |
62 |
63 |
64 |
65 |
66 | )
67 | }
--------------------------------------------------------------------------------
/src/layouts/admin/Main.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import PropTypes from 'prop-types'
3 | import React, { useState } from 'react'
4 | import { useMediaQuery } from '@material-ui/core'
5 | import { makeStyles, useTheme } from '@material-ui/styles'
6 |
7 | import Footer from './components/Footer'
8 | import Topbar from './components/Topbar'
9 | import Sidebar from './components/sidebar/Sidebar'
10 |
11 | const useStyles = makeStyles(theme => ({
12 | root: {
13 | paddingTop: 56,
14 | height: '100%',
15 | [theme.breakpoints.up('sm')]: {
16 | paddingTop: 64
17 | }
18 | },
19 | shiftContent: {
20 | paddingLeft: 240
21 | },
22 | content: {
23 | height: '100%'
24 | }
25 | }))
26 |
27 | const Main = props => {
28 | const { children } = props
29 |
30 | const theme = useTheme()
31 | const classes = useStyles()
32 | const isDesktop = useMediaQuery(theme.breakpoints.up('lg'), {
33 | defaultMatches: true
34 | })
35 |
36 | const [openSidebar, setOpenSidebar] = useState(false)
37 |
38 | const onSidebarOpen = () => {
39 | setOpenSidebar(true)
40 | }
41 |
42 | const onSidebarClose = () => {
43 | setOpenSidebar(false)
44 | }
45 |
46 | const shouldOpenSidebar = isDesktop ? true : openSidebar
47 |
48 | return (
49 |
54 |
55 |
56 |
60 |
61 |
62 | {children}
63 |
64 |
65 |
66 |
67 | )
68 | }
69 |
70 | Main.propTypes = {
71 | children: PropTypes.node
72 | }
73 |
74 | export default Main
--------------------------------------------------------------------------------
/src/layouts/user/components/Topbar.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import PropTypes from 'prop-types'
3 | import React, { useState } from 'react'
4 | import MenuIcon from '@material-ui/icons/Menu'
5 | import { makeStyles } from '@material-ui/styles'
6 | import { Link as RouterLink } from 'react-router-dom'
7 | import NotificationsIcon from '@material-ui/icons/NotificationsOutlined'
8 | import { AppBar, Toolbar, Badge, Hidden, IconButton } from '@material-ui/core'
9 |
10 | const useStyles = makeStyles(theme => ({
11 | root: {
12 | boxShadow: 'none'
13 | },
14 | flexGrow: {
15 | flexGrow: 1
16 | },
17 | signOutButton: {
18 | marginLeft: theme.spacing(1)
19 | }
20 | }))
21 |
22 | const Topbar = props => {
23 | const { className, onSidebarOpen, history, ...rest } = props
24 |
25 | const classes = useStyles()
26 |
27 | const [notifications] = useState([])
28 |
29 | return (
30 |
33 |
34 |
35 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
57 |
58 |
59 |
60 |
61 |
62 | )
63 | }
64 |
65 | Topbar.propTypes = {
66 | history: PropTypes.object,
67 | className: PropTypes.string,
68 | onSidebarOpen: PropTypes.func
69 | }
70 |
71 | export default Topbar
--------------------------------------------------------------------------------
/src/views/admin/logs/Logs.js:
--------------------------------------------------------------------------------
1 | import { useSnackbar } from 'notistack'
2 | import { makeStyles } from '@material-ui/styles'
3 | import React, { useEffect, useState } from 'react'
4 | import { Grid, Dialog, CircularProgress, DialogContent } from '@material-ui/core'
5 |
6 | import { AdminApi } from 'config/Api'
7 | import LogsTable from './components/LogsTable'
8 |
9 | const adminApi = new AdminApi()
10 |
11 | const useStyles = makeStyles(theme => ({
12 | root: {
13 | padding: theme.spacing(4)
14 | }
15 | }))
16 |
17 | const Subscriptions = () => {
18 | const classes = useStyles()
19 | const { enqueueSnackbar } = useSnackbar()
20 |
21 | const adminId = localStorage.getItem('adminId')
22 |
23 | const [isLoading, setIsLoading] = useState(true)
24 | const [logsState, setLogsState] = useState([])
25 |
26 | useEffect(() => { fetchLogs() }, [])
27 |
28 | const fetchLogs = async () => {
29 | const fetchLogsResult = await adminApi.fetchLogs({ adminId })
30 | if (fetchLogsResult.error) {
31 | setIsLoading(false)
32 | return enqueueSnackbar(fetchLogsResult.message, { variant: 'error' })
33 | }
34 |
35 | setLogsState(fetchLogsResult.data)
36 | setIsLoading(false)
37 | }
38 |
39 | const reloadData = () => fetchLogs()
40 |
41 | if (isLoading)
42 | return (
43 |
44 |
45 |
46 |
47 |
48 | )
49 |
50 | return (
51 |
52 |
55 |
61 |
65 |
66 |
67 |
68 | )
69 | }
70 |
71 | export default Subscriptions
--------------------------------------------------------------------------------
/src/views/admin/subscriptions/components/SubscriptionsList.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Grid } from '@material-ui/core'
3 | import { makeStyles } from '@material-ui/styles'
4 |
5 | import SubscriptionsCard from './components/SubscriptionsCard'
6 |
7 | const useStyles = makeStyles(theme => ({
8 | root: {},
9 | row: {
10 | height: '42px',
11 | display: 'flex',
12 | alignItems: 'center',
13 | marginTop: theme.spacing(1)
14 | },
15 | content: {
16 | marginTop: theme.spacing(2)
17 | },
18 | pagination: {
19 | display: 'flex',
20 | alignItems: 'center',
21 | justifyContent: 'flex-end',
22 | marginTop: theme.spacing(3)
23 | }
24 | }))
25 |
26 | const SubscriptionsList = props => {
27 | const { reloadData, subscriptionsState } = props
28 |
29 | const classes = useStyles()
30 |
31 | return (
32 |
33 |
34 |
37 | {
38 | subscriptionsState.map((subscription, i) => (
39 |
45 |
48 |
49 | ))
50 | }
51 |
52 |
53 |
54 | )
55 | }
56 |
57 | export default SubscriptionsList
--------------------------------------------------------------------------------
/src/views/web/auth/components/Title/title-style.js:
--------------------------------------------------------------------------------
1 | import { makeStyles } from '@material-ui/core/styles';
2 |
3 | const titleStyles = makeStyles(theme => ({
4 | left: {
5 | textAlign: 'left',
6 | '&:after': {
7 | left: 0,
8 | }
9 | },
10 | right: {
11 | textAlign: 'right',
12 | '&:after': {
13 | right: 0,
14 | }
15 | },
16 | center: {
17 | textAlign: 'center',
18 | '&:after': {
19 | left: '50%',
20 | marginLeft: -35,
21 | }
22 | },
23 | caption: {
24 | textTransform: 'uppercase',
25 | color: theme.palette.type === 'dark' ? theme.palette.primary.light : theme.palette.primary.dark,
26 | fontWeight: theme.typography.fontWeightBold,
27 | fontSize: 16,
28 | marginBottom: theme.spacing(),
29 | [theme.breakpoints.down('sm')]: {
30 | fontSize: 12
31 | }
32 | },
33 | dark: {},
34 | title: {
35 | display: 'block',
36 | position: 'relative',
37 | marginBottom: theme.spacing(3),
38 | '& h4': {
39 | color: theme.palette.text.primary,
40 | fontWeight: theme.typography.fontWeightBold,
41 | textTransform: 'capitalize',
42 | lineHeight: '32px',
43 | [theme.breakpoints.down('sm')]: {
44 | fontSize: 22
45 | }
46 | },
47 | '&$dark': {
48 | '& $caption': {
49 | color: theme.palette.primary.light
50 | },
51 | '& h4': {
52 | color: theme.palette.common.white,
53 | }
54 | }
55 | },
56 | titleSecondary: {
57 | display: 'block',
58 | position: 'relative',
59 | '& h4': {
60 | color: theme.palette.text.primary,
61 | fontWeight: theme.typography.fontWeightBold,
62 | textTransform: 'capitalize'
63 | },
64 | '& strong': {
65 | color: theme.palette.text.primary,
66 | }
67 | }
68 | }));
69 |
70 | export default titleStyles;
71 |
--------------------------------------------------------------------------------
/src/layouts/admin/components/sidebar/components/Profile.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import PropTypes from 'prop-types'
3 | import { makeStyles } from '@material-ui/styles'
4 | import React, { useState, useEffect } from 'react'
5 | import { Link as RouterLink } from 'react-router-dom'
6 | import { Avatar, Typography, colors } from '@material-ui/core'
7 |
8 | import getInitials from 'helpers/getInitials'
9 |
10 | const useStyles = makeStyles(theme => ({
11 | root: {
12 | display: 'flex',
13 | alignItems: 'center',
14 | flexDirection: 'column',
15 | minHeight: 'fit-content'
16 | },
17 | avatar: {
18 | width: 60,
19 | height: 60,
20 | backgroundColor: colors.blue[500]
21 | },
22 | name: {
23 | marginTop: theme.spacing(1)
24 | }
25 | }))
26 |
27 | const Profile = props => {
28 | const { className, profile, ...rest } = props
29 |
30 | const classes = useStyles()
31 |
32 | const [profileState, setProfileState] = useState({
33 | avatar: '',
34 | lastName: '',
35 | firstName: ''
36 | })
37 |
38 | useEffect(() => {
39 | setProfileState(profileState => ({
40 | ...profileState,
41 | avatar: profile.avatar,
42 | lastName: profile.lastName,
43 | firstName: profile.firstName
44 | }))
45 | }, [profile])
46 |
47 | return (
48 |
51 |
56 | {getInitials(profileState.firstName + ' ' + profileState.lastName)}
57 |
58 |
59 |
62 | {profileState.firstName + ' ' + profileState.lastName}
63 |
64 |
65 | )
66 | }
67 |
68 | Profile.propTypes = {
69 | className: PropTypes.string
70 | }
71 |
72 | export default Profile
73 |
--------------------------------------------------------------------------------
/src/views/user/dashboard/components/TotalProfits.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import React from 'react'
3 | import PropTypes from 'prop-types'
4 | import { makeStyles } from '@material-ui/styles'
5 | import AttachMoneyIcon from '@material-ui/icons/AttachMoney'
6 | import { Card, CardContent, Grid, Typography, Avatar } from '@material-ui/core'
7 |
8 | const useStyles = makeStyles(theme => ({
9 | root: {
10 | height: '100%',
11 | color: theme.palette.primary.contrastText,
12 | backgroundColor: theme.palette.primary.main
13 | },
14 | content: {
15 | display: 'flex',
16 | alignItems: 'center'
17 | },
18 | title: {
19 | fontWeight: 700
20 | },
21 | avatar: {
22 | width: 56,
23 | height: 56,
24 | color: theme.palette.primary.main,
25 | backgroundColor: theme.palette.white
26 | },
27 | icon: {
28 | width: 32,
29 | height: 32
30 | }
31 | }))
32 |
33 | const TotalProfit = props => {
34 | const { className, profits, ...rest } = props
35 |
36 | const classes = useStyles()
37 |
38 | return (
39 |
42 |
43 |
46 |
47 |
52 | TOTAL PROFIT
53 |
54 |
55 |
58 | ${profits}
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 | )
71 | }
72 |
73 | TotalProfit.propTypes = {
74 | className: PropTypes.string
75 | }
76 |
77 | export default TotalProfit
--------------------------------------------------------------------------------
/public/images/features-news.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 |
8 |
9 |
12 |
14 |
16 |
18 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/src/views/admin/questions/Questions.js:
--------------------------------------------------------------------------------
1 | import { useSnackbar } from 'notistack'
2 | import { makeStyles } from '@material-ui/styles'
3 | import React, { useEffect, useState } from 'react'
4 | import { Grid, Dialog, CircularProgress, DialogContent } from '@material-ui/core'
5 |
6 | import { AdminApi } from 'config/Api'
7 | import QuestionsTable from './components/QuestionsTable'
8 |
9 | const adminApi = new AdminApi()
10 |
11 | const useStyles = makeStyles(theme => ({
12 | root: {
13 | padding: theme.spacing(4)
14 | }
15 | }))
16 |
17 | const Questions = () => {
18 | const classes = useStyles()
19 | const { enqueueSnackbar } = useSnackbar()
20 |
21 | const adminId = localStorage.getItem('adminId')
22 |
23 | const [isLoading, setIsLoading] = useState(true)
24 | const [questionsState, setQuestionsState] = useState([])
25 |
26 | useEffect(() => {
27 | fetchQuestionsList()
28 | }, [])
29 |
30 | const fetchQuestionsList = async () => {
31 | const fetchQuestionsListResult = await adminApi.fetchQuestions({ adminId })
32 | if (fetchQuestionsListResult.error) {
33 | setIsLoading(false)
34 | return enqueueSnackbar(fetchQuestionsListResult.message, { variant: 'error' })
35 | }
36 |
37 | setQuestionsState(fetchQuestionsListResult.data)
38 | setIsLoading(false)
39 | }
40 |
41 | const reloadData = () => fetchQuestionsList()
42 |
43 | if (isLoading)
44 | return (
45 |
46 |
47 |
48 |
49 |
50 | )
51 |
52 | return (
53 |
54 |
57 |
63 |
66 |
67 |
68 |
69 | )
70 | }
71 |
72 | export default Questions
--------------------------------------------------------------------------------
/src/layouts/user/components/sidebar/components/UpgradePlan.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import React from 'react'
3 | import PropTypes from 'prop-types'
4 | import { Link } from 'react-router-dom'
5 | import { makeStyles } from '@material-ui/styles'
6 | import { Typography, Button } from '@material-ui/core'
7 |
8 | const useStyles = makeStyles(theme => ({
9 | root: {
10 | marginTop: 50,
11 | borderRadius: 25,
12 | backgroundColor: theme.palette.background.default
13 | },
14 | media: {
15 | height: 80,
16 | textAlign: 'center',
17 | paddingTop: theme.spacing(2),
18 | '& > img': {
19 | width: 'auto',
20 | height: '100%'
21 | }
22 | },
23 | content: {
24 | padding: theme.spacing(1, 2)
25 | },
26 | actions: {
27 | display: 'flex',
28 | justifyContent: 'center',
29 | padding: theme.spacing(1, 2)
30 | }
31 | }))
32 |
33 | const UpgradePlan = props => {
34 | const { className, ...rest } = props
35 |
36 | const classes = useStyles()
37 |
38 | return (
39 |
42 |
43 |
46 |
47 |
48 |
49 |
53 | Upgrade Subscription
54 |
55 |
56 |
59 | Upgrade your Subscription to recieve all signals
60 |
61 |
62 |
63 |
64 |
69 | Upgrade
70 |
71 |
72 |
73 | )
74 | }
75 |
76 | UpgradePlan.propTypes = {
77 | className: PropTypes.string
78 | }
79 |
80 | export default UpgradePlan
--------------------------------------------------------------------------------
/public/locales/ar/common.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "مثال بسيط",
3 | "subtitle": "إنها صفحة فارغة. ابدأ في إنشاء صفحتك من هنا.",
4 | "error_with_status": "حدث خطأ على الخادم",
5 | "404": "تعذر العثور على هذه الصفحة.",
6 | "404_subtitle": "يمكنك إما البقاء والاسترخاء هنا ، أو العودة إلى البداية.",
7 | "back": "العودة إلى المنزل",
8 | "error_without_status": "حدث خطأ على الخادم",
9 | "contact_title": "مشروع مجاني اقتباس",
10 | "contact_title2": "قل مرحبا لنا",
11 | "contact_subtitle": "هل لديك أي أسئلة؟ هل أنت مستعد لخفض التكلفة وتحقيق إيرادات جديدة؟ أو هل تريد فقط أن تقول مرحبا؟ أرسل لنا رسالة.",
12 | "form_name": "ما اسمك؟ *",
13 | "form_email": "ما هو بريدك الإلكتروني؟ *",
14 | "form_phone": "ما هو رقم هاتفك؟",
15 | "form_company": "ما هي شركتك؟",
16 | "form_message": "اكتب رسالتك هنا",
17 | "form_terms": "لقد قرأت ووافقت على شروط",
18 | "form_privacy": "سياسة الخدمة والخصوصية *",
19 | "form_send": "إرسال رسالة",
20 | "login": "تسجيل الدخول",
21 | "login_lcreate": "إنشاء حساب جديد",
22 | "login_or": "أو تسجيل الدخول عبر البريد الإلكتروني",
23 | "login_email": "البريد الإلكتروني",
24 | "login_password": "كلمه السر",
25 | "login_remember": "تذكر",
26 | "login_forgot": "نسيت كلمة المرور",
27 | "continue": "استمر",
28 | "login_title": "مرحبًا بك مرة أخرى",
29 | "login_subtitle": "الرجاء تسجيل الدخول للمتابعة",
30 | "register": "تسجيل",
31 | "register_already": "هل لديك حساب بالفعل؟",
32 | "register_or": "أو التسجيل باستخدام البريد الإلكتروني",
33 | "register_name": "الاسم؟ *",
34 | "register_email": "البريد الإلكتروني؟ *",
35 | "register_password": "كلمه السر",
36 | "register_confirm": "تأكيد كلمة المرور",
37 | "register_title": "تشرفت بمعرفتك :)",
38 | "register_subtitle": "فقط سجل للانضمام إلينا",
39 | "accept": "قبول",
40 | "en": "English",
41 | "de": "Deutsch",
42 | "zh": "简体中文",
43 | "pt": "Português",
44 | "id": "Bahasa Indonesia",
45 | "ar": "العربيّة"
46 | }
--------------------------------------------------------------------------------
/public/images/features-support.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 |
7 |
9 |
14 |
15 |
16 |
18 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/src/theme/Palette.js:
--------------------------------------------------------------------------------
1 | import { colors } from '@material-ui/core'
2 |
3 | const white = '#FFFFFF'
4 | const black = '#000000'
5 |
6 | export default {
7 | main: {
8 | palette: {
9 | black,
10 | white,
11 | primary: {
12 | contrastText: white,
13 | dark: colors.blue[900],
14 | main: colors.blue[500],
15 | light: colors.blue[100]
16 | },
17 | secondary: {
18 | contrastText: white,
19 | dark: colors.orange[900],
20 | main: colors.orange[500],
21 | light: colors.orange[100]
22 | },
23 | success: {
24 | contrastText: white,
25 | dark: colors.green[900],
26 | main: colors.green[600],
27 | light: colors.green[400]
28 | },
29 | info: {
30 | contrastText: white,
31 | dark: colors.blue[900],
32 | main: colors.blue[600],
33 | light: colors.blue[400]
34 | },
35 | warning: {
36 | contrastText: white,
37 | dark: colors.orange[900],
38 | main: colors.orange[600],
39 | light: colors.orange[400]
40 | },
41 | error: {
42 | contrastText: white,
43 | dark: colors.red[900],
44 | main: colors.red[600],
45 | light: colors.red[400]
46 | },
47 | text: {
48 | link: colors.blue[600],
49 | primary: colors.blueGrey[900],
50 | secondary: colors.blueGrey[600]
51 | },
52 | background: {
53 | paper: white,
54 | default: '#F4F6F8'
55 | },
56 | icon: colors.blueGrey[600],
57 | divider: colors.grey[200]
58 | }
59 | }
60 | }
--------------------------------------------------------------------------------
/src/layouts/user/components/sidebar/components/Profile.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import PropTypes from 'prop-types'
3 | import { makeStyles } from '@material-ui/styles'
4 | import React, { useState, useEffect } from 'react'
5 | import { Link as RouterLink } from 'react-router-dom'
6 | import { Avatar, Typography, colors } from '@material-ui/core'
7 |
8 | import getInitials from 'helpers/getInitials'
9 |
10 | const useStyles = makeStyles(theme => ({
11 | root: {
12 | display: 'flex',
13 | alignItems: 'center',
14 | flexDirection: 'column',
15 | minHeight: 'fit-content'
16 | },
17 | avatar: {
18 | width: 60,
19 | height: 60,
20 | backgroundColor: colors.blue[500]
21 | },
22 | name: {
23 | marginTop: theme.spacing(1)
24 | }
25 | }))
26 |
27 | const Profile = props => {
28 | const { className, profile, ...rest } = props
29 |
30 | const classes = useStyles()
31 |
32 | const [profileState, setProfileState] = useState({
33 | avatar: '',
34 | lastName: '',
35 | firstName: '',
36 | membership: ''
37 | })
38 |
39 | useEffect(() => {
40 | setProfileState(profileState => ({
41 | ...profileState,
42 | avatar: profile.avatar,
43 | lastName: profile.lastName,
44 | firstName: profile.firstName,
45 | membership: profile.membership
46 | }))
47 | }, [profile])
48 |
49 | return (
50 |
53 |
58 | {getInitials(profileState.firstName + ' ' + profileState.lastName)}
59 |
60 |
61 |
64 | {profileState.firstName + ' ' + profileState.lastName}
65 |
66 |
67 |
{profileState.membership}
68 |
69 | )
70 | }
71 |
72 | Profile.propTypes = {
73 | className: PropTypes.string
74 | }
75 |
76 | export default Profile
--------------------------------------------------------------------------------
/public/locales/en/common.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "A simple example",
3 | "subtitle": "It's a blank-page. Start to build your'e page from here.",
4 | "error_with_status": "An error occurred on server",
5 | "404": "This page could not be found.",
6 | "404_subtitle": "You can either stay and chill here, or go back to the beginning.",
7 | "back": "back to home",
8 | "error_without_status": "An error occurred on the server",
9 | "contact_title": "Free Project Quote",
10 | "contact_title2": "Say Hello to Us",
11 | "contact_subtitle": "Do you have any questions? Are you ready to reduce cost and create new revenue? Or you simply want to say hi? Drop us a message.",
12 | "form_name": "What is your name? *",
13 | "form_email": "What it your email? *",
14 | "form_phone": "What is your phone number?",
15 | "form_company": "What is your company?",
16 | "form_message": "Write your message here",
17 | "form_terms": "I have read and accept the Terms of",
18 | "form_privacy": "Service & Privacy Policy *",
19 | "form_send": "Send Message",
20 | "login": "login",
21 | "login_create": "Create new account",
22 | "login_or": "Or login with email",
23 | "login_email": "Email",
24 | "login_password": "Password",
25 | "login_remember": "Remember",
26 | "login_forgot": "Forgot Password",
27 | "continue": "Continue",
28 | "login_title": "Welcome back",
29 | "login_subtitle": "Please login to continue",
30 | "register": "Register",
31 | "register_already": "Already have account?",
32 | "register_or": "Or register with email",
33 | "register_name": "Name? *",
34 | "register_email": "Email? *",
35 | "register_password": "Password",
36 | "register_confirm": "Confirm Password",
37 | "register_title": "Nice to meet you :)",
38 | "register_subtitle": "Just register to join with us",
39 | "accept": "Accept",
40 | "en": "English",
41 | "de": "Deutsch",
42 | "zh": "简体中文",
43 | "pt": "Português",
44 | "id": "Bahasa Indonesia",
45 | "ar": "العربيّة"
46 | }
--------------------------------------------------------------------------------
/src/views/web/landing/components/Disclaimer/Disclaimer.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { makeStyles } from '@material-ui/core/styles'
3 | import { Typography, Container, Grid } from '@material-ui/core'
4 |
5 | const useStyles = makeStyles(theme => ({
6 | container: {
7 | display: 'flex'
8 | },
9 | cardWrapper: {
10 | zIndex: 1
11 | }
12 | }))
13 |
14 | const Disclaimer = () => {
15 | const classes = useStyles()
16 |
17 | return (
18 |
19 |
20 |
25 |
28 | RISK DISCLAIMER:
29 |
30 |
31 |
32 | Trading foreiegn exchange, commodities, crypto currencies, shares, bonds, indices carries high level of risk and may not suitable for every investor. Whole capital is at risk and entire amount of investment may be lost in short period of time.
33 |
34 |
35 |
36 | Megatrade.world will not accept any liability for loss of capital, damage, loss of profit which may arise directly or indirectly from use of or reliance on Megatrade.world service/products. The possibility exists that loss could sustain to all or some of your initial investment.
37 |
38 |
39 |
40 | Past performance displayed on Megatrade.world is not indicative of future results. No representation is being made that anyone is likely to achieve profits or losses similar to those shown on Megatrade.world before getting involved in trading you should carefully consider your objectives, risks, level of your experience. If you have any doubts you should seek advice from independent financial advisor.
41 |
42 |
43 |
44 |
45 | )
46 | }
47 |
48 | export default Disclaimer
--------------------------------------------------------------------------------
/src/views/user/support/components/SupportLive.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PropTypes from 'prop-types'
3 | import SendIcon from '@material-ui/icons/Send'
4 | import { makeStyles } from '@material-ui/styles'
5 | import { Card, CardContent, CardActions, TextField, InputAdornment, IconButton, Paper, colors } from '@material-ui/core'
6 |
7 | import ComingSoon from './ComingSoon'
8 |
9 | const useStyles = makeStyles(theme => ({
10 | root: {},
11 | paperUpgrade: {
12 | display: 'flex',
13 | width: '100%',
14 | alignItems: 'center',
15 | justifyContent: 'center',
16 | height: window.innerHeight * 0.7,
17 | backgroundColor: theme.palette.background.default
18 | },
19 | paper: {
20 | width: '100%',
21 | height: window.innerHeight * 0.7,
22 | backgroundColor: theme.palette.background.default
23 | },
24 | content: {
25 | width: '100%',
26 | padding: '2%',
27 | overflow: 'auto',
28 | position: 'relative',
29 | maxHeight: window.innerHeight * 0.7
30 | },
31 | avatar: {
32 | marginRight: theme.spacing(2),
33 | backgroundColor: colors.blue[500]
34 | }
35 | }))
36 |
37 | const SupportLive = props => {
38 | const { className, ...rest } = props
39 |
40 | const classes = useStyles()
41 |
42 | return (
43 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
62 |
66 |
67 |
68 |
69 | }} />
70 |
71 |
72 | )
73 | }
74 |
75 | SupportLive.propTypes = {
76 | className: PropTypes.string
77 | }
78 |
79 | export default SupportLive
--------------------------------------------------------------------------------
/public/locales/pt/common.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Um exemplo simples",
3 | "subtitle": "É uma página em branco. Comece a construir sua página aqui.",
4 | "error_with_status": "Ocorreu um erro no servidor",
5 | "404": "Não foi possível encontrar esta página.",
6 | "404_subtitle": "Você pode ficar e relaxar aqui, ou voltar ao começo.",
7 | "back": "voltar para casa",
8 | "error_without_status": "Ocorreu um erro no servidor",
9 | "contact_title": "Orçamento gratuito do projeto",
10 | "contact_title2": "Diga Olá para nós",
11 | "contact_subtitle": "Você tem alguma dúvida? Você está pronto para reduzir custos e criar novas receitas? Ou simplesmente quer dizer oi? Envie-nos uma mensagem.",
12 | "form_name": "Qual é o seu nome? *",
13 | "form_email": "Qual é o seu email? *",
14 | "form_phone": "Qual é o seu número de telefone?",
15 | "form_company": "Qual é a sua empresa?",
16 | "form_message": "Escreva sua mensagem aqui",
17 | "form_terms": "Li e aceito os Termos de",
18 | "form_privacy": "Serviço e política de privacidade *",
19 | "form_send": "Enviar mensagem",
20 | "login": "login",
21 | "login_create": "Crie uma nova conta",
22 | "login_or": "Ou entre com o e-mail",
23 | "login_email": "E-mail",
24 | "login_password": "Senha",
25 | "login_remember": "Lembre-se",
26 | "login_forgot": "Esqueceu a senha",
27 | "continue": "Continuar",
28 | "login_title": "Bem-vindo de volta",
29 | "login_subtitle": "Faça o login para continuar",
30 | "register": "Registo",
31 | "register_already": "Já possui uma conta?",
32 | "register_or": "Ou registre-se com o email",
33 | "register_name": "Nome? *",
34 | "register_email": "E-mail? *",
35 | "register_password": "Senha",
36 | "register_confirm": "Confirmar senha",
37 | "register_title": "Prazer em conhecê-lo :)",
38 | "register_subtitle": "Basta registrar-se para se juntar a nós",
39 | "accept": "aceitar",
40 | "en": "English",
41 | "de": "Deutsch",
42 | "zh": "简体中文",
43 | "pt": "Português",
44 | "id": "Bahasa Indonesia",
45 | "ar": "العربيّة"
46 | }
--------------------------------------------------------------------------------
/src/theme/Typography.js:
--------------------------------------------------------------------------------
1 | import Palette from './Palette'
2 |
3 | export default {
4 | h1: {
5 | fontWeight: 500,
6 | fontSize: '35px',
7 | lineHeight: '40px',
8 | letterSpacing: '-0.24px',
9 | color: Palette.text.primary
10 | },
11 | h2: {
12 | fontWeight: 500,
13 | fontSize: '29px',
14 | lineHeight: '32px',
15 | letterSpacing: '-0.24px',
16 | color: Palette.text.primary
17 | },
18 | h3: {
19 | fontWeight: 500,
20 | fontSize: '24px',
21 | lineHeight: '28px',
22 | letterSpacing: '-0.06px',
23 | color: Palette.text.primary
24 | },
25 | h4: {
26 | fontWeight: 500,
27 | fontSize: '20px',
28 | lineHeight: '24px',
29 | letterSpacing: '-0.06px',
30 | color: Palette.text.primary
31 | },
32 | h5: {
33 | fontWeight: 500,
34 | fontSize: '16px',
35 | lineHeight: '20px',
36 | letterSpacing: '-0.05px',
37 | color: Palette.text.primary
38 | },
39 | h6: {
40 | fontWeight: 500,
41 | fontSize: '14px',
42 | lineHeight: '20px',
43 | letterSpacing: '-0.05px',
44 | color: Palette.text.primary
45 | },
46 | subtitle1: {
47 | fontSize: '16px',
48 | lineHeight: '25px',
49 | letterSpacing: '-0.05px',
50 | color: Palette.text.primary
51 | },
52 | subtitle2: {
53 | fontWeight: 400,
54 | fontSize: '14px',
55 | lineHeight: '21px',
56 | letterSpacing: '-0.05px',
57 | color: Palette.text.secondary
58 | },
59 | body1: {
60 | fontSize: '14px',
61 | lineHeight: '21px',
62 | letterSpacing: '-0.05px',
63 | color: Palette.text.primary
64 | },
65 | body2: {
66 | fontSize: '12px',
67 | lineHeight: '18px',
68 | letterSpacing: '-0.04px',
69 | color: Palette.text.secondary
70 | },
71 | button: {
72 | fontSize: '14px',
73 | color: Palette.text.primary
74 | },
75 | caption: {
76 | fontSize: '11px',
77 | lineHeight: '13px',
78 | letterSpacing: '0.33px',
79 | color: Palette.text.secondary
80 | },
81 | overline: {
82 | fontWeight: 500,
83 | fontSize: '11px',
84 | lineHeight: '13px',
85 | letterSpacing: '0.33px',
86 | textTransform: 'uppercase',
87 | color: Palette.text.secondary
88 | }
89 | }
--------------------------------------------------------------------------------
/src/views/web/landing/components/Subscribe/SubscribeForm.js:
--------------------------------------------------------------------------------
1 | import { useSnackbar } from 'notistack'
2 | import React, { useState } from 'react'
3 | import SendIcon from '@material-ui/icons/Send'
4 | import { Paper, Typography, TextField, Button, Grid } from '@material-ui/core'
5 |
6 | import useStyles from './subscribe-style'
7 | import { MiscellaneousApi } from 'config/Api'
8 |
9 | const miscellaneousApi = new MiscellaneousApi()
10 |
11 | const Pricing = () => {
12 | const classes = useStyles()
13 | const { enqueueSnackbar } = useSnackbar()
14 |
15 | const [values, setValues] = useState({
16 | email: '',
17 | })
18 |
19 | const handleChange = name => event => {
20 | setValues({ ...values, [name]: event.target.value })
21 | }
22 |
23 | const onSubscribePress = async () => {
24 | const subscribeResult = await miscellaneousApi.newsLetter({ email: values.email })
25 | if (subscribeResult.error)
26 | enqueueSnackbar(subscribeResult.message, { variant: 'error' })
27 | else
28 | enqueueSnackbar(subscribeResult.message, { variant: 'success' })
29 | }
30 |
31 | return (
32 |
33 |
34 | Subscribe Our Newsletter
35 |
36 |
56 |
57 |
58 | )
59 | }
60 |
61 | export default Pricing
--------------------------------------------------------------------------------
/public/locales/id/common.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Contoh sederhana",
3 | "subtitle": "Ini halaman kosong. Mulai buat halaman Anda dari sini.",
4 | "error_with_status": "Terjadi kesalahan di server",
5 | "404": "Halaman ini tidak dapat ditemukan.",
6 | "404_subtitle": "Anda bisa tinggal dan bersantai di sini, atau kembali ke awal.",
7 | "back": "kembali ke beranda",
8 | "error_without_status": "Terjadi kesalahan di server",
9 | "contact_title": "Kutipan Proyek Gratis",
10 | "contact_title2": "Katakan Halo kepada Kami",
11 | "contact_subtitle": "Apakah Anda memiliki pertanyaan? Apakah Anda siap untuk mengurangi biaya dan membuat pendapatan baru? Atau Anda hanya ingin menyapa? Kirim pesan kepada kami.",
12 | "form_name": "Siapa nama Anda? *",
13 | "form_email": "Apa itu email Anda? *",
14 | "form_phone": "Berapa nomor telepon Anda?",
15 | "form_company": "Apa perusahaan Anda?",
16 | "form_message": "Tulis pesan Anda di sini",
17 | "form_terms": "Saya telah membaca dan menerima Ketentuan",
18 | "form_privacy": "Layanan & Kebijakan Privasi *",
19 | "form_send": "Kirim Pesan",
20 | "login": "masuk",
21 | "login_create": "Buat akun baru",
22 | "login_or": "Atau masuk dengan email",
23 | "login_email": "Email",
24 | "login_password": "Kata Sandi",
25 | "login_remember": "Ingat",
26 | "login_forgot": "Lupa Kata Sandi",
27 | "continue": "Lanjutkan",
28 | "login_title": "Selamat datang kembali",
29 | "login_subtitle": "Silakan masuk untuk melanjutkan",
30 | "register": "Daftar",
31 | "register_already": "Sudah punya akun?",
32 | "register_or": "Atau daftar dengan email",
33 | "register_name": "Nama? *",
34 | "register_email": "Email? *",
35 | "register_password": "Kata Sandi",
36 | "register_confirm": "Konfirmasi Kata Sandi",
37 | "register_title": "Senang bertemu Anda :)",
38 | "register_subtitle": "Cukup daftar untuk bergabung dengan kami",
39 | "accept": "Setuju",
40 | "en": "English",
41 | "de": "Deutsch",
42 | "zh": "简体中文",
43 | "pt": "Português",
44 | "id": "Bahasa Indonesia",
45 | "ar": "العربيّة"
46 | }
--------------------------------------------------------------------------------
/src/views/user/education/Education.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { makeStyles } from '@material-ui/styles'
3 | import { Typography, Grid } from '@material-ui/core'
4 |
5 | const useStyles = makeStyles(theme => ({
6 | root: {
7 | padding: theme.spacing(3)
8 | },
9 | content: {
10 | marginTop: 20,
11 | textAlign: 'center'
12 | },
13 | contentInner: {
14 | marginTop: 20
15 | },
16 | image: {
17 | width: 560,
18 | marginTop: 50,
19 | maxWidth: '100%',
20 | display: 'inline-block'
21 | }
22 | }))
23 |
24 | const Education = () => {
25 | const classes = useStyles()
26 |
27 | return (
28 |
29 |
33 |
37 |
38 |
39 | Coming Soon!
40 |
41 |
42 |
43 |
44 | We are working on making the educational content available as soon as possible, stay tuned and we will notify you once we launch.
45 |
46 |
47 |
48 | In the mean time feel free to email us your thoughts.
49 |
50 |
51 |
52 |
56 |
57 |
58 |
59 |
60 | )
61 | }
62 |
63 | export default Education
--------------------------------------------------------------------------------
/src/views/admin/dashboard/components/TotalUsers.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import React from 'react'
3 | import PropTypes from 'prop-types'
4 | import { makeStyles } from '@material-ui/styles'
5 | import PeopleIcon from '@material-ui/icons/PeopleOutlined'
6 | import { Card, CardContent, Grid, Typography, Avatar } from '@material-ui/core'
7 |
8 | const useStyles = makeStyles(theme => ({
9 | root: {
10 | height: '100%'
11 | },
12 | content: {
13 | display: 'flex',
14 | alignItems: 'center'
15 | },
16 | title: {
17 | fontWeight: 700
18 | },
19 | avatar: {
20 | width: 56,
21 | height: 56,
22 | backgroundColor: 'green'
23 | },
24 | icon: {
25 | height: 32,
26 | width: 32
27 | }
28 | }))
29 |
30 | const TotalUsers = props => {
31 | const { className, users, ...rest } = props
32 |
33 | const classes = useStyles()
34 |
35 | return (
36 |
39 |
40 |
43 |
44 |
49 | TOTAL USERS
50 |
51 |
52 | {users}
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 | )
64 | }
65 |
66 | TotalUsers.propTypes = {
67 | className: PropTypes.string
68 | }
69 |
70 | export default TotalUsers
--------------------------------------------------------------------------------
/src/views/admin/dashboard/components/TotalSignals.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import React from 'react'
3 | import PropTypes from 'prop-types'
4 | import { makeStyles } from '@material-ui/styles'
5 | import SignalsIcon from '@material-ui/icons/TrendingUp'
6 | import { Card, CardContent, Grid, Typography, Avatar } from '@material-ui/core'
7 |
8 | const useStyles = makeStyles(theme => ({
9 | root: {
10 | height: '100%'
11 | },
12 | content: {
13 | display: 'flex',
14 | alignItems: 'center'
15 | },
16 | title: {
17 | fontWeight: 700
18 | },
19 | avatar: {
20 | width: 56,
21 | height: 56,
22 | backgroundColor: 'gold'
23 | },
24 | icon: {
25 | height: 32,
26 | width: 32
27 | }
28 | }))
29 |
30 | const TotalUsers = props => {
31 | const { className, signals, ...rest } = props
32 |
33 | const classes = useStyles()
34 |
35 | return (
36 |
39 |
40 |
43 |
44 |
49 | TOTAL SIGNALS
50 |
51 |
52 | {signals}
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 | )
64 | }
65 |
66 | TotalUsers.propTypes = {
67 | className: PropTypes.string
68 | }
69 |
70 | export default TotalUsers
--------------------------------------------------------------------------------
/src/views/admin/dashboard/components/TotalLogins.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import React from 'react'
3 | import PropTypes from 'prop-types'
4 | import { makeStyles } from '@material-ui/styles'
5 | import LoginIcon from '@material-ui/icons/Input'
6 | import { Card, CardContent, Grid, Typography, Avatar } from '@material-ui/core'
7 |
8 | const useStyles = makeStyles(theme => ({
9 | root: {
10 | height: '100%'
11 | },
12 | content: {
13 | display: 'flex',
14 | alignItems: 'center'
15 | },
16 | title: {
17 | fontWeight: 700
18 | },
19 | avatar: {
20 | width: 56,
21 | height: 56,
22 | backgroundColor: theme.palette.secondary.main
23 | },
24 | icon: {
25 | height: 32,
26 | width: 32
27 | }
28 | }))
29 |
30 | const TotalUsers = props => {
31 | const { className, logins, ...rest } = props
32 |
33 | const classes = useStyles()
34 |
35 | return (
36 |
39 |
40 |
43 |
44 |
49 | TOTAL LOGINS
50 |
51 |
52 | {logins}
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 | )
64 | }
65 |
66 | TotalUsers.propTypes = {
67 | className: PropTypes.string
68 | }
69 |
70 | export default TotalUsers
--------------------------------------------------------------------------------
/src/views/user/groupChat/components/GroupChatMembers.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PropTypes from 'prop-types'
3 | import { makeStyles } from '@material-ui/styles'
4 | import { Card, CardHeader, CardContent, Divider, List, ListItemText, ListItemAvatar, ListItem, Avatar, colors } from '@material-ui/core'
5 |
6 | import getInitials from 'helpers/getInitials'
7 |
8 | const useStyles = makeStyles(theme => ({
9 | root: {
10 | height: '100%',
11 | maxHeight: window.innerHeight * 0.85
12 | },
13 | avatar: {
14 | marginRight: theme.spacing(2),
15 | backgroundColor: colors.blue[500]
16 | },
17 | content: {
18 | width: '100%',
19 | padding: '2%',
20 | overflow: 'auto',
21 | position: 'relative',
22 | maxHeight: window.innerHeight * 0.6,
23 | backgroundColor: theme.palette.background.paper
24 | }
25 | }))
26 |
27 | const GroupChatMembers = props => {
28 | const { className, users, profile, ...rest } = props
29 |
30 | const classes = useStyles()
31 |
32 | const userId = localStorage.getItem('userId')
33 |
34 | return (
35 |
38 |
41 |
42 |
43 |
44 |
45 |
46 | {users.map((user, i) => (
47 |
48 |
49 |
50 |
53 | {getInitials(user.fullName)}
54 |
55 |
56 |
57 |
60 |
61 |
62 |
63 |
64 | ))}
65 |
66 |
67 |
68 | )
69 | }
70 |
71 | GroupChatMembers.propTypes = {
72 | className: PropTypes.string
73 | }
74 |
75 | export default GroupChatMembers
--------------------------------------------------------------------------------
/src/views/admin/groupChat/components/GroupChatMembers.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import PropTypes from 'prop-types'
3 | import { makeStyles } from '@material-ui/styles'
4 | import { Card, CardHeader, CardContent, Divider, List, ListItemText, ListItemAvatar, ListItem, Avatar, colors } from '@material-ui/core'
5 |
6 | import getInitials from 'helpers/getInitials'
7 |
8 | const useStyles = makeStyles(theme => ({
9 | root: {
10 | height: '100%',
11 | maxHeight: window.innerHeight * 0.85
12 | },
13 | avatar: {
14 | marginRight: theme.spacing(2),
15 | backgroundColor: colors.blue[500]
16 | },
17 | content: {
18 | width: '100%',
19 | padding: '2%',
20 | overflow: 'auto',
21 | position: 'relative',
22 | maxHeight: window.innerHeight * 0.6,
23 | backgroundColor: theme.palette.background.paper
24 | }
25 | }))
26 |
27 | const GroupChatMembers = props => {
28 | const { className, users, profile, ...rest } = props
29 |
30 | const classes = useStyles()
31 |
32 | const adminId = localStorage.getItem('adminId')
33 |
34 | return (
35 |
38 |
41 |
42 |
43 |
44 |
45 |
46 | {users.map((user, i) => (
47 |
48 |
49 |
50 |
53 | {getInitials(user.fullName)}
54 |
55 |
56 |
57 |
60 |
61 |
62 |
63 |
64 | ))}
65 |
66 |
67 |
68 | )
69 | }
70 |
71 | GroupChatMembers.propTypes = {
72 | className: PropTypes.string
73 | }
74 |
75 | export default GroupChatMembers
--------------------------------------------------------------------------------
/src/views/admin/dashboard/components/TotalFreeSignals.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import React from 'react'
3 | import PropTypes from 'prop-types'
4 | import { makeStyles } from '@material-ui/styles'
5 | import SignalsIcon from '@material-ui/icons/TrendingUp'
6 | import { Card, CardContent, Grid, Typography, Avatar } from '@material-ui/core'
7 |
8 | const useStyles = makeStyles(theme => ({
9 | root: {
10 | height: '100%'
11 | },
12 | content: {
13 | display: 'flex',
14 | alignItems: 'center'
15 | },
16 | title: {
17 | fontWeight: 700
18 | },
19 | avatar: {
20 | width: 56,
21 | height: 56,
22 | backgroundColor: theme.palette.primary.main
23 | },
24 | icon: {
25 | height: 32,
26 | width: 32
27 | }
28 | }))
29 |
30 | const TotalUsers = props => {
31 | const { className, freeSignals, ...rest } = props
32 |
33 | const classes = useStyles()
34 |
35 | return (
36 |
39 |
40 |
43 |
44 |
49 | TOTAL FREE SIGNALS
50 |
51 |
52 | {freeSignals}
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 | )
64 | }
65 |
66 | TotalUsers.propTypes = {
67 | className: PropTypes.string
68 | }
69 |
70 | export default TotalUsers
--------------------------------------------------------------------------------
/src/layouts/admin/components/sidebar/components/SidebarNav.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import PropTypes from 'prop-types'
3 | import React, { forwardRef } from 'react'
4 | import { makeStyles } from '@material-ui/styles'
5 | import { NavLink as RouterLink } from 'react-router-dom'
6 | import { List, ListItem, Button } from '@material-ui/core'
7 |
8 | const useStyles = makeStyles(theme => ({
9 | root: {},
10 | item: {
11 | paddingTop: 0,
12 | display: 'flex',
13 | paddingBottom: 0
14 | },
15 | button: {
16 | width: '100%',
17 | letterSpacing: 0,
18 | padding: '10px 8px',
19 | textTransform: 'none',
20 | color: theme.palette.text,
21 | justifyContent: 'flex-start',
22 | fontWeight: theme.typography.fontWeightMedium
23 | },
24 | icon: {
25 | width: 24,
26 | height: 24,
27 | display: 'flex',
28 | alignItems: 'center',
29 | color: theme.palette.icon,
30 | marginRight: theme.spacing(1)
31 | },
32 | active: {
33 | color: theme.palette.primary.main,
34 | fontWeight: theme.typography.fontWeightMedium,
35 | '& $icon': {
36 | color: theme.palette.primary.main
37 | }
38 | }
39 | }))
40 |
41 | const CustomRouterLink = forwardRef((props, ref) => (
42 |
45 |
46 |
47 | ))
48 |
49 | const SidebarNav = props => {
50 | const { pages, className, ...rest } = props
51 |
52 | const classes = useStyles()
53 |
54 | return (
55 |
58 | {
59 | pages.map(page => (
60 |
64 |
69 | {page.icon}
70 | {page.title}
71 |
72 |
73 | ))
74 | }
75 |
76 | )
77 | }
78 |
79 | SidebarNav.propTypes = {
80 | className: PropTypes.string,
81 | pages: PropTypes.array.isRequired
82 | }
83 |
84 | export default SidebarNav
--------------------------------------------------------------------------------
/src/views/user/viewSignals/ViewSignals.js:
--------------------------------------------------------------------------------
1 | import { useSnackbar } from 'notistack'
2 | import { makeStyles } from '@material-ui/styles'
3 | import React, { useEffect, useState } from 'react'
4 | import { Grid, Dialog, CircularProgress, DialogContent } from '@material-ui/core'
5 |
6 | import { UserApi } from 'config/Api'
7 | import SignalsTable from './components/SignalsTable'
8 |
9 | const userApi = new UserApi()
10 |
11 | const useStyles = makeStyles(theme => ({
12 | root: {
13 | padding: theme.spacing(4)
14 | }
15 | }))
16 |
17 | const ViewSignals = () => {
18 | const classes = useStyles()
19 | const { enqueueSnackbar } = useSnackbar()
20 |
21 | const userId = localStorage.getItem('userId')
22 |
23 | const [isLoading, setIsLoading] = useState(true)
24 | const [signalsState, setSignalsState] = useState([])
25 |
26 | useEffect(() => { fetchSignals() }, [])
27 |
28 | const fetchSignals = async () => {
29 | const fetchSignalsResult = await userApi.fetchSignals({ userId })
30 | if (fetchSignalsResult.error) {
31 | setIsLoading(false)
32 | return enqueueSnackbar(fetchSignalsResult.message, { variant: 'error' })
33 | }
34 |
35 | setSignalsState(fetchSignalsResult.data)
36 | setIsLoading(false)
37 | }
38 |
39 | if (isLoading)
40 | return (
41 |
42 |
43 |
44 |
45 |
46 | )
47 |
48 | return (
49 |
50 |
53 |
59 |
62 |
63 |
64 |
65 | )
66 | }
67 |
68 | export default ViewSignals
--------------------------------------------------------------------------------
/src/vendors/slick/fonts/slick.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Generated by Fontastic.me
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/public/locales/de/common.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Ein einfaches Beispiel",
3 | "subtitle": "Es ist eine leere Seite. Baue deine Seite mit here auf",
4 | "error_with_status": "Auf dem Server ist ein Fehler aufgetreten",
5 | "404": "Diese Seite konnte nicht gefunden werden.",
6 | "404_subtitle": "Sie können entweder hier bleiben und entspannen oder zum Anfang zurückkehren.",
7 | "zurück": "zurück nach Hause",
8 | "error_without_status": "Auf dem Server ist ein Fehler aufgetreten",
9 | "contact_title": "Kostenloses Projektangebot",
10 | "contact_title2": "Sag Hallo zu uns",
11 | "contact_subtitle": "Haben Sie Fragen? Sind Sie bereit, Kosten zu senken und neue Einnahmen zu generieren? Oder möchten Sie einfach nur Hallo sagen? Schreiben Sie uns eine Nachricht.",
12 | "form_name": "Wie ist Ihr Name? *",
13 | "form_email": "Wie lautet Ihre E-Mail-Adresse? *",
14 | "form_phone": "Wie lautet Ihre Telefonnummer?",
15 | "form_company": "Was ist Ihre Firma?",
16 | "form_message": "Geben Sie hier Ihre Nachricht ein",
17 | "form_terms": "Ich habe die AGB von gelesen und akzeptiere sie.",
18 | "form_privacy": "Service & Datenschutz *",
19 | "form_send": "Nachricht senden",
20 | "login": "Einloggen",
21 | "login_create": "Neues Konto erstellen",
22 | "login_or": "Oder mit E-Mail einloggen",
23 | "login_email": "Email",
24 | "login_password": "Passwort",
25 | "login_remember": "Merken",
26 | "login_forgot": "Passwort vergessen",
27 | "continue": "Weiter",
28 | "login_title": "Willkommen zurück",
29 | "login_subtitle": "Bitte einloggen um fortzufahren",
30 | "register": "Register",
31 | "register_already": "Haben Sie schon ein Konto?",
32 | "register_or": "Oder registriere dich per E-Mail",
33 | "register_name": "Name? *",
34 | "register_email": "Email? *",
35 | "register_password": "Passwort",
36 | "register_confirm": "Passwort bestätigen",
37 | "register_title": "Schön dich zu treffen :)",
38 | "register_subtitle": "Einfach registrieren, um bei uns mitzumachen",
39 | "accept": "Accept",
40 | "en": "English",
41 | "de": "Deutsch",
42 | "zh": "简体中文",
43 | "pt": "Português",
44 | "id": "Bahasa Indonesia",
45 | "ar": "العربيّة"
46 | }
--------------------------------------------------------------------------------
/src/views/admin/subscriptions/Subscriptions.js:
--------------------------------------------------------------------------------
1 | import { useSnackbar } from 'notistack'
2 | import { makeStyles } from '@material-ui/styles'
3 | import React, { useEffect, useState } from 'react'
4 | import { Grid, Dialog, CircularProgress, DialogContent } from '@material-ui/core'
5 |
6 | import { AdminApi } from 'config/Api'
7 | import NewSubscription from './components/NewSubscription'
8 | import SubscriptionsList from './components/SubscriptionsList'
9 |
10 | const adminApi = new AdminApi()
11 |
12 | const useStyles = makeStyles(theme => ({
13 | root: {
14 | padding: theme.spacing(4)
15 | }
16 | }))
17 |
18 | const Subscriptions = () => {
19 | const classes = useStyles()
20 |
21 | const { enqueueSnackbar } = useSnackbar()
22 |
23 | const adminId = localStorage.getItem('adminId')
24 |
25 | const [isLoading, setIsLoading] = useState(true)
26 | const [subscriptionsState, setSubscriptionsState] = useState([])
27 |
28 | useEffect(() => { fetchSubscriptions() }, [])
29 |
30 | const fetchSubscriptions = async () => {
31 | const fetchSubscriptionsResult = await adminApi.fetchSubscriptions({ adminId })
32 | if (fetchSubscriptionsResult.error) {
33 | setIsLoading(false)
34 | return enqueueSnackbar(fetchSubscriptionsResult.message, { variant: 'error' })
35 | }
36 |
37 | setSubscriptionsState(fetchSubscriptionsResult.data)
38 | setIsLoading(false)
39 | }
40 |
41 | const reloadData = () => fetchSubscriptions()
42 |
43 | if (isLoading)
44 | return (
45 |
46 |
47 |
48 |
49 |
50 | )
51 |
52 | return (
53 |
54 |
57 |
63 |
66 |
67 |
68 |
74 |
76 |
77 |
78 |
79 | )
80 | }
81 |
82 | export default Subscriptions
--------------------------------------------------------------------------------
/src/views/web/landing/components/PageNav/pagenav-style.js:
--------------------------------------------------------------------------------
1 | import { makeStyles } from '@material-ui/core/styles'
2 | import { fade } from '@material-ui/core/styles/colorManipulator'
3 |
4 | const pagenav = makeStyles(theme => ({
5 | show: {},
6 | fab: {
7 | transform: 'scale(0.5)',
8 | transition: 'all 0.5s ease',
9 | opacity: 0,
10 | position: 'absolute',
11 | bottom: 0,
12 | right: 0,
13 | background: theme.palette.primary.light,
14 | fontWeight: theme.typography.fontWeightBold,
15 | '& svg': {
16 | fill: theme.palette.primary.dark,
17 | width: 40,
18 | height: 40
19 | },
20 | '&:hover': {
21 | '& svg': {
22 | fill: theme.palette.primary.light,
23 | },
24 | },
25 | },
26 | pageNav: {
27 | zIndex: 200,
28 | position: 'fixed',
29 | bottom: 40,
30 | right: 40,
31 | '& nav': {
32 | transition: 'height 0.5s ease',
33 | transitionDelay: '0.5s',
34 | height: 0,
35 | padding: theme.spacing(1, 1, 7),
36 | overflow: 'hidden'
37 | },
38 | '&$show': {
39 | '& $fab': {
40 | opacity: 1,
41 | transform: 'scale(1)',
42 | }
43 | },
44 | '& ul': {
45 | margin: '0 14px 16px 0',
46 | padding: 0,
47 | position: 'relative'
48 | },
49 | '& li': {
50 | marginBottom: theme.spacing(3),
51 | listStyle: 'none',
52 | opacity: 0,
53 | position: 'relative',
54 | transition: 'all 0.4s ease',
55 | '& a': {
56 | width: 12,
57 | height: 12,
58 | boxShadow: theme.shadows[1],
59 | background: fade(theme.palette.common.white, 0.3),
60 | border: `1px solid ${theme.palette.primary.dark}`,
61 | display: 'block',
62 | transition: 'all 0.4s ease',
63 | borderRadius: 3,
64 | transform: 'rotate(45deg)'
65 | },
66 | '&[class="active"] a': {
67 | background: theme.palette.primary.dark,
68 | border: `1px solid ${theme.palette.primary.light}`,
69 | },
70 | },
71 | '&:hover': {
72 | '& li': {
73 | opacity: 1,
74 | top: '0 !important',
75 | },
76 | '& nav': {
77 | transitionDelay: '0s',
78 | height: '100%'
79 | }
80 | }
81 | },
82 | tooltip: {
83 | textTransform: 'capitalize',
84 | background: theme.palette.primary.dark,
85 | fontSize: 14
86 | },
87 | }))
88 |
89 | export default pagenav
90 |
--------------------------------------------------------------------------------
/src/views/admin/sponsor/Sponsor.js:
--------------------------------------------------------------------------------
1 | import { useSnackbar } from 'notistack'
2 | import { makeStyles } from '@material-ui/styles'
3 | import React, { useEffect, useState } from 'react'
4 | import { Grid, Dialog, CircularProgress, DialogContent } from '@material-ui/core'
5 |
6 | import { AdminApi } from 'config/Api'
7 | import SponsorsTable from './components/SponsorsTable'
8 |
9 | const adminApi = new AdminApi()
10 |
11 | const useStyles = makeStyles(theme => ({
12 | root: {
13 | padding: theme.spacing(4)
14 | }
15 | }))
16 |
17 | const Sponsors = () => {
18 | const classes = useStyles()
19 | const { enqueueSnackbar } = useSnackbar()
20 |
21 | const adminId = localStorage.getItem('adminId')
22 |
23 | const [isLoading, setIsLoading] = useState(true)
24 | const [sponsorsState, setSponsorsState] = useState([])
25 |
26 | useEffect(() => {
27 | fetchSponsorsList()
28 | }, [])
29 |
30 | const fetchSponsorsList = async () => {
31 | const fetchSponsorsListResult = await adminApi.fetchSponsors({ adminId })
32 | if (fetchSponsorsListResult.error) {
33 | setIsLoading(false)
34 | return enqueueSnackbar(fetchSponsorsListResult.message, { variant: 'error' })
35 | }
36 |
37 | setSponsorsState(fetchSponsorsListResult.data)
38 | setIsLoading(false)
39 | }
40 |
41 | const reloadData = () => fetchSponsorsList()
42 |
43 | if (isLoading)
44 | return (
45 |
46 |
47 |
48 |
49 |
50 | )
51 |
52 | return (
53 |
54 |
57 |
63 |
66 |
67 |
68 |
69 | )
70 | }
71 |
72 | export default Sponsors
--------------------------------------------------------------------------------
/src/views/web/auth/components/AuthFrame/AuthFrame.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import React from 'react'
3 | import PropTypes from 'prop-types'
4 | import HomeIcon from 'react-ionicons/lib/IosHomeOutline'
5 | import { IconButton, Hidden, Paper, Typography, Container, Grid } from '@material-ui/core'
6 |
7 | import useStyles from '../../form-style'
8 |
9 | const AuthFrame = props => {
10 | const classes = useStyles()
11 | const { children, title, subtitle } = props
12 |
13 | return (
14 |
15 |
16 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | Mega Trade
43 |
44 |
45 |
46 |
47 | {title}
48 |
49 |
50 |
51 | {subtitle}
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 | {children}
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 | )
68 | }
69 |
70 | AuthFrame.propTypes = {
71 | children: PropTypes.node.isRequired,
72 | title: PropTypes.string.isRequired,
73 | subtitle: PropTypes.string,
74 | }
75 |
76 | AuthFrame.defaultProps = {
77 | subtitle: '',
78 | }
79 |
80 | export default AuthFrame
81 |
--------------------------------------------------------------------------------
/src/vendors/slick/slick.css:
--------------------------------------------------------------------------------
1 | /* Slider */
2 | .slick-slider
3 | {
4 | position: relative;
5 |
6 | display: block;
7 | box-sizing: border-box;
8 |
9 | -webkit-user-select: none;
10 | -moz-user-select: none;
11 | -ms-user-select: none;
12 | user-select: none;
13 |
14 | -webkit-touch-callout: none;
15 | -khtml-user-select: none;
16 | -ms-touch-action: pan-y;
17 | touch-action: pan-y;
18 | -webkit-tap-highlight-color: transparent;
19 | }
20 |
21 | .slick-list
22 | {
23 | position: relative;
24 |
25 | display: block;
26 | overflow: hidden;
27 |
28 | margin: 0;
29 | padding: 0;
30 | }
31 | .slick-list:focus
32 | {
33 | outline: none;
34 | }
35 | .slick-list.dragging
36 | {
37 | cursor: pointer;
38 | cursor: hand;
39 | }
40 |
41 | .slick-slider .slick-track,
42 | .slick-slider .slick-list
43 | {
44 | -webkit-transform: translate3d(0, 0, 0);
45 | -moz-transform: translate3d(0, 0, 0);
46 | -ms-transform: translate3d(0, 0, 0);
47 | -o-transform: translate3d(0, 0, 0);
48 | transform: translate3d(0, 0, 0);
49 | }
50 |
51 | .slick-track
52 | {
53 | position: relative;
54 | top: 0;
55 | left: 0;
56 |
57 | display: block;
58 | margin-left: auto;
59 | margin-right: auto;
60 | }
61 | .slick-track:before,
62 | .slick-track:after
63 | {
64 | display: table;
65 |
66 | content: '';
67 | }
68 | .slick-track:after
69 | {
70 | clear: both;
71 | }
72 | .slick-loading .slick-track
73 | {
74 | visibility: hidden;
75 | }
76 |
77 | .slick-slide
78 | {
79 | display: none;
80 | float: left;
81 |
82 | height: 100%;
83 | min-height: 1px;
84 | }
85 | .slick-slide img
86 | {
87 | display: block;
88 | }
89 | .slick-slide.slick-loading img
90 | {
91 | display: none;
92 | }
93 | .slick-slide.dragging img
94 | {
95 | pointer-events: none;
96 | }
97 | .slick-initialized .slick-slide
98 | {
99 | display: block;
100 | }
101 | .slick-loading .slick-slide
102 | {
103 | visibility: hidden;
104 | }
105 | .slick-vertical .slick-slide
106 | {
107 | display: block;
108 |
109 | height: auto;
110 |
111 | border: 1px solid transparent;
112 | }
113 | .slick-arrow.slick-hidden {
114 | display: none;
115 | }
116 |
--------------------------------------------------------------------------------
/src/layouts/user/components/sidebar/components/SidebarNav.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import ReactGA from 'react-ga'
3 | import PropTypes from 'prop-types'
4 | import React, { forwardRef } from 'react'
5 | import { makeStyles } from '@material-ui/styles'
6 | import { NavLink as RouterLink } from 'react-router-dom'
7 | import { List, ListItem, Button } from '@material-ui/core'
8 |
9 | const useStyles = makeStyles(theme => ({
10 | root: {},
11 | item: {
12 | paddingTop: 0,
13 | display: 'flex',
14 | paddingBottom: 0
15 | },
16 | button: {
17 | width: '100%',
18 | letterSpacing: 0,
19 | padding: '10px 8px',
20 | textTransform: 'none',
21 | color: theme.palette.text,
22 | justifyContent: 'flex-start',
23 | fontWeight: theme.typography.fontWeightMedium
24 | },
25 | icon: {
26 | width: 24,
27 | height: 24,
28 | display: 'flex',
29 | alignItems: 'center',
30 | color: theme.palette.icon,
31 | marginRight: theme.spacing(1)
32 | },
33 | active: {
34 | color: theme.palette.primary.main,
35 | fontWeight: theme.typography.fontWeightMedium,
36 | '& $icon': {
37 | color: theme.palette.primary.main
38 | }
39 | }
40 | }))
41 |
42 | const CustomRouterLink = forwardRef((props, ref) => (
43 |
46 |
47 |
48 | ))
49 |
50 | const SidebarNav = props => {
51 | const { pages, className, ...rest } = props
52 |
53 | const classes = useStyles()
54 |
55 | return (
56 |
59 | {
60 | pages.map(page => (
61 |
65 | ReactGA.event({
71 | category: `${page.title.toUpperCase()}`,
72 | action: `User Viewed ${page.title} from menu`,
73 | label: 'SIDE MENU PAGE'
74 | })}>
75 | {page.icon}
76 | {page.title}
77 |
78 |
79 | ))
80 | }
81 |
82 | )
83 | }
84 |
85 | SidebarNav.propTypes = {
86 | className: PropTypes.string,
87 | pages: PropTypes.array.isRequired
88 | }
89 |
90 | export default SidebarNav
--------------------------------------------------------------------------------
/src/views/admin/users/Users.js:
--------------------------------------------------------------------------------
1 | import { useSnackbar } from 'notistack'
2 | import { makeStyles } from '@material-ui/styles'
3 | import React, { useEffect, useState } from 'react'
4 | import { Grid, Dialog, CircularProgress, DialogContent } from '@material-ui/core'
5 |
6 | import { AdminApi } from 'config/Api'
7 | import UsersTable from './components/UsersTable'
8 |
9 | const adminApi = new AdminApi()
10 |
11 | const useStyles = makeStyles(theme => ({
12 | root: {
13 | padding: theme.spacing(4)
14 | }
15 | }))
16 |
17 | const Users = () => {
18 | const classes = useStyles()
19 | const { enqueueSnackbar } = useSnackbar()
20 |
21 | const adminId = localStorage.getItem('adminId')
22 |
23 | const [isLoading, setIsLoading] = useState(true)
24 | const [usersListState, setUsersListState] = useState([])
25 | const [subscriptionsState, setSubscriptionsState] = useState([])
26 |
27 | useEffect(() => {
28 | fetchUsersList()
29 | fetchSubscriptions()
30 | }, [])
31 |
32 | const fetchUsersList = async () => {
33 | const fetchUsersListResult = await adminApi.fetchUsersList({ adminId })
34 | if (fetchUsersListResult.error) {
35 | setIsLoading(false)
36 | return enqueueSnackbar(fetchUsersListResult.message, { variant: 'error' })
37 | }
38 |
39 | setUsersListState(fetchUsersListResult.data)
40 | setIsLoading(false)
41 | }
42 |
43 | const fetchSubscriptions = async () => {
44 | const fetchSubscriptionsResult = await adminApi.fetchSubscriptions({ adminId })
45 | if (fetchSubscriptionsResult.error) {
46 | return enqueueSnackbar(fetchSubscriptionsResult.message, { variant: 'error' })
47 | }
48 |
49 | setSubscriptionsState(fetchSubscriptionsResult.data)
50 | }
51 |
52 | const reloadData = () => {
53 | fetchUsersList()
54 | fetchSubscriptions()
55 | }
56 |
57 | if (isLoading)
58 | return (
59 |
60 |
61 |
62 |
63 |
64 | )
65 |
66 | return (
67 |
68 |
71 |
77 |
81 |
82 |
83 |
84 | )
85 | }
86 |
87 | export default Users
--------------------------------------------------------------------------------
/src/views/web/resetPassword/resetPassword-style.js:
--------------------------------------------------------------------------------
1 | import { makeStyles } from '@material-ui/core/styles'
2 | import { fade, darken } from '@material-ui/core/styles/colorManipulator'
3 |
4 | const useStyles = makeStyles(theme => ({
5 | errorWrap: {
6 | width: '100%',
7 | minHeight: '90vh',
8 | display: 'flex',
9 | alignItems: 'center'
10 | },
11 | flex: {
12 | display: 'flex',
13 | justifyContent: 'center'
14 | },
15 | deco: {
16 | position: 'relative',
17 | [theme.breakpoints.down('md')]: {
18 | height: 320,
19 | },
20 | '& h3': {
21 | fontFamily: 'Roboto Condensed',
22 | color: theme.palette.primary.main,
23 | fontSize: 106,
24 | textTransform: 'capitalize',
25 | fontWeight: 700,
26 | paddingTop: 40,
27 | paddingLeft: 20,
28 | position: 'relative',
29 | zIndex: 1,
30 | },
31 | '&:before': {
32 | content: '"',
33 | width: 210,
34 | height: 220,
35 | background: theme.palette.primary.main,
36 | borderRadius: 24,
37 | transform: 'rotate(45deg)',
38 | position: 'absolute',
39 | top: theme.spacing(-1),
40 | left: 0,
41 | }
42 | },
43 | input: {
44 | width: '100%',
45 | '& label': {
46 | left: theme.spacing(0.5),
47 | },
48 | '& > div': {
49 | overflow: 'hidden',
50 | '& input, textarea': {
51 | paddingLeft: theme.spacing(2),
52 | '&:focus': {
53 | background: theme.palette.background.default
54 | },
55 | }
56 | },
57 | '&$light': {
58 | '& label': {
59 | color: theme.palette.common.white,
60 | },
61 | '& > div': {
62 | border: `1px solid ${fade(theme.palette.primary.light, 0.5)}`,
63 | '& input': {
64 | color: theme.palette.common.white,
65 | '&:focus': {
66 | background: fade(theme.palette.text.hint, 0.2)
67 | },
68 | '&:hover': {
69 | background: fade(theme.palette.text.hint, 0.2)
70 | }
71 | },
72 | }
73 | }
74 | },
75 | text: {
76 | borderLeft: `1px solid ${theme.palette.divider}`,
77 | [theme.breakpoints.up('md')]: {
78 | paddingLeft: theme.spacing(5),
79 | },
80 | [theme.breakpoints.down('md')]: {
81 | textAlign: 'center'
82 | },
83 | '& h4': {
84 | fontWeight: theme.typography.fontWeightBold,
85 | marginBottom: theme.spacing(4)
86 | },
87 | '& p': {
88 | fontSize: 22,
89 | color: theme.palette.text.secondary
90 | }
91 | },
92 | button: {
93 | marginTop: theme.spacing(4)
94 | }
95 | }))
96 |
97 | export default useStyles
98 |
--------------------------------------------------------------------------------
/src/views/admin/dashboard/components/TotalPayingUsers.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import React from 'react'
3 | import PropTypes from 'prop-types'
4 | import { makeStyles } from '@material-ui/styles'
5 | import AttachMoneyIcon from '@material-ui/icons/AttachMoney'
6 | import { Card, CardContent, Grid, Typography, Avatar } from '@material-ui/core'
7 |
8 | const useStyles = makeStyles(theme => ({
9 | root: {
10 | height: '100%',
11 | color: theme.palette.primary.contrastText,
12 | backgroundColor: theme.palette.primary.main
13 | },
14 | content: {
15 | display: 'flex',
16 | alignItems: 'center'
17 | },
18 | title: {
19 | fontWeight: 700
20 | },
21 | avatar: {
22 | width: 56,
23 | height: 56,
24 | color: theme.palette.primary.main,
25 | backgroundColor: theme.palette.background.paper
26 | },
27 | icon: {
28 | width: 32,
29 | height: 32
30 | }
31 | }))
32 |
33 | const TotalProfit = props => {
34 | const { className, payingUsers, ...rest } = props
35 |
36 | const classes = useStyles()
37 |
38 | return (
39 |
42 |
43 |
46 |
47 |
52 | TOTAL PAYING USERS
53 |
54 |
55 |
58 | {payingUsers}
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 | )
71 | }
72 |
73 | TotalProfit.propTypes = {
74 | className: PropTypes.string
75 | }
76 |
77 | export default TotalProfit
--------------------------------------------------------------------------------
/src/views/user/support/components/ComingSoon.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import React from 'react'
3 | import PropTypes from 'prop-types'
4 | import { Link } from 'react-router-dom'
5 | import { makeStyles } from '@material-ui/styles'
6 | import { Typography, Button } from '@material-ui/core'
7 |
8 | const useStyles = makeStyles(theme => ({
9 | root: {
10 | marginTop: 50,
11 | borderRadius: 25,
12 | backgroundColor: theme.palette.background.default
13 | },
14 | media: {
15 | height: 80,
16 | textAlign: 'center',
17 | paddingTop: theme.spacing(2),
18 | '& > img': {
19 | width: 'auto',
20 | height: '100%'
21 | }
22 | },
23 | content: {
24 | padding: theme.spacing(1, 2)
25 | },
26 | actions: {
27 | display: 'flex',
28 | justifyContent: 'center',
29 | padding: theme.spacing(1, 2)
30 | }
31 | }))
32 |
33 | const UpgradePlan = props => {
34 | const { className, ...rest } = props
35 |
36 | const classes = useStyles()
37 |
38 | return (
39 |
42 |
43 |
46 |
47 |
48 |
49 |
53 | We are Sorry! Live is coming soon to Premium Members
54 |
55 |
56 |
59 | Upgrade your Subscription to recieve all features including trading signals, group chat, etc.
60 |
61 |
62 |
63 |
64 |
69 | Upgrade Now
70 |
71 |
72 |
73 | )
74 | }
75 |
76 | UpgradePlan.propTypes = {
77 | className: PropTypes.string
78 | }
79 |
80 | export default UpgradePlan
--------------------------------------------------------------------------------
/src/views/user/groupChat/components/UpgradePlan.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import React from 'react'
3 | import PropTypes from 'prop-types'
4 | import { Link } from 'react-router-dom'
5 | import { makeStyles } from '@material-ui/styles'
6 | import { Typography, Button } from '@material-ui/core'
7 |
8 | const useStyles = makeStyles(theme => ({
9 | root: {
10 | marginTop: 50,
11 | borderRadius: 25,
12 | backgroundColor: theme.palette.background.default
13 | },
14 | media: {
15 | height: 80,
16 | textAlign: 'center',
17 | paddingTop: theme.spacing(2),
18 | '& > img': {
19 | width: 'auto',
20 | height: '100%'
21 | }
22 | },
23 | content: {
24 | padding: theme.spacing(1, 2)
25 | },
26 | actions: {
27 | display: 'flex',
28 | justifyContent: 'center',
29 | padding: theme.spacing(1, 2)
30 | }
31 | }))
32 |
33 | const UpgradePlan = props => {
34 | const { className, ...rest } = props
35 |
36 | const classes = useStyles()
37 |
38 | return (
39 |
42 |
43 |
46 |
47 |
48 |
49 |
53 | We are Sorry! Group Chat is only available to Premium Members
54 |
55 |
56 |
59 | Upgrade your Subscription to recieve all features including trading signals, group chat, etc.
60 |
61 |
62 |
63 |
64 |
69 | Upgrade Now
70 |
71 |
72 |
73 | )
74 | }
75 |
76 | UpgradePlan.propTypes = {
77 | className: PropTypes.string
78 | }
79 |
80 | export default UpgradePlan
--------------------------------------------------------------------------------
/src/views/web/landing/components/Header/MobileMenu.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import React, { Fragment } from 'react'
3 | import PropTypes from 'prop-types'
4 | import useStyles from './header-style'
5 | import SwipeableDrawer from '@material-ui/core/SwipeableDrawer'
6 | import { Divider, ListItem, List, ListItemText } from '@material-ui/core'
7 |
8 |
9 | import navMenu from './menu'
10 |
11 | const MobileMenu = props => {
12 | const classes = useStyles()
13 | const { toggleDrawer, open } = props
14 |
15 | const userId = localStorage.getItem('userId')
16 |
17 | const SideList = () => (
18 |
23 |
24 |
25 | {navMenu.map((item, index) => (
26 |
33 |
34 |
35 | ))}
36 |
37 |
38 |
39 |
40 |
41 | {userId
42 | ?
43 |
48 |
49 |
50 |
51 | :
52 | {['login', 'register'].map((text, index) => (
53 |
60 |
61 |
62 | ))}
63 | }
64 |
65 |
66 |
67 | )
68 |
69 | return (
70 |
78 |
79 |
80 | )
81 | }
82 |
83 |
84 | MobileMenu.propTypes = {
85 | toggleDrawer: PropTypes.func.isRequired,
86 | open: PropTypes.bool.isRequired,
87 | }
88 |
89 | export default MobileMenu
90 |
--------------------------------------------------------------------------------
/src/views/user/dashboard/components/UpgradePlan.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import React from 'react'
3 | import PropTypes from 'prop-types'
4 | import { Link } from 'react-router-dom'
5 | import { makeStyles } from '@material-ui/styles'
6 | import { Typography, Button } from '@material-ui/core'
7 |
8 | const useStyles = makeStyles(theme => ({
9 | root: {
10 | margin: 50,
11 | padding: 50,
12 | marginTop: 50,
13 | borderRadius: 25,
14 | backgroundColor: theme.palette.background.default
15 | },
16 | media: {
17 | height: 80,
18 | textAlign: 'center',
19 | paddingTop: theme.spacing(2),
20 | '& > img': {
21 | width: 'auto',
22 | height: '100%'
23 | }
24 | },
25 | content: {
26 | padding: theme.spacing(1, 2)
27 | },
28 | actions: {
29 | display: 'flex',
30 | justifyContent: 'center',
31 | padding: theme.spacing(1, 2)
32 | }
33 | }))
34 |
35 | const UpgradePlan = props => {
36 | const { className, ...rest } = props
37 |
38 | const classes = useStyles()
39 |
40 | return (
41 |
44 |
45 |
48 |
49 |
50 |
51 |
55 | We are Sorry! Trade Signals are only available to Basic & Premium Members
56 |
57 |
58 |
61 | Upgrade your Subscription to recieve all features including trading signals, group chat, etc.
62 |
63 |
64 |
65 |
66 |
71 | Upgrade Now
72 |
73 |
74 |
75 | )
76 | }
77 |
78 | UpgradePlan.propTypes = {
79 | className: PropTypes.string
80 | }
81 |
82 | export default UpgradePlan
--------------------------------------------------------------------------------
/src/views/admin/signals/Signals.js:
--------------------------------------------------------------------------------
1 | import { useSnackbar } from 'notistack'
2 | import { makeStyles } from '@material-ui/styles'
3 | import React, { useEffect, useState } from 'react'
4 | import { Grid, Dialog, CircularProgress, DialogContent } from '@material-ui/core'
5 |
6 | import { AdminApi } from 'config/Api'
7 | import SignalsTable from './components/SignalsTable'
8 | import FreeSignalsTable from './components/FreeSignalsTable'
9 |
10 | const adminApi = new AdminApi()
11 |
12 | const useStyles = makeStyles(theme => ({
13 | root: {
14 | padding: theme.spacing(4)
15 | }
16 | }))
17 |
18 | const Signals = () => {
19 | const classes = useStyles()
20 | const { enqueueSnackbar } = useSnackbar()
21 |
22 | const adminId = localStorage.getItem('adminId')
23 |
24 | const [isLoading, setIsLoading] = useState(true)
25 | const [signalsState, setSignalsState] = useState([])
26 | const [freeSignalsState, setFreeSignalsState] = useState([])
27 |
28 | useEffect(() => {
29 | fetchSignalsList()
30 | fetchFreeSignalsList()
31 | }, [])
32 |
33 | const fetchFreeSignalsList = async () => {
34 | const fetchFreeSignalsListResult = await adminApi.fetchFreeSignals({ adminId })
35 | if (fetchFreeSignalsListResult.error) {
36 | setIsLoading(false)
37 | return enqueueSnackbar(fetchFreeSignalsListResult.message, { variant: 'error' })
38 | }
39 |
40 | setFreeSignalsState(fetchFreeSignalsListResult.data)
41 | setIsLoading(false)
42 | }
43 |
44 | const fetchSignalsList = async () => {
45 | const fetchSignalsListResult = await adminApi.fetchSignals({ adminId })
46 | if (fetchSignalsListResult.error) {
47 | setIsLoading(false)
48 | return enqueueSnackbar(fetchSignalsListResult.message, { variant: 'error' })
49 | }
50 |
51 | setSignalsState(fetchSignalsListResult.data)
52 | setIsLoading(false)
53 | }
54 |
55 | const reloadData = () => {
56 | fetchSignalsList()
57 | fetchFreeSignalsList()
58 | }
59 |
60 | if (isLoading)
61 | return (
62 |
63 |
64 |
65 |
66 |
67 | )
68 |
69 | return (
70 |
71 |
74 |
80 |
83 |
84 |
85 |
91 |
94 |
95 |
96 |
97 | )
98 | }
99 |
100 | export default Signals
--------------------------------------------------------------------------------
/src/views/web/landing/components/PageNav/PageNav.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import Scrollspy from 'react-scrollspy'
3 | import { Fab, Tooltip } from '@material-ui/core'
4 | import React, { useState, useEffect } from 'react'
5 | import ArrowIcon from '@material-ui/icons/ArrowUpward'
6 | import AnchorLink from 'react-anchor-link-smooth-scroll'
7 |
8 | import navMenu from '../Header/menu'
9 | import useStyles from './pagenav-style'
10 |
11 | function createData(id, name, url) {
12 | return {
13 | id,
14 | url,
15 | name
16 | }
17 | }
18 |
19 | const LinkBtn = React.forwardRef(function LinkBtn(props, ref) {
20 | return
21 | })
22 |
23 | const PageNav = props => {
24 | const [show, setShow] = useState(false)
25 | let flagShow = false
26 |
27 | const handleScroll = () => {
28 | const doc = document.documentElement
29 | const scroll = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)
30 | const newFlagShow = (scroll > 500)
31 | if (flagShow !== newFlagShow) {
32 | setShow(newFlagShow)
33 | flagShow = newFlagShow
34 | }
35 | }
36 |
37 | useEffect(() => {
38 | window.addEventListener('scroll', handleScroll)
39 | }, [])
40 |
41 | const classes = useStyles()
42 | const [menuList] = useState([
43 | createData(1, navMenu[0], '#' + navMenu[0].replace(/ /g, '_')),
44 | createData(2, navMenu[1], '#' + navMenu[1].replace(/ /g, '_')),
45 | createData(3, navMenu[2], '#' + navMenu[2].replace(/ /g, '_')),
46 | createData(4, navMenu[3], '#' + navMenu[3].replace(/ /g, '_')),
47 | createData(5, navMenu[4], '#' + navMenu[4].replace(/ /g, '_')),
48 | createData(6, navMenu[5], '#' + navMenu[5].replace(/ /g, '_')),
49 | createData(6, navMenu[6], '#' + navMenu[6].replace(/ /g, '_')),
50 | ])
51 |
52 | return (
53 |
54 |
60 |
66 |
67 |
68 |
69 |
70 |
71 |
74 | {menuList.map(item => (
75 |
79 |
83 |
84 |
85 |
86 | ))}
87 |
88 |
89 |
90 | )
91 | }
92 |
93 | export default PageNav
94 |
--------------------------------------------------------------------------------
/src/vendors/animate-extends.css:
--------------------------------------------------------------------------------
1 | @-webkit-keyframes fadeInLeftShort {
2 | from {
3 | opacity: 0;
4 | -webkit-transform: translate3d(-5%, 0, 0);
5 | transform: translate3d(-5%, 0, 0);
6 | }
7 |
8 | to {
9 | opacity: 1;
10 | -webkit-transform: translate3d(0, 0, 0);
11 | transform: translate3d(0, 0, 0);
12 | }
13 | }
14 |
15 | @keyframes fadeInLeftShort {
16 | from {
17 | opacity: 0;
18 | -webkit-transform: translate3d(-5%, 0, 0);
19 | transform: translate3d(-5%, 0, 0);
20 | }
21 |
22 | to {
23 | opacity: 1;
24 | -webkit-transform: translate3d(0, 0, 0);
25 | transform: translate3d(0, 0, 0);
26 | }
27 | }
28 |
29 | @-webkit-keyframes fadeInLeftMedium {
30 | from {
31 | opacity: 0;
32 | -webkit-transform: translate3d(-25%, 0, 0);
33 | transform: translate3d(-25%, 0, 0);
34 | }
35 |
36 | to {
37 | opacity: 1;
38 | -webkit-transform: translate3d(0, 0, 0);
39 | transform: translate3d(0, 0, 0);
40 | }
41 | }
42 |
43 | @keyframes fadeInLeftMedium {
44 | from {
45 | opacity: 0;
46 | -webkit-transform: translate3d(-25%, 0, 0);
47 | transform: translate3d(-25%, 0, 0);
48 | }
49 |
50 | to {
51 | opacity: 1;
52 | -webkit-transform: translate3d(0, 0, 0);
53 | transform: translate3d(0, 0, 0);
54 | }
55 | }
56 |
57 | .fadeInLeftShort {
58 | -webkit-animation-name: fadeInLeftMedium;
59 | animation-name: fadeInLeftMedium;
60 | }
61 |
62 | @-webkit-keyframes zoomInShort {
63 | from {
64 | opacity: 0;
65 | -webkit-transform: scale3d(0.8, 0.8, 0.8);
66 | transform: scale3d(0.8, 0.8, 0.8);
67 | }
68 |
69 | 50% {
70 | opacity: 1;
71 | }
72 | }
73 |
74 | @keyframes zoomInShort {
75 | from {
76 | opacity: 0;
77 | -webkit-transform: scale3d(0.9, 0.9, 0.9);
78 | transform: scale3d(0.9, 0.9, 0.9);
79 | }
80 |
81 | 50% {
82 | opacity: 1;
83 | }
84 | }
85 |
86 | .zoomInShort {
87 | -webkit-animation-name: zoomInShort;
88 | animation-name: zoomInShort;
89 | }
90 |
91 | @-webkit-keyframes fadeInUpShort {
92 | from {
93 | opacity: 0;
94 | -webkit-transform: translate3d(0, 10%, 0);
95 | transform: translate3d(0, 100%, 0);
96 | }
97 |
98 | to {
99 | opacity: 1;
100 | -webkit-transform: translate3d(0, 10%, 0);
101 | transform: translate3d(0, 0, 0);
102 | }
103 | }
104 |
105 | @keyframes fadeInUpShort {
106 | from {
107 | opacity: 0;
108 | -webkit-transform: translate3d(0, 10%, 0);
109 | transform: translate3d(0, 10%, 0);
110 | }
111 |
112 | to {
113 | opacity: 1;
114 | -webkit-transform: translate3d(0, 0, 0);
115 | transform: translate3d(0, 0, 0);
116 | }
117 | }
118 |
119 | .fadeInUp {
120 | -webkit-animation-name: fadeInUpShort;
121 | animation-name: fadeInUpShort;
122 | }
--------------------------------------------------------------------------------
/src/views/web/landing/components/Testimonials/Testimonials.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import Carousel from 'react-slick'
3 | import { Typography, Avatar, Paper } from '@material-ui/core'
4 |
5 | import useStyle from './testi-style'
6 | import { useTextAlign } from 'theme/common'
7 |
8 | const testiContent = [
9 | {
10 | text: 'I had very good experience with this guys and I can recommend it to anyone. They go for trade with high probability not just for any trade.',
11 | avatar: 'https://randomuser.me/api/portraits/men/3.jpg',
12 | name: 'James, Dorset, UK'
13 | },
14 | {
15 | text: 'As a member of their signal service, they really know how to trade forex. I like their mid-term trading setup.',
16 | avatar: 'https://randomuser.me/api/portraits/men/75.jpg',
17 | name: 'Sang, Texas, USA'
18 | },
19 | {
20 | text: 'They provide an excellent service with frequent and incredibly reliable Forex signals. Their service is massively helping me along my journey through the trading world!',
21 | avatar: 'https://randomuser.me/api/portraits/women/90.jpg',
22 | name: 'Elliot, United Kingdom'
23 | }
24 | ]
25 |
26 | const Testimonials = () => {
27 | const classes = useStyle()
28 | const align = useTextAlign()
29 | const settings = {
30 | dots: true,
31 | infinite: true,
32 | speed: 500,
33 | slidesToShow: 3,
34 | slidesToScroll: 1,
35 | responsive: [{
36 | breakpoint: 1024,
37 | settings: {
38 | slidesToShow: 3,
39 | slidesToScroll: 3,
40 | infinite: true,
41 | dots: true
42 | }
43 | }, {
44 | breakpoint: 600,
45 | settings: {
46 | slidesToShow: 2,
47 | slidesToScroll: 2
48 | }
49 | }, {
50 | breakpoint: 480,
51 | settings: {
52 | slidesToShow: 1,
53 | slidesToScroll: 1
54 | }
55 | }]
56 | }
57 |
58 | return (
59 |
60 |
61 | Testimonials
62 |
63 |
64 | Curabitur egestas consequat lorem, vel fermentum augue porta id.
65 |
66 |
67 |
68 |
69 | {testiContent.map((item, index) => (
70 |
71 |
72 |
73 | {item.text}
74 |
75 |
76 |
80 |
81 | {item.name}
82 |
83 |
84 |
85 |
86 | ))}
87 |
88 |
89 |
90 | )
91 | }
92 |
93 | export default Testimonials
94 |
--------------------------------------------------------------------------------
/src/views/web/landing/components/AnimateSlider/AnimateSlider.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import Slider from 'react-animated-slider'
3 | import { Typography, Button, Grid } from '@material-ui/core'
4 |
5 | import useStyles from './slider-style'
6 |
7 | import 'vendors/animate-slider.css'
8 | import 'react-animated-slider/build/horizontal.css'
9 |
10 | const AnimateSlider = () => {
11 | const classes = useStyles()
12 |
13 | return (
14 |
15 |
19 |
22 |
23 |
World Class Trading Signals
24 |
25 |
99% Successful signal trades. We provide all you need to make the right trades.
26 |
27 |
28 |
29 |
30 |
31 | Subscribe Now
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
42 |
43 |
World Class Trading Signals
44 |
45 |
99% Successful signal trades. We provide all you need to make the right trades.
46 |
47 |
48 |
49 |
50 |
51 | Subscribe Now
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
62 |
63 |
World Class Trading Signals
64 |
65 |
99% Successful signal trades. We provide all you need to make the right trades.
66 |
67 |
68 |
69 |
70 |
71 | Subscribe Now
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 | )
82 | }
83 |
84 | AnimateSlider.getInitialProps = async () => ({
85 | namespacesRequired: ['common', 'starter-landing']
86 | })
87 |
88 | export default AnimateSlider
89 |
--------------------------------------------------------------------------------
/src/views/web/landing/Landing.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import PropTypes from 'prop-types'
3 | import React, { Fragment } from 'react'
4 | import { CssBaseline, Hidden, makeStyles, Container } from '@material-ui/core'
5 |
6 | import FAQ from './components/FAQ'
7 | import Header from './components/Header'
8 | import Footer from './components/Footer'
9 | import Counter from './components/Counter'
10 | import Contact from './components/Contact'
11 | import Feature from './components/Feature'
12 | import PageNav from './components/PageNav'
13 | import Pricing from './components/Pricing'
14 | import Subscribe from './components/Subscribe'
15 | import Testimonials from './components/Testimonials'
16 | import AnimateSlider from './components/AnimateSlider'
17 | import Disclaimer from './components/Disclaimer/Disclaimer'
18 |
19 | const sectionMargin = margin => (margin * 15)
20 | const useStyles = makeStyles(theme => ({
21 | mainWrap: {
22 | position: 'relative',
23 | width: '100%',
24 | overflow: 'hidden',
25 | },
26 | spaceBottom: {
27 | marginBottom: sectionMargin(theme.spacing())
28 | },
29 | spaceTop: {
30 | paddingTop: sectionMargin(theme.spacing())
31 | },
32 | containerWrap: {
33 | marginTop: theme.spacing(15)
34 | }
35 | }))
36 |
37 | const Landing = props => {
38 | const classes = useStyles()
39 |
40 | return (
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
55 |
56 |
61 |
62 |
65 |
66 |
69 |
70 |
73 |
74 |
77 |
78 |
81 |
82 |
85 |
86 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 | )
99 | }
100 |
101 | Landing.getInitialProps = async () => ({
102 | namespacesRequired: ['common']
103 | })
104 |
105 | Landing.propTypes = {
106 | onToggleDir: PropTypes.func.isRequired,
107 | onToggleDark: PropTypes.func.isRequired,
108 | }
109 |
110 | export default Landing
--------------------------------------------------------------------------------
/src/views/user/dashboard/components/TradePie.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import React from 'react'
3 | import PropTypes from 'prop-types'
4 | import { Doughnut } from 'react-chartjs-2'
5 | import { makeStyles, useTheme } from '@material-ui/styles'
6 | import { Card, CardHeader, CardContent, Divider, Typography } from '@material-ui/core'
7 |
8 | const useStyles = makeStyles(theme => ({
9 | root: {
10 | height: '100%'
11 | },
12 | chartContainer: {
13 | height: '300px',
14 | position: 'relative'
15 | },
16 | stats: {
17 | display: 'flex',
18 | flexWrap: 'wrap',
19 | justifyContent: 'center',
20 | marginTop: theme.spacing(2)
21 | },
22 | option: {
23 | textAlign: 'center',
24 | padding: theme.spacing(1)
25 | },
26 | optionIcon: {
27 | color: theme.palette.icon
28 | }
29 | }))
30 |
31 | const TradePie = props => {
32 | const { className, focus, ...rest } = props
33 |
34 | const theme = useTheme()
35 | const classes = useStyles()
36 |
37 | const data = {
38 | datasets: [
39 | {
40 | borderWidth: 8,
41 | data: focus.data,
42 | borderColor: theme.palette.background.paper,
43 | hoverBorderColor: theme.palette.background.paper,
44 | backgroundColor: focus.backgroundColor
45 | }
46 | ],
47 | labels: focus.labels
48 | }
49 |
50 | const options = {
51 | animation: false,
52 | responsive: true,
53 | cutoutPercentage: 70,
54 | maintainAspectRatio: false,
55 | legend: {
56 | display: true,
57 | labels: {
58 | fontColor: theme.palette.text.primary
59 | }
60 | },
61 | layout: {
62 | padding: 0
63 | },
64 | tooltips: {
65 | mode: 'index',
66 | enabled: false,
67 | borderWidth: 1,
68 | intersect: false,
69 | borderColor: theme.palette.divider,
70 | backgroundColor: theme.palette.background.paper,
71 | titleFontColor: theme.palette.text.primary,
72 | bodyFontColor: theme.palette.text.secondary,
73 | footerFontColor: theme.palette.text.secondary
74 | }
75 | }
76 |
77 | return (
78 |
81 |
84 |
85 |
86 |
87 |
88 |
89 |
92 |
93 |
94 |
95 | {
96 | focus.labels.map((option, i) => (
97 |
100 |
102 | {option}
103 |
104 |
105 |
108 | {focus.data[i]}%
109 |
110 |
111 | ))
112 | }
113 |
114 |
115 |
116 | )
117 | }
118 |
119 | TradePie.propTypes = {
120 | className: PropTypes.string
121 | }
122 |
123 | export default TradePie
--------------------------------------------------------------------------------
/src/views/web/landing/components/Pricing/Pricing.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import StarIcon from '@material-ui/icons/StarBorder'
3 | import { Button, Card, CardActions, CardContent, CardHeader, Grid, Typography, Container } from '@material-ui/core'
4 |
5 | import useStyles from './pricing-style'
6 |
7 | const tiers = [
8 | {
9 | price: '0',
10 | durartion: '/wk',
11 | title: 'Free Membership',
12 | buttonVariant: 'contained',
13 | buttonText: 'Sign up for free',
14 | description: ['Unlimited Trading Tools', 'Real Time Market News & Calendar']
15 | },
16 | {
17 | price: '2.99',
18 | durartion: '/wk',
19 | title: 'Basic Membership',
20 | buttonVariant: 'contained',
21 | buttonText: 'Sign up for free',
22 | description: ['Unlimited Trading Tools', 'Real Time Market News & Calendar', 'Unlimited Trading Signals']
23 | },
24 | {
25 | price: '9.99',
26 | durartion: '/wk',
27 | title: 'Premium Membership',
28 | buttonVariant: 'contained',
29 | buttonText: 'Sign up for free',
30 | description: ['Unlimited Trading Tools', 'Real Time Market News & Calendar', 'Unlimited Trading Signals', 'Unlimited Community Chat Access']
31 | }
32 | ]
33 |
34 | export default function Pricing() {
35 | const classes = useStyles()
36 |
37 | return (
38 |
39 |
40 | Pricing and Plan
41 |
42 |
43 |
44 | We provide various membership packages for all your needs, you can start with our FREE membership simply by signing up and upgrading anytime you feel like it!
45 |
46 |
47 |
48 |
49 | {tiers.map(tier => (
50 |
51 |
52 | : null} />
59 |
60 |
61 |
62 |
63 | $ {tier.price}
64 |
65 |
66 |
67 | {tier.durartion}
68 |
69 |
70 |
71 | {tier.description.map((item, i) => (
72 |
73 | {item}
74 | ))}
75 |
76 |
77 |
78 |
79 | {tier.buttonText}
80 |
81 |
82 |
83 |
84 | ))}
85 |
86 |
87 |
88 | )
89 | }
90 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "megatrade-website",
3 | "version": "1.0.0",
4 | "description": "Mega Trade Website - World Class Trading Signals",
5 | "keywords": [
6 | "react",
7 | "finance",
8 | "reactjs",
9 | "trading",
10 | "dashboard",
11 | "Megatrade",
12 | "Mega Trade",
13 | "trading signals",
14 | "dashboard-react"
15 | ],
16 | "homepage": "https://megatrade.world",
17 | "bugs": {
18 | "email": "abdeen.mohamed@outlook.com",
19 | "url": "https://github.com/AbdeenM/megatrade-website/issues"
20 | },
21 | "license": "MIT",
22 | "author": {
23 | "name": "Abdeen Mohamed",
24 | "url": "https://github.com/AbdeenM",
25 | "email": "abdeen.mohamed@outlook.com"
26 | },
27 | "main": "index.js",
28 | "repository": {
29 | "type": "git",
30 | "url": "https://github.com/AbdeenM/megatrade-website"
31 | },
32 | "dependencies": {
33 | "@material-ui/core": "^4.11.0",
34 | "@material-ui/icons": "^4.9.1",
35 | "@material-ui/styles": "^4.10.0",
36 | "animate.css": "^3.7.2",
37 | "axios": "^0.19.2",
38 | "chart.js": "^2.9.3",
39 | "clsx": "^1.1.1",
40 | "history": "^4.10.1",
41 | "i18n-react": "^0.7.0",
42 | "moment": "^2.29.1",
43 | "node-sass": "^4.14.1",
44 | "notistack": "^0.9.17",
45 | "prop-types": "^15.7.2",
46 | "react": "^16.14.0",
47 | "react-anchor-link-smooth-scroll": "^1.0.12",
48 | "react-animated-slider": "^2.0.0",
49 | "react-chartjs-2": "^2.10.0",
50 | "react-clock": "^2.4.0",
51 | "react-countup": "^4.3.3",
52 | "react-dom": "^16.14.0",
53 | "react-facebook-login": "^4.1.1",
54 | "react-ga": "^2.7.0",
55 | "react-google-login": "^5.1.21",
56 | "react-ionicons": "^3.1.4",
57 | "react-live-clock": "^4.0.5",
58 | "react-material-ui-form-validator": "^2.1.1",
59 | "react-paypal-button-v2": "^2.6.2",
60 | "react-perfect-scrollbar": "^1.5.8",
61 | "react-router-dom": "^5.2.0",
62 | "react-scripts": "^3.4.3",
63 | "react-scroll-parallax": "^2.3.4",
64 | "react-scrollspy": "^3.4.3",
65 | "react-slick": "^0.25.2",
66 | "react-tradingview-widget": "^1.3.2",
67 | "react-wow": "^1.0.0",
68 | "serve": "^11.3.2",
69 | "socket.io-client": "^2.3.1",
70 | "use-socket.io-client": "^1.1.0",
71 | "uuid": "^3.4.0",
72 | "validate.js": "^0.13.1"
73 | },
74 | "scripts": {
75 | "test": "react-scripts test",
76 | "dev": "react-scripts start",
77 | "start": "serve -s build",
78 | "build": "react-scripts build",
79 | "eject": "react-scripts eject"
80 | },
81 | "private": true,
82 | "eslintConfig": {
83 | "extends": "react-app"
84 | },
85 | "browserslist": {
86 | "production": [
87 | ">0.2%",
88 | "not dead",
89 | "not op_mini all"
90 | ],
91 | "development": [
92 | "last 1 chrome version",
93 | "last 1 firefox version",
94 | "last 1 safari version"
95 | ]
96 | }
97 | }
98 |
--------------------------------------------------------------------------------
/public/images/features-broker.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/src/views/web/landing/components/Counter/Counter.js:
--------------------------------------------------------------------------------
1 | import ReactWOW from 'react-wow'
2 | import CountUp from 'react-countup'
3 | import React, { useState } from 'react'
4 | import { Typography, Grid, Container } from '@material-ui/core'
5 |
6 | import useStyles from './counter-style'
7 |
8 | import PipsIcon from '@material-ui/icons/TrendingUp'
9 | import TradesIcon from '@material-ui/icons/SwapCalls'
10 | import ExperienceIcon from '@material-ui/icons/Schedule'
11 | import UsersIcon from '@material-ui/icons/SupervisorAccount'
12 |
13 | const Counter = () => {
14 | const classes = useStyles()
15 | const [play, setPlay] = useState(false)
16 |
17 | const countup = (val, isPlay) => (
18 |
19 | {isPlay ? : 0}
20 |
21 | )
22 |
23 | const handlePlay = () => {
24 | setTimeout(() => { setPlay(true) }, 500)
25 | }
26 |
27 | return (
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | {countup(200, play)}+
39 |
40 |
41 |
42 | Subscribers this month
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 | ~{countup(9, play)}
57 |
58 |
59 |
60 | Trades per day
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 | ~{countup(450, play)}
75 |
76 |
77 |
78 | Pips per month
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 | {countup(10, play)}+
93 |
94 |
95 |
96 | Years of Experience
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 | )
106 | }
107 |
108 | export default Counter
--------------------------------------------------------------------------------
/src/App.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ReactGA from 'react-ga'
3 | import Validate from 'validate.js'
4 | import { Chart } from 'react-chartjs-2'
5 | import { Router } from 'react-router-dom'
6 | import { SnackbarProvider } from 'notistack'
7 | import { createBrowserHistory } from 'history'
8 | import { CssBaseline, MuiThemeProvider, createMuiTheme } from '@material-ui/core'
9 |
10 | import theme from './theme'
11 | import Routes from './Routes'
12 | import './assets/scss/index.scss'
13 | import Chartjs from './helpers/chartjs'
14 | import Constants from 'config/Constants'
15 | import Validators from './common/Validators'
16 |
17 | import 'animate.css/animate.css'
18 | import 'vendors/slick/slick.css'
19 | import 'vendors/animate-extends.css'
20 | import 'vendors/page-transition.css'
21 | import 'vendors/slick/slick-theme.css'
22 | import 'react-perfect-scrollbar/dist/css/styles.css'
23 |
24 | const browserHistory = createBrowserHistory()
25 |
26 | Chart.helpers.extend(Chart.elements.Rectangle.prototype, {
27 | draw: Chartjs.draw
28 | })
29 |
30 | Validate.validators = {
31 | ...Validate.validators,
32 | ...Validators
33 | }
34 |
35 | let themeType = 'light'
36 | if (typeof Storage !== 'undefined')
37 | themeType = localStorage.getItem('theme') || 'light'
38 |
39 | export default class App extends React.Component {
40 | state = {
41 | mainTheme: {
42 | ...theme('main', themeType)
43 | },
44 | isFirstMessage: true,
45 | botResponse: 'Thank you for visiting our website! One of our team members will get back to you shortly. In the mean time feel free to create a free account and check out your personal dashboard.'
46 | }
47 |
48 | componentDidMount = () => {
49 | ReactGA.initialize(Constants.GOOGLE_TRACKING_ID, {
50 | gaOptions: {
51 | userId: localStorage.getItem('userId') || '-'
52 | }
53 | })
54 |
55 | ReactGA.pageview(window.location.pathname + window.location.search)
56 |
57 | browserHistory.listen(location => {
58 | ReactGA.set({ page: location.pathname })
59 | ReactGA.pageview(location.pathname)
60 | })
61 | }
62 |
63 | toggleDarkTheme = () => {
64 | const { mainTheme } = this.state
65 | const newPaletteType = mainTheme.palette.type === 'light' ? 'dark' : 'light';
66 | localStorage.setItem('theme', mainTheme.palette.type === 'light' ? 'dark' : 'light')
67 |
68 | this.setState({
69 | mainTheme: {
70 | ...theme('main', newPaletteType),
71 | direction: theme.direction
72 | }
73 | })
74 | }
75 |
76 | toggleDirection = dir => {
77 | const { mainTheme } = this.state
78 | document.dir = dir
79 |
80 | this.setState({
81 | mainTheme: {
82 | ...mainTheme,
83 | direction: dir,
84 | palette: {
85 | ...mainTheme.palette
86 | }
87 | }
88 | })
89 | }
90 |
91 | render() {
92 | const { mainTheme } = this.state
93 | const appTheme = createMuiTheme(mainTheme)
94 |
95 | return (
96 |
97 |
98 |
99 |
102 |
103 |
104 |
107 |
108 |
109 |
110 |
111 | )
112 | }
113 | }
--------------------------------------------------------------------------------
/src/views/admin/account/Account.js:
--------------------------------------------------------------------------------
1 | import { useSnackbar } from 'notistack'
2 | import { makeStyles } from '@material-ui/styles'
3 | import React, { useEffect, useState } from 'react'
4 | import { Grid, Dialog, CircularProgress, DialogContent } from '@material-ui/core'
5 |
6 | import Password from '../account/components/Password'
7 | import AccountDetails from './components/AccountDetails'
8 | import AccountProfile from './components/AccountProfile'
9 |
10 | import { AdminApi } from 'config/Api'
11 |
12 | const adminApi = new AdminApi()
13 |
14 | const useStyles = makeStyles(theme => ({
15 | root: {
16 | padding: theme.spacing(4)
17 | }
18 | }))
19 |
20 | const Account = props => {
21 | const classes = useStyles()
22 | const { enqueueSnackbar } = useSnackbar()
23 |
24 | const adminId = localStorage.getItem('adminId')
25 |
26 | const [isLoading, setIsLoading] = useState(true)
27 | const [profileState, setProfileState] = useState({
28 | city: '',
29 | email: '',
30 | avatar: '',
31 | number: '',
32 | country: '',
33 | lastName: '',
34 | firstName: ''
35 | })
36 |
37 | useEffect(() => { fetchProfileDetails() }, [])
38 |
39 | const fetchProfileDetails = async () => {
40 | const fetchAccountResult = await adminApi.fetchAccount({ adminId })
41 |
42 | if (fetchAccountResult.error) {
43 | setIsLoading(false)
44 | return enqueueSnackbar(fetchAccountResult.message, { variant: 'error' })
45 | }
46 |
47 | setProfileState(profileState => ({
48 | ...profileState,
49 | city: fetchAccountResult.data.city || '',
50 | email: fetchAccountResult.data.email || '',
51 | avatar: fetchAccountResult.data.avatar || '',
52 | number: fetchAccountResult.data.number || '',
53 | country: fetchAccountResult.data.country || '',
54 | lastName: fetchAccountResult.data.lastName || '',
55 | firstName: fetchAccountResult.data.firstName || ''
56 | }))
57 |
58 | setIsLoading(false)
59 | }
60 |
61 | const reloadData = () => fetchProfileDetails()
62 |
63 | if (isLoading)
64 | return (
65 |
66 |
67 |
68 |
69 |
70 | )
71 |
72 | return (
73 |
74 |
77 |
83 |
93 |
94 |
95 |
101 |
102 |
103 |
104 |
110 |
120 |
121 |
122 |
123 | )
124 | }
125 |
126 | export default Account
--------------------------------------------------------------------------------
/src/vendors/slick/slick-theme.css:
--------------------------------------------------------------------------------
1 | /* Slider */
2 | .slick-loading .slick-list
3 | {
4 | background: #fff url('./ajax-loader.gif') center center no-repeat;
5 | }
6 |
7 | /* Icons */
8 | /* Arrows */
9 | .slick-prev,
10 | .slick-next
11 | {
12 | font-size: 0;
13 | line-height: 0;
14 |
15 | position: absolute;
16 | top: 50%;
17 |
18 | display: block;
19 |
20 | width: 20px;
21 | height: 20px;
22 | padding: 0;
23 | -webkit-transform: translate(0, -50%);
24 | -ms-transform: translate(0, -50%);
25 | transform: translate(0, -50%);
26 |
27 | cursor: pointer;
28 |
29 | color: transparent;
30 | border: none;
31 | outline: none;
32 | background: transparent;
33 | }
34 | .slick-prev:hover,
35 | .slick-prev:focus,
36 | .slick-next:hover,
37 | .slick-next:focus
38 | {
39 | color: transparent;
40 | outline: none;
41 | background: transparent;
42 | }
43 | .slick-prev:hover:before,
44 | .slick-prev:focus:before,
45 | .slick-next:hover:before,
46 | .slick-next:focus:before
47 | {
48 | opacity: 1;
49 | }
50 | .slick-prev.slick-disabled:before,
51 | .slick-next.slick-disabled:before
52 | {
53 | opacity: .25;
54 | }
55 |
56 | .slick-prev:before,
57 | .slick-next:before
58 | {
59 | font-family: 'slick';
60 | font-size: 20px;
61 | line-height: 1;
62 |
63 | opacity: .75;
64 | color: white;
65 |
66 | -webkit-font-smoothing: antialiased;
67 | -moz-osx-font-smoothing: grayscale;
68 | }
69 |
70 | .slick-prev
71 | {
72 | left: -25px;
73 | }
74 | .slick-prev:before
75 | {
76 | content: '←';
77 | }
78 |
79 | .slick-next
80 | {
81 | right: -25px;
82 | }
83 | .slick-next:before
84 | {
85 | content: '→';
86 | }
87 |
88 | /* Dots */
89 | .slick-dotted.slick-slider
90 | {
91 | margin-bottom: 30px;
92 | }
93 |
94 | .slick-dots
95 | {
96 | position: absolute;
97 | bottom: -25px;
98 |
99 | display: block;
100 |
101 | width: 100%;
102 | padding: 0;
103 | margin: 0;
104 |
105 | list-style: none;
106 |
107 | text-align: center;
108 | }
109 | .slick-dots li
110 | {
111 | position: relative;
112 |
113 | display: inline-block;
114 |
115 | width: 20px;
116 | height: 20px;
117 | margin: 0 5px;
118 | padding: 0;
119 |
120 | cursor: pointer;
121 | }
122 | .slick-dots li button
123 | {
124 | font-size: 0;
125 | line-height: 0;
126 |
127 | display: block;
128 |
129 | width: 20px;
130 | height: 20px;
131 | padding: 5px;
132 |
133 | cursor: pointer;
134 |
135 | color: transparent;
136 | border: 0;
137 | outline: none;
138 | background: transparent;
139 | }
140 | .slick-dots li button:hover,
141 | .slick-dots li button:focus
142 | {
143 | outline: none;
144 | }
145 | .slick-dots li button:hover:before,
146 | .slick-dots li button:focus:before
147 | {
148 | opacity: 1;
149 | }
150 | .slick-dots li button:before
151 | {
152 | font-family: 'slick';
153 | font-size: 6px;
154 | line-height: 20px;
155 |
156 | position: absolute;
157 | top: 0;
158 | left: 0;
159 |
160 | width: 20px;
161 | height: 20px;
162 |
163 | content: '•';
164 | text-align: center;
165 |
166 | opacity: .25;
167 | color: black;
168 |
169 | -webkit-font-smoothing: antialiased;
170 | -moz-osx-font-smoothing: grayscale;
171 | }
172 | .slick-dots li.slick-active button:before
173 | {
174 | opacity: .75;
175 | color: black;
176 | }
177 |
--------------------------------------------------------------------------------
/src/views/web/landing/components/Feature/MainFeature.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { Grid, Typography } from '@material-ui/core'
3 |
4 | import useStyles from './feature-style'
5 |
6 | const MainFeature = () => {
7 | const classes = useStyles()
8 |
9 | return (
10 |
11 |
12 |
13 |
14 |
18 |
19 |
20 | TRADING SIGNALS
21 |
22 |
23 |
24 | Recieve world class signals real time from your personal dashboard, emails, SMS and any method you prefer.
25 |
26 |
27 |
28 |
29 |
30 |
31 |
35 |
36 |
37 | TRADING NEWS
38 |
39 |
40 |
41 | Keep up with the latest trends with our economic calendar that shows traders and investors all the important events which affect financial markets. It will help understand and forecast the right trading choices.
42 |
43 |
44 |
45 |
46 |
47 |
48 |
52 |
53 |
54 | TRADING ACADEMY
55 |
56 |
57 |
58 | We provide Step by step guides and tutorials that help everyone learn the tricks of the trade, weither you are a beginner or an expret at the trade we have something for all levels to help them make profitable trades.
59 |
60 |
61 |
62 |
63 |
64 |
65 |
69 |
70 |
71 | TRADING ACADEMY
72 |
73 |
74 |
75 | Weither you know brokers or don’t, worry not we got you! We have access to various elite brokers helping you choose reliable trading services provider as it is crucial for your tradering success.
76 |
77 |
78 |
79 |
80 |
81 |
82 |
86 |
87 |
88 | 360 CUSTOMER SUPPORT
89 |
90 |
91 |
92 | We believe your success is our success so put you above all, our friendly customer support team would be more than happy to answer all your questions at any time, if you require technical or trading help let us know and we will put you in touch with an expert.
93 |
94 |
95 |
96 |
97 |
98 | )
99 | }
100 |
101 | export default MainFeature
102 |
--------------------------------------------------------------------------------
/src/views/web/landing/components/Footer/footer-style.js:
--------------------------------------------------------------------------------
1 | import { makeStyles } from '@material-ui/core/styles'
2 |
3 | const footerStyles = makeStyles(theme => ({
4 | link: {
5 | margin: theme.spacing(1, 1.5),
6 | },
7 | footer: {
8 | position: 'relative',
9 | marginTop: theme.spacing(8),
10 | paddingTop: theme.spacing(3),
11 | paddingBottom: theme.spacing(8),
12 | '& ul': {
13 | margin: 0,
14 | padding: 0,
15 | },
16 | '& li': {
17 | listStyle: 'none',
18 | marginBottom: theme.spacing(),
19 | '& a': {
20 | fontSize: 14,
21 | textDecoration: 'none !important',
22 | '&:hover': {
23 | color: theme.palette.primary.main
24 | }
25 | }
26 | },
27 | '& p': {
28 | [theme.breakpoints.down('sm')]: {
29 | padding: theme.spacing(0, 3)
30 | }
31 | }
32 | },
33 | title: {
34 | color: theme.palette.type === 'dark' ? theme.palette.primary.light : theme.palette.primary.dark,
35 | fontSize: 14,
36 | textTransform: 'uppercase',
37 | marginBottom: theme.spacing(3),
38 | fontWeight: theme.typography.fontWeightBold,
39 | },
40 | logo: {
41 | textAlign: 'left',
42 | display: 'flex',
43 | alignItems: 'center',
44 | marginBottom: theme.spacing(3),
45 | '& img': {
46 | filter: 'grayscale(1) contrast(0.5) brightness(1.5)',
47 | width: 48,
48 | marginRight: theme.spacing(),
49 | },
50 | '& h6': {
51 | color: theme.palette.text.disabled,
52 | },
53 | [theme.breakpoints.down('sm')]: {
54 | padding: theme.spacing(0, 3)
55 | }
56 | },
57 | footerDesc: {
58 | display: 'block',
59 | fontSize: 14,
60 | marginBottom: theme.spacing(2)
61 | },
62 | socmed: {
63 | display: 'flex',
64 | justifyContent: 'center',
65 | marginBottom: theme.spacing(4),
66 | '& button': {
67 | margin: theme.spacing(),
68 | color: theme.palette.type === 'dark' ? theme.palette.primary.light : theme.palette.primary.dark,
69 | background: theme.palette.divider,
70 | width: 36,
71 | height: 36,
72 | '& svg': {
73 | fill: theme.palette.type === 'dark' ? theme.palette.primary.light : theme.palette.primary.dark,
74 | }
75 | },
76 | '& svg': {
77 | width: 24,
78 | height: 24
79 | }
80 | },
81 | icon: {
82 | '& + div': {
83 | background: 'none !important',
84 | padding: theme.spacing(1.5, 1.5, 1.5, 4),
85 | width: 'calc(100% - 32px)',
86 | }
87 | },
88 | selectLang: {
89 | margin: '0 auto',
90 | width: 200,
91 | display: 'inherit',
92 | marginTop: theme.spacing(2),
93 | color: theme.palette.type === 'dark' ? theme.palette.primary.light : theme.palette.primary.dark,
94 | '& $icon': {
95 | top: 21,
96 | position: 'relative',
97 | },
98 | '& fieldset': {
99 | boxShadow: '0 1.5px 12px 2px rgba(0, 0, 0, 0.06)',
100 | border: `1px solid ${theme.palette.type === 'dark' ? theme.palette.primary.light : theme.palette.primary.main} !important`,
101 | '& legend': {
102 | top: 5,
103 | position: 'relative',
104 | borderTop: `1px solid ${theme.palette.type === 'dark' ? theme.palette.primary.light : theme.palette.primary.main}`
105 | }
106 | }
107 | },
108 | siteMapItem: {
109 | [theme.breakpoints.down('md')]: {
110 | paddingBottom: '0 !important',
111 | paddingTop: '0 !important',
112 | }
113 | },
114 | accordionRoot: {
115 | background: 'none',
116 | boxShadow: 'none',
117 | maxWidth: 480,
118 | margin: '0 auto',
119 | marginTop: theme.spacing(2),
120 | },
121 | accordionContent: {
122 | margin: 0
123 | },
124 | accordionIcon: {
125 | padding: 0
126 | }
127 | }))
128 |
129 | export default footerStyles
130 |
--------------------------------------------------------------------------------
/src/views/user/dashboard/components/LatestAlerts.js:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 | import React from 'react'
3 | import moment from 'moment'
4 | import PropTypes from 'prop-types'
5 | import { Bar } from 'react-chartjs-2'
6 | import { makeStyles } from '@material-ui/styles'
7 | import { Card, CardHeader, CardContent, Divider, Button, useTheme } from '@material-ui/core'
8 |
9 | const useStyles = makeStyles(() => ({
10 | root: {},
11 | chartContainer: {
12 | height: 400,
13 | position: 'relative'
14 | },
15 | actions: {
16 | justifyContent: 'flex-end'
17 | }
18 | }))
19 |
20 | const LatestAlerts = props => {
21 | const { className, alerts, ...rest } = props
22 |
23 | const classes = useStyles()
24 | const theme = useTheme()
25 |
26 | const getWeekDays = () => {
27 | let weekDays = []
28 | const startOfWeek = moment().startOf('week')
29 |
30 | Array(7).fill().map((each, i) => weekDays.push(moment(startOfWeek).add(i, 'days')))
31 |
32 | const labels = []
33 | weekDays.forEach(weekday => {
34 | labels.push(moment(weekday).format('DD MMM'))
35 | })
36 |
37 | return labels
38 | }
39 |
40 | const data = {
41 | labels: getWeekDays(),
42 | datasets: [
43 | {
44 | label: 'This year',
45 | backgroundColor: theme.palette.primary.main,
46 | data: alerts.thisYear
47 | },
48 | {
49 | label: 'Last year',
50 | backgroundColor: theme.palette.neutral,
51 | data: alerts.lastYear
52 | }
53 | ]
54 | }
55 |
56 | const options = {
57 | animation: false,
58 | responsive: true,
59 | cornerRadius: 20,
60 | legend: { display: false },
61 | maintainAspectRatio: false,
62 | tooltips: {
63 | mode: 'index',
64 | enabled: true,
65 | borderWidth: 1,
66 | intersect: false,
67 | borderColor: theme.palette.divider,
68 | backgroundColor: theme.palette.background.paper,
69 | titleFontColor: theme.palette.text.primary,
70 | bodyFontColor: theme.palette.text.secondary,
71 | footerFontColor: theme.palette.text.secondary
72 | },
73 | layout: { padding: 0 },
74 | scales: {
75 | xAxes: [
76 | {
77 | barThickness: 12,
78 | barPercentage: 0.5,
79 | maxBarThickness: 10,
80 | categoryPercentage: 0.5,
81 | ticks: {
82 | fontColor: theme.palette.text.secondary
83 | },
84 | gridLines: {
85 | display: false,
86 | drawBorder: false
87 | }
88 | }
89 | ],
90 | yAxes: [
91 | {
92 | ticks: {
93 | min: 0,
94 | beginAtZero: true,
95 | fontColor: theme.palette.text.secondary
96 | },
97 | gridLines: {
98 | borderDash: [2],
99 | drawBorder: false,
100 | borderDashOffset: [2],
101 | color: theme.palette.divider,
102 | zeroLineBorderDash: [2],
103 | zeroLineBorderDashOffset: [2],
104 | zeroLineColor: theme.palette.divider
105 | }
106 | }
107 | ]
108 | }
109 | }
110 |
111 | return (
112 |
115 |
122 | Last 7 days
123 |
124 | } />
125 |
126 |
127 |
128 |
129 |
130 |
133 |
134 |
135 |
136 | )
137 | }
138 |
139 | LatestAlerts.propTypes = {
140 | className: PropTypes.string
141 | }
142 |
143 | export default LatestAlerts
--------------------------------------------------------------------------------
/src/views/web/landing/components/Feature/feature-style.js:
--------------------------------------------------------------------------------
1 | import { makeStyles } from '@material-ui/core/styles'
2 |
3 | const decoration = theme => ({
4 | background: theme.palette.type === 'dark' ? theme.palette.primary.dark : theme.palette.primary.light,
5 | borderRadius: '50%',
6 | width: 250,
7 | height: 250,
8 | position: 'absolute',
9 | top: -20,
10 | left: 60,
11 | opacity: 0.5
12 | })
13 |
14 | const featureStyles = makeStyles(theme => ({
15 | pageSection: {
16 | marginBottom: theme.spacing(20)
17 | },
18 | featureWrap: {
19 | position: 'relative'
20 | },
21 | icon: {},
22 | image: {
23 | height: 55
24 | },
25 | featureList: {
26 | textAlign: 'center',
27 | '& h5': {
28 | margin: `${theme.spacing(3)}px 0`
29 | },
30 | '& $icon': {
31 | fill: theme.palette.primary.main,
32 | width: 100,
33 | height: 100
34 | }
35 | },
36 | title: {},
37 | text: {},
38 | img: {},
39 | imgFull: {},
40 | last: {},
41 | featureMore: {
42 | position: 'relative',
43 | '& $title': {
44 | marginBottom: theme.spacing(3)
45 | },
46 | '& $text': {
47 | fontSize: 22
48 | },
49 | '& $img': {
50 | position: 'relative',
51 | width: 400,
52 | maxWidth: '98%',
53 | '& img': {
54 | width: '100%'
55 | }
56 | },
57 | '& $imgFull': {
58 | position: 'relative',
59 | textAlign: 'center',
60 | maxWidth: 800,
61 | margin: '0 auto',
62 | [theme.breakpoints.down('sm')]: {
63 | maxWidth: '98%',
64 | },
65 | marginTop: theme.spacing(5),
66 | '& img': {
67 | width: '100%'
68 | }
69 | },
70 | },
71 | featureItem: {
72 | position: 'relative',
73 | marginBottom: theme.spacing(20),
74 | '&$last': {
75 | marginBottom: 0,
76 | }
77 | },
78 | deco1: {
79 | ...decoration(theme)
80 | },
81 | deco2: {
82 | ...decoration(theme),
83 | width: 450,
84 | height: 450,
85 | top: 40,
86 | left: 'calc(50% - 350px)',
87 | },
88 | parallaxWrap: {
89 | position: 'absolute',
90 | width: '100%',
91 | height: '100%',
92 | overflow: 'hidden',
93 | top: 0,
94 | left: 0,
95 | zIndex: 0,
96 | [theme.breakpoints.down('md')]: {
97 | display: 'none'
98 | },
99 | '& figure > div': {
100 | height: 1000,
101 | width: '100%',
102 | position: 'relative',
103 | top: 500,
104 | }
105 | },
106 | bannerParallaxWrap: {
107 | height: 800,
108 | width: '100%',
109 | position: 'absolute',
110 | display: 'block',
111 | '& figure': {
112 | height: 800,
113 | width: '100%',
114 | display: 'block',
115 | position: 'absolute',
116 | },
117 | '& figure > div': {
118 | height: 800,
119 | width: '100%',
120 | display: 'block',
121 | position: 'absolute',
122 | top: 0,
123 | }
124 | },
125 | parallaxVertical: {
126 | width: '100%',
127 | height: '100%',
128 | position: 'absolute',
129 | [theme.breakpoints.up('lg')]: {
130 | transform: 'scale(0.3)'
131 | }
132 | },
133 | parallaxDot: {
134 | top: -20,
135 | fill: theme.palette.text.hint,
136 | width: 845,
137 | height: 1099,
138 | opacity: 0.4,
139 | left: -370
140 | },
141 | parallaxTriangle: {
142 | top: 100,
143 | outline: theme.palette.text.hint,
144 | opacity: 0.1,
145 | width: 902,
146 | height: 1042,
147 | stroke: theme.palette.text.hint,
148 | fill: 'transparent',
149 | strokeWidth: 50,
150 | right: -210
151 | },
152 | parallaxCircle: {
153 | top: 250,
154 | width: 600,
155 | height: 570,
156 | opacity: 0.1,
157 | stroke: theme.palette.text.hint,
158 | fill: 'transparent',
159 | strokeWidth: 40,
160 | right: 40
161 | },
162 | }))
163 |
164 | export default featureStyles
165 |
--------------------------------------------------------------------------------
/src/views/user/groupChat/GroupChat.js:
--------------------------------------------------------------------------------
1 | import { useSnackbar } from 'notistack'
2 | import useSocket from 'use-socket.io-client'
3 | import { makeStyles } from '@material-ui/styles'
4 | import React, { useEffect, useState } from 'react'
5 | import { Grid, Dialog, CircularProgress, DialogContent, Hidden } from '@material-ui/core'
6 |
7 | import { UserApi } from 'config/Api'
8 | import Constants from 'config/Constants'
9 | import GroupChatLive from './components/GroupChatLive'
10 | import GroupChatMembers from './components/GroupChatMembers'
11 |
12 | const userApi = new UserApi()
13 |
14 | const useStyles = makeStyles(theme => ({
15 | root: {
16 | padding: theme.spacing(3)
17 | },
18 | content: {
19 | marginTop: 20,
20 | textAlign: 'center'
21 | },
22 | contentInner: {
23 | marginTop: 20
24 | },
25 | image: {
26 | width: 560,
27 | marginTop: 50,
28 | maxWidth: '100%',
29 | display: 'inline-block'
30 | }
31 | }))
32 |
33 | const GroupChat = () => {
34 | const classes = useStyles()
35 | const { enqueueSnackbar } = useSnackbar()
36 |
37 | const userId = localStorage.getItem('userId')
38 |
39 | const [isPaid, setIsPaid] = useState(false)
40 | const [isLoading, setIsLoading] = useState(true)
41 | const [socket] = useSocket(`${Constants.SERVER_URL}/chat-group`, {
42 | autoConnect: false
43 | })
44 | const [availableUsersState, setAvailableUsersState] = useState([])
45 | const [groupChatHistoryState, setGroupChatHistoryState] = useState([])
46 | const [profileState, setProfileState] = useState({
47 | avatar: '',
48 | fullName: ''
49 | })
50 |
51 | useEffect(() => { fetchProfileDetails() }, [])
52 |
53 | const fetchProfileDetails = async () => {
54 | const fetchAccountResult = await userApi.fetchAccount({ userId })
55 |
56 | if (fetchAccountResult.error) {
57 | setIsLoading(false)
58 | return enqueueSnackbar(fetchAccountResult.message, { variant: 'error' })
59 | }
60 |
61 | setProfileState(profileState => ({
62 | ...profileState,
63 | avatar: fetchAccountResult.data.avatar || '',
64 | fullName: fetchAccountResult.data.firstName + ' ' + fetchAccountResult.data.lastName || ''
65 | }))
66 |
67 | if (fetchAccountResult.data.membership !== 'Free Membership')
68 | setIsPaid(true)
69 |
70 | setIsLoading(false)
71 | }
72 |
73 | useEffect(() => {
74 | if (isPaid && !isLoading) {
75 | socket.connect()
76 |
77 | socket.emit('userJoined', {
78 | id: userId,
79 | avatar: profileState.avatar,
80 | fullName: profileState.fullName
81 | })
82 |
83 | socket.on('availableUsers', data => setAvailableUsersState(data))
84 |
85 | socket.on('chatHistory', data => setGroupChatHistoryState(data))
86 |
87 | socket.on('message', data => setGroupChatHistoryState(groupChatHistoryState => ([...groupChatHistoryState, data])))
88 | }
89 | }, [isPaid, isLoading])
90 |
91 | if (isLoading)
92 | return (
93 |
94 |
95 |
96 |
97 |
98 | )
99 |
100 | return (
101 |
102 |
106 |
107 |
113 |
116 |
117 |
118 |
119 |
125 |
130 |
131 |
132 |
133 | )
134 | }
135 |
136 | export default GroupChat
--------------------------------------------------------------------------------