Merge pull request #84 from Algoteers/feature/client-sendgrid

Feature/client sendgrid
This commit is contained in:
Barry Low authored and GitHub committed 2018-11-12 23:46:55 -08:00
commit 080a7a1a3d
19 files changed
+427 -77

No files matched your search

+19 -22
View File
@@ -4530,7 +4530,7 @@
},
"regjsgen": {
"version": "0.2.0",
"resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
"resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
"integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
"dev": true
},
@@ -4779,8 +4779,7 @@
"decode-uri-component": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
"dev": true
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
},
"deep-equal": {
"version": "1.0.1",
@@ -4924,7 +4923,7 @@
"dependencies": {
"pify": {
"version": "2.3.0",
"resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
"dev": true
}
@@ -5103,7 +5102,7 @@
"dependencies": {
"domelementtype": {
"version": "1.1.3",
"resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
"integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs="
}
}
@@ -5700,7 +5699,7 @@
},
"pify": {
"version": "2.3.0",
"resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
"dev": true
},
@@ -7841,7 +7840,7 @@
"dependencies": {
"pify": {
"version": "2.3.0",
"resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
"dev": true
}
@@ -7994,7 +7993,7 @@
},
"fast-deep-equal": {
"version": "1.1.0",
"resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
"integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
"dev": true
},
@@ -8262,7 +8261,7 @@
},
"html-webpack-harddisk-plugin": {
"version": "0.2.0",
"resolved": "http://registry.npmjs.org/html-webpack-harddisk-plugin/-/html-webpack-harddisk-plugin-0.2.0.tgz",
"resolved": "https://registry.npmjs.org/html-webpack-harddisk-plugin/-/html-webpack-harddisk-plugin-0.2.0.tgz",
"integrity": "sha1-RlQUpTQhm2nB/YEntYX42GiX+y0=",
"dev": true,
"requires": {
@@ -8301,7 +8300,7 @@
},
"htmlparser2": {
"version": "3.3.0",
"resolved": "http://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz",
"integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=",
"dev": true,
"requires": {
@@ -9773,7 +9772,7 @@
},
"jest-get-type": {
"version": "22.4.3",
"resolved": "http://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz",
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz",
"integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==",
"dev": true
},
@@ -10828,7 +10827,7 @@
},
"media-typer": {
"version": "0.3.0",
"resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
"dev": true
},
@@ -15844,7 +15843,7 @@
},
"fast-deep-equal": {
"version": "1.1.0",
"resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
"integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
"dev": true
},
@@ -16088,7 +16087,7 @@
},
"fast-deep-equal": {
"version": "1.1.0",
"resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
"integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
"dev": true
},
@@ -16420,7 +16419,6 @@
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/query-string/-/query-string-6.2.0.tgz",
"integrity": "sha512-5wupExkIt8RYL4h/FE+WTg3JHk62e6fFPWtAZA9J5IWK1PfTfKkMS93HBUHcFpeYi9KsY5pFbh+ldvEyaz5MyA==",
"dev": true,
"requires": {
"decode-uri-component": "^0.2.0",
"strict-uri-encode": "^2.0.0"
@@ -17980,7 +17978,7 @@
},
"pify": {
"version": "2.3.0",
"resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
"dev": true
},
@@ -18790,7 +18788,7 @@
},
"safe-regex": {
"version": "1.1.0",
"resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
"resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
"integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
"dev": true,
"requires": {
@@ -20077,8 +20075,7 @@
"strict-uri-encode": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz",
"integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=",
"dev": true
"integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY="
},
"string-length": {
"version": "2.0.0",
@@ -20191,7 +20188,7 @@
},
"strip-eof": {
"version": "1.0.0",
"resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
"integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
"dev": true
},
@@ -20364,7 +20361,7 @@
},
"tar": {
"version": "2.2.1",
"resolved": "http://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
"resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
"integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
"dev": true,
"requires": {
@@ -22108,7 +22105,7 @@
"dependencies": {
"pify": {
"version": "2.3.0",
"resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
"dev": true
}
+2 -1
View File
@@ -23,7 +23,7 @@
"devDependencies": {
"@advancedalgos/events-client": "^0.0.4",
"@advancedalgos/key-vault-client": "^0.0.21",
"@advancedalgos/teams-client": "^0.0.26",
"@advancedalgos/teams-client": "^0.0.27",
"@advancedalgos/users-client": "^0.0.21",
"@advancedalgos/web-components": "0.0.13",
"@babel/core": "^7.1.2",
@@ -90,6 +90,7 @@
"npm": "^6.4.1",
"optimize-css-assets-webpack-plugin": "^5.0.1",
"prop-types": "^15.6.2",
"query-string": "^6.2.0",
"react": "^16.6.1",
"react-apollo": "^2.2.4",
"react-dom": "^16.6.1",
+8 -1
View File
@@ -12,7 +12,7 @@ import './styles/styles.scss'
import { client } from './graphql/apollo'
import Auth from './auth'
import { Layout, Home, Charts, Callback } from './views'
import { Layout, Home, Charts, Callback, EmailSignupConfirm } from './views'
import Users from '@advancedalgos/users-client'
import Teams from '@advancedalgos/teams-client'
@@ -39,6 +39,13 @@ export const MasterApp = (props) => (
return <Callback {...props} />
}}
/>
<Route
path='/email-verification'
render={props => {
console.log(props.location)
return <EmailSignupConfirm {...props} tokenParam={props.location.search} />
}}
/>
<Route
path='/charts'
render={props => <Charts {...props} auth={auth} />}
+7 -2
View File
@@ -1,7 +1,12 @@
import React from 'react'
import { MessageCard } from '@advancedalgos/web-components'
import { BannerTopBar } from '../common'
const Callback = () => <MessageCard message='Authenticating...' />
const Callback = () => <BannerTopBar
size='big'
title=''
text='Authenticating...'
backgroundUrl='https://aacorporatesitedevelop.azurewebsites.net/img/photos/superalgos-platform.jpg'
/>
export default Callback
+1 -1
View File
@@ -2,7 +2,7 @@ import React, { Component } from 'react'
import { withStyles } from '@material-ui/core/styles'
import { connect } from 'react-redux'
import BannerTopBar from '../BannerTopBar'
import { BannerTopBar } from '../common'
const styles = theme => ({
'@global': {
@@ -1,18 +1,29 @@
import React from 'react'
import PropTypes from 'prop-types'
import Typography from '@material-ui/core/Typography'
const BannerTopBar = ({
size,
backgroundUrl,
title,
text
text,
children
}) => (
<div className={`bannerTopBar ${size}`} style={backgroundUrl ? { backgroundImage: `url(${backgroundUrl})` } : {}}>
<div className='caption'>
<Typography className='title' variant='h1' align='center'>{title}</Typography>
<Typography className='text' variant='h2' align='center'>{text}</Typography>
{children}
</div>
</div>
)
BannerTopBar.propTypes = {
children: PropTypes.node,
backgroundUrl: PropTypes.string,
size: PropTypes.string,
title: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),
text: PropTypes.oneOfType([PropTypes.string, PropTypes.array])
}
export default BannerTopBar
+3
View File
@@ -0,0 +1,3 @@
import BannerTopBar from './components/BannerTopBar'
export { BannerTopBar }
@@ -0,0 +1,138 @@
import React, { Component } from 'react'
import PropTypes from 'prop-types'
import { withStyles } from '@material-ui/core/styles'
import withWidth from '@material-ui/core/withWidth'
import { Mutation } from 'react-apollo'
import Typography from '@material-ui/core/Typography'
import Grid from '@material-ui/core/Grid'
import Button from '@material-ui/core/Button'
import InputBase from '@material-ui/core/InputBase'
import styles from './styles'
import NEWSLETTER_SIGNUP from '../graphql/NewsletterSignup'
import { isEmpty } from '../../../utils/js-helpers'
export class SignupForm extends Component {
constructor (props) {
super(props)
this.handleChange = this.handleChange.bind(this)
this.handleSubmit = this.handleSubmit.bind(this)
this.validate = this.validate.bind(this)
this.state = {
email: '',
emailError: '',
success: false
}
}
render () {
const {
classes,
width,
alignCenter,
displayTitle,
displayIntro
} = this.props
return (
<Mutation
mutation={NEWSLETTER_SIGNUP}
>
{(NewsletterSignup, { loading, error, data }) => {
return (
<Grid container className={classes.signupRight} direction='column' justify={alignCenter ? 'center' : 'flex-start'}>
{displayTitle && <Typography variant='h4' className={classes.textWhite} gutterBottom>Stay in touch!</Typography>}
{displayIntro && <Typography variant='subtitle1' className={classes.textWhite} gutterBottom>Opt-in our mailing list to stay up to date with the Advanced Algos Project.</Typography>}
<form id='email-signup' action='#' className='form-inline' autoComplete='off'>
<Typography
variant='subtitle1'
className={classes.textSuccess}
gutterBottom
style={{
display: this.state.success ? 'block' : 'none',
textAlign: alignCenter ? 'center' : 'inherit'
}}
>
Thank you for signing up! Please check your email and click on the confirmation link to complete the signup process.
</Typography>
<Grid container className={classes.signupContainer} justify={(width === 'xs' || alignCenter) ? 'center' : 'flex-start'}>
<InputBase
id='email'
placeholder='Enter your email'
classes={{
root: classes.signupInputRoot,
input: classes.signupInput
}}
onChange={this.handleChange}
value={this.state.email}
/>
<Button
id='email-submit'
className={classes.signupInputSubmit}
onClick={e => {
this.handleSubmit(e, NewsletterSignup)
}}
>
Submit
</Button>
</Grid>
</form>
</Grid>
)
}}
</Mutation>
)
}
validate (data) {
const errors = {}
switch (data.id) {
case 'email':
if (data.value === '') {
this.setState({ emailError: 'Please enter an email address' })
} else {
this.setState({ emailError: '' })
}
break
default:
}
return errors
}
handleChange (e) {
let id = e.target.id
let value = e.target.value
let error = this.validate({ id, value })
switch (id) {
case 'email':
if (!isEmpty(error)) this.setState({ emailError: error })
this.setState({ email: value })
break
default:
}
}
async handleSubmit (e, NewsletterSignup) {
e.preventDefault()
console.log('NewsletterSignup handleSubmit: ', this.state.email)
const signupResponse = await NewsletterSignup({ variables: { email: this.state.email } })
console.log('NewsletterSignup: ', signupResponse)
if (signupResponse.data.master_NewsletterSignup === 'SUCCESS') this.setState({ email: '', success: true })
}
}
SignupForm.propTypes = {
classes: PropTypes.object,
width: PropTypes.string,
alignCenter: PropTypes.bool,
displayTitle: PropTypes.bool,
displayIntro: PropTypes.bool
}
const SignupFormWithStyles = withStyles(styles)(SignupForm)
export default withWidth()(SignupFormWithStyles)
@@ -0,0 +1,82 @@
import React from 'react'
import PropTypes from 'prop-types'
import { BannerTopBar } from '../../common'
import SignupForm from './SignupForm'
export class SignupVerifyResponse extends React.Component {
componentDidMount () {
const { mutate } = this.props
mutate()
};
render () {
const { loading, error, data } = this.props
let BannerTitle = ''
let BannerText = ''
let displayForm = false
console.log('SignupVerifyResponse:', loading, error, data)
if (error) {
if (error.message === 'GraphQL error: Error: Token Expired. Please resubmit email address.') {
BannerText = [
<strong key='EmailSignupConfirm-error-b1'>
Newsletter Signup Error: Verification Token Expired
</strong>,
<br key='EmailSignupConfirm-error-br' />,
'Please resubmit your email address and a new token will be emailed to you.',
<br key='EmailSignupConfirm-error-br2' />,
' We apologize for the inconvenience, but we highly value your seurity and privacy.'
]
displayForm = true
} else {
BannerText = ['Newsletter Signup Error: ', <br key='EmailSignupConfirm-error-br' />, error.message]
}
return (
<BannerTopBar
size='big'
title={BannerTitle}
text={BannerText}
backgroundUrl='https://aacorporatesitedevelop.azurewebsites.net/img/photos/superalgos-platform.jpg'
/>
)
}
if (loading && !error) {
BannerText = ['Processing newsletter sign-up...', <br key='EmailSignupConfirm-br' />, 'Thank you for opting-in to recieve updates about the Advanced Algos project!']
}
if (data !== undefined && data !== null) {
console.log(data)
if (data.master_NewsletterSignupVerify === 'SUCCESS') {
return (
<React.Fragment>
<BannerTopBar
size='big'
title='Mailing Sign-Up Complete!'
text='We look forward to keeping you up-to-date on the Advanced Algos project.'
backgroundUrl='https://aacorporatesitedevelop.azurewebsites.net/img/photos/superalgos-platform.jpg'
>
{displayForm && <SignupForm alignCenter />}
</BannerTopBar>
</React.Fragment>
)
}
} else {
return (
<BannerTopBar
size='big'
title=''
text='Newsletter Signup Error'
backgroundUrl='https://aacorporatesitedevelop.azurewebsites.net/img/photos/superalgos-platform.jpg'
/>
)
}
}
}
SignupVerifyResponse.propTypes = {
mutate: PropTypes.function,
loading: PropTypes.bool,
error: PropTypes.object,
data: PropTypes.object
}
export default SignupVerifyResponse
@@ -0,0 +1,65 @@
import lightGreen from '@material-ui/core/colors/lightGreen'
const styles = theme => ({
textLight: {
color: theme.palette.primary.light
},
textWhite: {
color: theme.palette.common.white
},
textSuccess: {
color: lightGreen[400]
},
copyright: {
paddingTop: theme.spacing.unit * 3
},
linkLight: {
color: theme.palette.secondary.main,
textDecoration: 'none'
},
signupRight: {
marginTop: theme.spacing.unit * 2,
[theme.breakpoints.down('xs')]: {
textAlign: 'center'
}
},
signupContainer: {
marginBottom: theme.spacing.unit * 2,
[theme.breakpoints.down('xs')]: {
textAlign: 'center'
}
},
signupInput: {
borderRadius: 4,
backgroundColor: theme.palette.common.white,
border: '1px solid #ced4da',
fontSize: 16,
padding: '10px 12px',
transition: theme.transitions.create(['border-color', 'box-shadow']),
marginRight: theme.spacing.unit * 1
},
signupInputSubmit: {
boxShadow: 'none',
textTransform: 'none',
fontSize: 16,
lineHeight: '1.1875em',
color: theme.palette.common.white,
padding: '10px 12px',
backgroundColor: '#5bc0de',
borderColor: '#46b8da',
'&:hover': {
backgroundColor: '#31b0d5',
borderColor: '#269abc'
},
'&:active': {
boxShadow: 'none',
backgroundColor: '#0062cc',
borderColor: '#005cbf'
},
'&:focus': {
boxShadow: '0 0 0 0.2rem rgba(0,123,255,.5)'
}
}
})
export default styles
@@ -0,0 +1,10 @@
/* eslint-disable no-unused-vars */
import gql from 'graphql-tag'
const NEWSLETTER_SIGNUP = gql`
mutation NewsletterSignup($email: String!) {
master_NewsletterSignup(email: $email)
}
`
export default NEWSLETTER_SIGNUP
@@ -0,0 +1,10 @@
/* eslint-disable no-unused-vars */
import gql from 'graphql-tag'
const NEWSLETTER_SIGNUP_VERIFY = gql`
mutation NewsletterSignupVerify($token: String!) {
master_NewsletterSignupVerify(token: $token)
}
`
export default NEWSLETTER_SIGNUP_VERIFY
@@ -0,0 +1,59 @@
import React from 'react'
import PropTypes from 'prop-types'
import queryString from 'query-string'
import { Mutation } from 'react-apollo'
import { BannerTopBar } from '../common'
import SignupVerifyResponse from './components/SignupVerifyResponse'
import NEWSLETTER_SIGNUP_VERIFY from './graphql/NewsletterSignupVerify'
export const EmailSignupConfirm = ({ tokenParam }) => {
let token
let BannerText = ''
if (tokenParam !== '' && tokenParam !== null) {
const values = queryString.parse(tokenParam)
token = values.token
} else {
BannerText = [
'Newsletter Signup Error: Invalid Token',
<br key='EmailSignupConfirm-error-br' />,
'Please try signing up again! We apologize for the inconvenience,',
<br key='EmailSignupConfirm-error-br2' />,
'but we highly value your seurity and privacy.'
]
return (
<BannerTopBar
size='big'
title=''
text={BannerText}
backgroundUrl='https://aacorporatesitedevelop.azurewebsites.net/img/photos/superalgos-platform.jpg'
/>
)
}
console.log(token)
return (
<Mutation
mutation={NEWSLETTER_SIGNUP_VERIFY}
variables={{ token: token }}
>
{(NewsletterSignupVerify, { loading, error, data }) => {
return (
<SignupVerifyResponse
mutate={NewsletterSignupVerify}
loading={loading}
error={error}
data={data}
/>
)
}
}
</Mutation>
)
}
EmailSignupConfirm.propTypes = {
tokenParam: PropTypes.string
}
export default EmailSignupConfirm
+1 -1
View File
@@ -1,5 +1,5 @@
import React, { Component } from 'react'
import BannerTopBar from '../BannerTopBar'
import { BannerTopBar } from '../common'
import { Typography } from '@material-ui/core'
class Home extends Component {
+2 -1
View File
@@ -2,5 +2,6 @@ import Home from './home'
import Charts from './charts'
import Callback from './callback'
import Layout from './layout'
import EmailSignupConfirm from './email-verification'
export { Layout, Home, Charts, Callback }
export { Layout, Home, Charts, Callback, EmailSignupConfirm }
+3 -20
View File
@@ -9,12 +9,12 @@ import { connect } from 'react-redux'
import Typography from '@material-ui/core/Typography'
import Grid from '@material-ui/core/Grid'
import Button from '@material-ui/core/Button'
import InputBase from '@material-ui/core/InputBase'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { faFacebookF, faTelegramPlane, faTwitter } from '@fortawesome/free-brands-svg-icons'
import styles from './styles'
import SignupForm from '../../email-verification/components/SignupForm'
import aalogo from '../../../assets/advanced-algos/aa-logo-horiz-dark.svg'
class Footer extends Component {
@@ -48,24 +48,7 @@ class Footer extends Component {
</Grid>
<Grid item xs={12} sm={1} md={1} />
<Grid item xs={12} sm={7} md={6}>
<Grid container className={classes.signupRight} direction='column'>
<Typography variant='h4' className={classes.textWhite} gutterBottom>Stay in touch!</Typography>
<Typography variant='subtitle1' className={classes.textWhite} gutterBottom>Opt-in our mailing list to stay up to date with the Advanced Algos Project.</Typography>
<form id='email-signup' action='#' className='form-inline' autoComplete='off'>
<Typography variant='body2' className={classes.textSuccess} gutterBottom>Thank you for your interest! We'll keep you informed</Typography>
<Grid container className={classes.signupContainer} justify={width === 'xs' ? 'center' : 'flex-start'}>
<InputBase
id='footer-input'
placeholder='Enter your email'
classes={{
root: classes.footerInputRoot,
input: classes.footerInput
}}
/>
<Button id='email-submit' className={classes.footerInputSubmit}>Submit</Button>
</Grid>
</form>
</Grid>
<SignupForm displayTitle displayIntro />
<Typography variant='subtitle1' className={classes.textWhite} style={{ textAlign: width === 'xs' ? 'center' : '' }}>Meet us on Social Networks:</Typography>
<Grid container justify={width === 'xs' ? 'center' : 'flex-start'}>
<Link to='https://t.me/advancedalgoscommunity' title='Join us on Telgram' className={classes.linkLight}>
+1 -1
View File
@@ -27,7 +27,7 @@ const teamsMenus = {
title: 'Teams',
to: '/teams',
submenus: [
{ title: 'All teams', to: '/teams', icon: Search },
{ title: 'Explore teams', to: '/teams/explore', icon: Search },
{ title: 'Your teams', to: '/teams/manage-teams', icon: Group, authenticated: true },
{ title: 'Team members', to: '/teams/team-members', icon: People, authenticated: true },
{ title: 'Financial beings', to: '/teams/financial-beings', icon: Adb, authenticated: true },
+1 -17
View File
@@ -90,16 +90,6 @@ async function run () {
resolvers
})
const defaultQuery = `{
teams_Teams{
edges{
node{
name
}
}
}
}
`
const app = express()
app.use('/graphql',
@@ -168,13 +158,7 @@ async function run () {
settings: {
'editor.theme': 'dark',
'editor.cursorShape': 'line'
},
tabs: [
{
endpoint: process.env.GRAPHQL_API_URL,
query: defaultQuery
}
]
}
}
})
+3 -9
View File
@@ -15,12 +15,10 @@ if (dev){
export default {
async master_NewsletterSignup(parent, { email }, ctx, info) {
logger.info('master_NewsletterSignup params email:')
logger.info(email)
const token = jwt.sign({ email: email }, API_KEY, { expiresIn: '1d' })
let origin = 'https://advancedalgos.net'
const params = '/email-verification?token='
if (dev){
origin = 'http://localhost:4100'
}
const headers = {
'Content-Type': 'application/json',
@@ -82,7 +80,7 @@ export default {
async master_NewsletterSignupVerify(parent, { token }, ctx, info){
let origin = 'https://app.advancedalgos.net'
if (dev){
origin = 'http://localhost:4100'
origin = 'http://localhost:3100'
}
const headers = {
'Content-Type': 'application/json',
@@ -160,10 +158,6 @@ export default {
return subscribe
},
async master_Contact(parent, { email, subject, message, recaptcha }, ctx, info) {
let origin = 'https://advancedalgos.net'
if (dev){
origin = 'http://localhost:4000'
}
const headers = {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin' : origin,