diff --git a/client/coral-admin/src/routes/Configure/components/Configure.js b/client/coral-admin/src/routes/Configure/components/Configure.js index efd428378..50c081cac 100644 --- a/client/coral-admin/src/routes/Configure/components/Configure.js +++ b/client/coral-admin/src/routes/Configure/components/Configure.js @@ -1,15 +1,15 @@ -import React, { Component } from 'react'; - -import { Button, List, Item } from 'coral-ui'; -import styles from './Configure.css'; -import StreamSettings from '../containers/StreamSettings'; -import ModerationSettings from '../containers/ModerationSettings'; -import TechSettings from '../containers/TechSettings'; +import React from 'react'; import t from 'coral-framework/services/i18n'; import { can } from 'coral-framework/services/perms'; import PropTypes from 'prop-types'; +import { Button, List, Item } from 'coral-ui'; +import StreamSettings from '../containers/StreamSettings'; +import ModerationSettings from '../containers/ModerationSettings'; +import TechSettings from '../containers/TechSettings'; +import OrganizationSettings from '../containers/OrganizationSettings'; +import styles from './Configure.css'; -export default class Configure extends Component { +class Configure extends React.Component { getSectionComponent(section) { switch (section) { case 'stream': @@ -18,8 +18,11 @@ export default class Configure extends Component { return ModerationSettings; case 'tech': return TechSettings; + case 'organization': + return OrganizationSettings; + default: + return StreamSettings; } - throw new Error(`Unknown section ${section}`); } render() { @@ -54,6 +57,9 @@ export default class Configure extends Component { {t('configure.tech_settings')} + + {t('configure.organization_settings')} +
{canSave ? ( @@ -93,3 +99,5 @@ Configure.propTypes = { setActiveSection: PropTypes.func.isRequired, activeSection: PropTypes.string.isRequired, }; + +export default Configure; diff --git a/client/coral-admin/src/routes/Configure/components/OrganizationSettings.js b/client/coral-admin/src/routes/Configure/components/OrganizationSettings.js new file mode 100644 index 000000000..9920375c4 --- /dev/null +++ b/client/coral-admin/src/routes/Configure/components/OrganizationSettings.js @@ -0,0 +1,39 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +import Slot from 'coral-framework/components/Slot'; +import t from 'coral-framework/services/i18n'; +import ConfigurePage from './ConfigurePage'; +import ConfigureCard from 'coral-framework/components/ConfigureCard'; + +class OrganizationSettings extends React.Component { + render() { + const { settings, slotPassthrough } = this.props; + console.log(this.props); + return ( + + +
    +
  • + {t('configure.organization_name')}: {settings.organizationName} +
  • +
  • + {t('configure.organization_contact_email')}:{' '} + {settings.organizationContactEmail} +
  • +
+
+ +
+ ); + } +} + +OrganizationSettings.propTypes = { + updatePending: PropTypes.func.isRequired, + errors: PropTypes.object.isRequired, + settings: PropTypes.object.isRequired, + slotPassthrough: PropTypes.object.isRequired, +}; + +export default OrganizationSettings; diff --git a/client/coral-admin/src/routes/Configure/containers/Configure.js b/client/coral-admin/src/routes/Configure/containers/Configure.js index ce6ea0627..89fe62fcb 100644 --- a/client/coral-admin/src/routes/Configure/containers/Configure.js +++ b/client/coral-admin/src/routes/Configure/containers/Configure.js @@ -12,6 +12,7 @@ import TechSettings from './TechSettings'; import ModerationSettings from './ModerationSettings'; import { clearPending, setActiveSection } from '../../../actions/configure'; import Configure from '../components/Configure'; +import OrganizationSettings from './OrganizationSettings'; class ConfigureContainer extends Component { savePending = async () => { @@ -49,10 +50,12 @@ const withConfigureQuery = withQuery( ...${getDefinitionName(StreamSettings.fragments.settings)} ...${getDefinitionName(TechSettings.fragments.settings)} ...${getDefinitionName(ModerationSettings.fragments.settings)} + ...${getDefinitionName(OrganizationSettings.fragments.settings)} } ...${getDefinitionName(StreamSettings.fragments.root)} ...${getDefinitionName(TechSettings.fragments.root)} ...${getDefinitionName(ModerationSettings.fragments.root)} + ...${getDefinitionName(OrganizationSettings.fragments.root)} } ${StreamSettings.fragments.root} ${StreamSettings.fragments.settings} @@ -60,6 +63,8 @@ const withConfigureQuery = withQuery( ${TechSettings.fragments.settings} ${ModerationSettings.fragments.root} ${ModerationSettings.fragments.settings} + ${OrganizationSettings.fragments.root} + ${OrganizationSettings.fragments.settings} `, { options: () => ({ diff --git a/client/coral-admin/src/routes/Configure/containers/OrganizationSettings.js b/client/coral-admin/src/routes/Configure/containers/OrganizationSettings.js new file mode 100644 index 000000000..79ab70f69 --- /dev/null +++ b/client/coral-admin/src/routes/Configure/containers/OrganizationSettings.js @@ -0,0 +1,53 @@ +import { connect } from 'react-redux'; +import { bindActionCreators } from 'redux'; +import { compose, gql } from 'react-apollo'; +import OrganizationSettings from '../components/OrganizationSettings'; +import withFragments from 'coral-framework/hocs/withFragments'; +import { getSlotFragmentSpreads } from 'coral-framework/utils'; +import { updatePending } from '../../../actions/configure'; +import { mapProps } from 'recompose'; + +const slots = ['adminOrganizationSettings']; + +const mapStateToProps = state => ({ + errors: state.configure.errors, +}); + +const mapDispatchToProps = dispatch => + bindActionCreators( + { + updatePending, + }, + dispatch + ); + +export default compose( + withFragments({ + root: gql` + fragment TalkAdmin_OrganizationSettings_root on RootQuery { + __typename + ${getSlotFragmentSpreads(slots, 'root')} + } + `, + settings: gql` + fragment TalkAdmin_OrganizationSettings_settings on Settings { + organizationName + organizationContactEmail + ${getSlotFragmentSpreads(slots, 'settings')} + } + `, + }), + connect(mapStateToProps, mapDispatchToProps), + mapProps(({ root, settings, updatePending, errors, ...rest }) => ({ + slotPassthrough: { + root, + settings, + updatePending, + errors, + }, + updatePending, + settings, + errors, + ...rest, + })) +)(OrganizationSettings); diff --git a/docs/source/api/slots.md b/docs/source/api/slots.md index 4ac47a516..da57c0ad6 100644 --- a/docs/source/api/slots.md +++ b/docs/source/api/slots.md @@ -81,6 +81,7 @@ You won't have to use this to build plugins, but it's helpful to find where to e * `adminCommentMoreDetails` * `adminCommentLabels` * `adminModerationSettings` +* `adminOrganizationSettings` * `adminStreamSettings` * `adminTechSettings` * `adminCommentInfoBar` diff --git a/locales/en.yml b/locales/en.yml index 4acbfb2db..0710fb206 100644 --- a/locales/en.yml +++ b/locales/en.yml @@ -157,6 +157,10 @@ en: suspect_word_title: "Suspect words list" suspect_word_text: "Comments which contain these words or phrases (not case-sensitive) will be highlighted in the comment stream. Type a word and press Enter or Tab to add. Optionally paste a comma-separated list." tech_settings: "Tech Settings" + organization_settings: "Organization Settings" + organization_details: "Organization Details" + organization_name: "Organization Name" + organization_contact_email: "Organization Contact Email" title: "Configure Comment Stream" weeks: Weeks wordlist: "Banned Words" diff --git a/locales/es.yml b/locales/es.yml index ffbcec9ce..4dbaf5469 100644 --- a/locales/es.yml +++ b/locales/es.yml @@ -156,6 +156,10 @@ es: suspect_word_title: "Lista de palabras sospechosas" suspect_word_text: "Comentarios que contengan estas palabras o frases, considerando mayusculas y minúsculas, serán automáticamente destacadas en los comentarios publicados. Escribir una palabra y apretar Enter o Tabulador para agregarla. O pegar una lista de palabras separadas por coma." tech_settings: "Configuración Técnica" + organization_settings: "Configuración de la Organización" + organization_details: "Detalles de la Organización" + organization_name: "Nombre de la Organización" + organization_contact_email: "Email de la Organización" title: "Configurar los comentarios" weeks: Semanas wordlist: "Palabras Suspendidas"