diff --git a/public/images/integrations/aws-ses.svg b/public/images/integrations/aws-ses.svg new file mode 100644 index 00000000000..c7ba2447001 --- /dev/null +++ b/public/images/integrations/aws-ses.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/modules/settings/engages/components/Settings.tsx b/src/modules/settings/engages/components/Settings.tsx deleted file mode 100644 index 43a5e7a2e8f..00000000000 --- a/src/modules/settings/engages/components/Settings.tsx +++ /dev/null @@ -1,140 +0,0 @@ -import Button from 'modules/common/components/Button'; -import { FormControl } from 'modules/common/components/form'; -import Form from 'modules/common/components/form/Form'; -import FormGroup from 'modules/common/components/form/Group'; -import ControlLabel from 'modules/common/components/form/Label'; -import HeaderDescription from 'modules/common/components/HeaderDescription'; -import { IButtonMutateProps, IFormProps } from 'modules/common/types'; -import { __ } from 'modules/common/utils'; -import ActionBar from 'modules/layout/components/ActionBar'; -import Wrapper from 'modules/layout/components/Wrapper'; -import React from 'react'; -import { Link } from 'react-router-dom'; -import { ContentBox } from '../../styles'; -import { IEngageConfig } from '../types'; - -type Props = { - engagesConfigDetail: IEngageConfig; - renderButton: (props: IButtonMutateProps) => JSX.Element; -}; - -type State = { - secretAccessKey?: string; - accessKeyId?: string; - region?: string; -}; - -class List extends React.Component { - constructor(props: Props) { - super(props); - - const { engagesConfigDetail } = props; - - this.state = { - secretAccessKey: engagesConfigDetail.secretAccessKey || '', - accessKeyId: engagesConfigDetail.accessKeyId || '', - region: engagesConfigDetail.region || '' - }; - } - - generateDoc = values => { - return values; - }; - - renderContent = (formProps: IFormProps) => { - const { renderButton } = this.props; - const { values, isSubmitted } = formProps; - const breadcrumb = [ - { title: __('Settings'), link: '/settings' }, - { title: __('General') } - ]; - - const { engagesConfigDetail } = this.props; - - const actionFooter = ( - - - - - - {renderButton({ - name: 'engagesConfigDetail', - values: this.generateDoc(values), - isSubmitted, - object: this.props.engagesConfigDetail - })} - - } - /> - ); - - const content = ( - - } - actionBar={ - - } - /> - } - content={ - - - AWS-SES Access key ID - - - - - AWS-SES Secret access key - - - - - AWS-SES Region - - - - } - footer={actionFooter} - center={true} - /> - ); - - return content; - }; - - render() { - return
; - } -} - -export default List; diff --git a/src/modules/settings/engages/graphql/index.ts b/src/modules/settings/engages/graphql/index.ts deleted file mode 100644 index 8cff0604ab6..00000000000 --- a/src/modules/settings/engages/graphql/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import mutations from './mutations'; -import queries from './queries'; - -export { queries, mutations }; diff --git a/src/modules/settings/engages/graphql/mutations.ts b/src/modules/settings/engages/graphql/mutations.ts deleted file mode 100644 index b2e87131aab..00000000000 --- a/src/modules/settings/engages/graphql/mutations.ts +++ /dev/null @@ -1,13 +0,0 @@ -const engagesConfigSave = ` - mutation engagesConfigSave($secretAccessKey: String!, $accessKeyId: String!, $region: String!) { - engagesConfigSave(secretAccessKey: $secretAccessKey, accessKeyId: $accessKeyId, region: $region) { - accessKeyId - secretAccessKey - region - } - } -`; - -export default { - engagesConfigSave -}; diff --git a/src/modules/settings/engages/graphql/queries.ts b/src/modules/settings/engages/graphql/queries.ts deleted file mode 100644 index c7003dcaa29..00000000000 --- a/src/modules/settings/engages/graphql/queries.ts +++ /dev/null @@ -1,13 +0,0 @@ -const engagesConfigDetail = ` - query engagesConfigDetail { - engagesConfigDetail { - accessKeyId - secretAccessKey - region - } - } -`; - -export default { - engagesConfigDetail -}; diff --git a/src/modules/settings/engages/routes.tsx b/src/modules/settings/engages/routes.tsx deleted file mode 100644 index 770b54509af..00000000000 --- a/src/modules/settings/engages/routes.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import asyncComponent from 'modules/common/components/AsyncComponent'; -import React from 'react'; -import { Route } from 'react-router-dom'; - -const Settings = asyncComponent(() => - import(/* webpackChunkName: "Settings List - Engages" */ './containers/Settings') -); - -const routes = () => ; - -export default routes; diff --git a/src/modules/settings/engages/types.ts b/src/modules/settings/engages/types.ts deleted file mode 100644 index a99e1ec31ff..00000000000 --- a/src/modules/settings/engages/types.ts +++ /dev/null @@ -1,26 +0,0 @@ -export interface IEngageConfig { - accessKeyId: string; - secretAccessKey: string; - region: string; -} - -// query types -export type EngageConfigQueryResponse = { - engagesConfigDetail: IEngageConfig; - loading: boolean; - refetch: () => void; -}; - -// mutation types - -export type EngagesConfigSaveMutationResponse = { - engagesConfigSave: ( - params: { - variables: { - accessKeyId: string; - secretAccessKey: string; - region: string; - }; - } - ) => Promise; -}; diff --git a/src/modules/settings/integrations/components/engages/Settings.tsx b/src/modules/settings/integrations/components/engages/Settings.tsx new file mode 100644 index 00000000000..4198d162981 --- /dev/null +++ b/src/modules/settings/integrations/components/engages/Settings.tsx @@ -0,0 +1,102 @@ +import Button from 'modules/common/components/Button'; +import { FormControl } from 'modules/common/components/form'; +import Form from 'modules/common/components/form/Form'; +import FormGroup from 'modules/common/components/form/Group'; +import ControlLabel from 'modules/common/components/form/Label'; +import { ModalFooter } from 'modules/common/styles/main'; +import { IButtonMutateProps, IFormProps } from 'modules/common/types'; +import React from 'react'; +import { IEngageConfig } from '../../types'; + +type Props = { + engagesConfigDetail: IEngageConfig; + renderButton: (props: IButtonMutateProps) => JSX.Element; + closeModal: () => void; +}; + +type State = { + secretAccessKey?: string; + accessKeyId?: string; + region?: string; +}; + +class List extends React.Component { + constructor(props: Props) { + super(props); + + const { engagesConfigDetail } = props; + + this.state = { + secretAccessKey: engagesConfigDetail.secretAccessKey || '', + accessKeyId: engagesConfigDetail.accessKeyId || '', + region: engagesConfigDetail.region || '' + }; + } + + generateDoc = values => { + return values; + }; + + renderContent = (formProps: IFormProps) => { + const { engagesConfigDetail, renderButton, closeModal } = this.props; + const { values, isSubmitted } = formProps; + + return ( + <> + + AWS-SES Access key ID + + + + + AWS-SES Secret access key + + + + + AWS-SES Region + + + + + + + {renderButton({ + name: 'engagesConfigDetail', + values: this.generateDoc(values), + isSubmitted, + object: this.props.engagesConfigDetail + })} + + + ); + }; + + render() { + return ; + } +} + +export default List; diff --git a/src/modules/settings/integrations/components/store/Entry.tsx b/src/modules/settings/integrations/components/store/Entry.tsx index 5a4acefdbea..78e6e8125f6 100644 --- a/src/modules/settings/integrations/components/store/Entry.tsx +++ b/src/modules/settings/integrations/components/store/Entry.tsx @@ -5,6 +5,7 @@ import Facebook from 'modules/settings/integrations/containers/facebook/Form'; import Gmail from 'modules/settings/integrations/containers/google/Gmail'; import React from 'react'; import { Link } from 'react-router-dom'; +import Settings from '../../containers/engages/Settings'; import KnowledgeBase from '../../containers/knowledgebase/Form'; import Lead from '../../containers/lead/Form'; import { Box, IntegrationItem, Type } from './styles'; @@ -71,6 +72,20 @@ class Entry extends React.Component { ); } + if (createModal === 'sesconfig') { + const trigger = + {__('Add')}; + + const content = props => ; + + return ( + + ); + } + if (createModal === 'knowledgeBase') { const trigger = + {__('Add')}; diff --git a/src/modules/settings/integrations/components/store/Row.tsx b/src/modules/settings/integrations/components/store/Row.tsx index 6639c92916f..fcb52bcb47b 100644 --- a/src/modules/settings/integrations/components/store/Row.tsx +++ b/src/modules/settings/integrations/components/store/Row.tsx @@ -50,7 +50,7 @@ class Row extends React.Component { }; toggleBox = selectedKind => { - if (!selectedKind) { + if (!selectedKind || selectedKind === 'amazon-ses') { return false; } diff --git a/src/modules/settings/integrations/constants.ts b/src/modules/settings/integrations/constants.ts index 1505be15f8f..686df8f3a70 100755 --- a/src/modules/settings/integrations/constants.ts +++ b/src/modules/settings/integrations/constants.ts @@ -136,6 +136,15 @@ export const INTEGRATIONS = [ logo: '/images/integrations/knowledge-base.png', createModal: 'knowledgeBase', createUrl: '/settings/integrations/knowledgeBase' + }, + { + name: 'Engage config', + description: + 'Set up your custome amazon simple email service account here', + inMessenger: false, + kind: 'amazon-ses', + logo: '/images/integrations/aws-ses.svg', + createModal: 'sesconfig' } ] }, diff --git a/src/modules/settings/engages/containers/Settings.tsx b/src/modules/settings/integrations/containers/engages/Settings.tsx similarity index 76% rename from src/modules/settings/engages/containers/Settings.tsx rename to src/modules/settings/integrations/containers/engages/Settings.tsx index a64904a1740..bca9727d521 100644 --- a/src/modules/settings/engages/containers/Settings.tsx +++ b/src/modules/settings/integrations/containers/engages/Settings.tsx @@ -1,25 +1,32 @@ import gql from 'graphql-tag'; import ButtonMutate from 'modules/common/components/ButtonMutate'; import Spinner from 'modules/common/components/Spinner'; -import { IButtonMutateProps } from 'modules/common/types'; +import { IButtonMutateProps, IRouterProps } from 'modules/common/types'; import { withProps } from 'modules/common/utils'; import React from 'react'; import { compose, graphql } from 'react-apollo'; -import Settings from '../components/Settings'; -import { mutations, queries } from '../graphql'; +import { withRouter } from 'react-router'; +import Settings from '../../components/engages/Settings'; +import { mutations, queries } from '../../graphql'; import { EngageConfigQueryResponse, EngagesConfigSaveMutationResponse, IEngageConfig -} from '../types'; +} from '../../types'; + +type Props = { + closeModal: () => void; +}; type FinalProps = { engagesConfigDetailQuery: EngageConfigQueryResponse; -} & EngagesConfigSaveMutationResponse; +} & IRouterProps & + Props & + EngagesConfigSaveMutationResponse; class SettingsContainer extends React.Component { render() { - const { engagesConfigDetailQuery } = this.props; + const { engagesConfigDetailQuery, closeModal } = this.props; if (engagesConfigDetailQuery.loading) { return ; @@ -45,6 +52,7 @@ class SettingsContainer extends React.Component { const updatedProps = { renderButton, + closeModal, engagesConfigDetail: engagesConfigDetailQuery.engagesConfigDetail || {} }; @@ -66,5 +74,5 @@ export default withProps<{}>( name: 'engagesConfigSave' } ) - )(SettingsContainer) + )(withRouter(SettingsContainer)) ); diff --git a/src/modules/settings/integrations/graphql/mutations.ts b/src/modules/settings/integrations/graphql/mutations.ts index ae2870302b3..2b0989a6863 100644 --- a/src/modules/settings/integrations/graphql/mutations.ts +++ b/src/modules/settings/integrations/graphql/mutations.ts @@ -105,6 +105,16 @@ const integrationsRemove = ` } `; +const engagesConfigSave = ` + mutation engagesConfigSave($secretAccessKey: String!, $accessKeyId: String!, $region: String!) { + engagesConfigSave(secretAccessKey: $secretAccessKey, accessKeyId: $accessKeyId, region: $region) { + accessKeyId + secretAccessKey + region + } + } +`; + const messengerAppsAddLead = ` mutation messengerAppsAddLead( $name: String! @@ -156,6 +166,7 @@ export default { integrationsSaveMessengerConfigs, integrationsSaveMessengerAppearance, integrationsRemove, + engagesConfigSave, messengerAppsAddLead, messengerAppsAddKnowledgebase, messengerAppsRemove, diff --git a/src/modules/settings/integrations/graphql/queries.ts b/src/modules/settings/integrations/graphql/queries.ts index 7dba1fb28aa..7fce0b10540 100644 --- a/src/modules/settings/integrations/graphql/queries.ts +++ b/src/modules/settings/integrations/graphql/queries.ts @@ -112,6 +112,16 @@ const messengerAppsCount = ` } `; +const engagesConfigDetail = ` + query engagesConfigDetail { + engagesConfigDetail { + accessKeyId + secretAccessKey + region + } + } +`; + const fetchApi = ` query integrationsFetchApi($path: String!, $params: JSON!) { integrationsFetchApi(path: $path, params: $params) @@ -125,6 +135,7 @@ export default { integrationDetail, integrationTotalCount, integrations, + engagesConfigDetail, messengerApps, messengerAppsCount }; diff --git a/src/modules/settings/integrations/types.ts b/src/modules/settings/integrations/types.ts index dd690d61123..171b36144b8 100644 --- a/src/modules/settings/integrations/types.ts +++ b/src/modules/settings/integrations/types.ts @@ -153,6 +153,30 @@ export type IntegrationsCountQueryResponse = { loading: boolean; }; +export interface IEngageConfig { + accessKeyId: string; + secretAccessKey: string; + region: string; +} + +export type EngageConfigQueryResponse = { + engagesConfigDetail: IEngageConfig; + loading: boolean; + refetch: () => void; +}; + +export type EngagesConfigSaveMutationResponse = { + engagesConfigSave: ( + params: { + variables: { + accessKeyId: string; + secretAccessKey: string; + region: string; + }; + } + ) => Promise; +}; + export interface IGmailAttachment { filename?: string; mimeType?: string; diff --git a/src/modules/settings/main/components/Settings.tsx b/src/modules/settings/main/components/Settings.tsx index 3ac1249bc1d..2fc41689f34 100644 --- a/src/modules/settings/main/components/Settings.tsx +++ b/src/modules/settings/main/components/Settings.tsx @@ -76,11 +76,6 @@ class Settings extends React.PureComponent { '/images/icons/erxes-14.svg', '/settings/logs' )} - {this.renderBox( - 'Engage Config', - '/images/icons/erxes-08.svg', - '/settings/engages' - )} diff --git a/src/modules/settings/routes.tsx b/src/modules/settings/routes.tsx index 574c7891767..388cfc1d967 100644 --- a/src/modules/settings/routes.tsx +++ b/src/modules/settings/routes.tsx @@ -5,7 +5,6 @@ import BrandsRoutes from './brands/routes'; import ChannelsRoutes from './channels/routes'; import EmailRoutes from './email/routes'; import EmailTemplatesRoutes from './emailTemplates/routes'; -import EngageRoutes from './engages/routes'; import General from './general/routes'; import ImportHistory from './importHistory/routes'; import IntegrationsRoutes from './integrations/routes'; @@ -28,7 +27,6 @@ const routes = () => ( -