diff --git a/.eslintrc.json b/.eslintrc.json
index 5df3444a6..d15dc3367 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -1,4 +1,8 @@
{
+ "globals": {
+ "fetch": true,
+ "Headers": true
+ },
"env": {
"es6": true,
"node": true
diff --git a/client/coral-admin/package.json b/client/coral-admin/package.json
index 048359526..dcd26d06a 100644
--- a/client/coral-admin/package.json
+++ b/client/coral-admin/package.json
@@ -5,7 +5,8 @@
"main": "index.js",
"scripts": {
"build": "./node_modules/.bin/webpack --config webpack.config.js",
- "start": "./node_modules/.bin/webpack-dev-server --config webpack.config.dev.js --inline --hot --content-base public --port 3142"
+ "start": "./node_modules/.bin/webpack-dev-server --config webpack.config.dev.js --inline --hot --content-base public --port 3142",
+ "dev": "./node_modules/.bin/webpack -w"
},
"keywords": [],
"author": "",
diff --git a/client/coral-admin/src/actions/settings.js b/client/coral-admin/src/actions/settings.js
new file mode 100644
index 000000000..73e7d9510
--- /dev/null
+++ b/client/coral-admin/src/actions/settings.js
@@ -0,0 +1,67 @@
+export const SETTINGS_LOADING = 'SETTINGS_LOADING'
+export const SETTINGS_RECEIVED = 'SETTINGS_RECEIVED'
+export const SETTINGS_FETCH_ERROR = 'SETTINGS_FETCH_ERROR'
+
+export const SETTINGS_UPDATED = 'SETTINGS_UPDATED'
+
+export const SAVE_SETTINGS_LOADING = 'SAVE_SETTINGS_LOADING'
+export const SAVE_SETTINGS_SUCCESS = 'SAVE_SETTINGS_SUCCESS'
+export const SAVE_SETTINGS_FAILED = 'SAVE_SETTINGS_FAILED'
+
+const base = '/api/v1'
+
+const getInit = (method, body) => {
+ const headers = new Headers({
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json'
+ })
+
+ const init = {method, headers}
+ if (method.toLowerCase() !== 'get') {
+ init.body = JSON.stringify(body)
+ }
+
+ return init
+}
+
+const handleResp = res => {
+ if (res.status === 401) {
+ throw new Error('Not Authorized to make this request')
+ } else if (res.status > 399) {
+ throw new Error('Error! Status ' + res.status)
+ } else if (res.status === 204) {
+ return res.text()
+ } else {
+ return res.json()
+ }
+}
+
+export const fetchSettings = () => dispatch => {
+ dispatch({type: SETTINGS_LOADING})
+ fetch(`${base}/settings`, getInit('GET'))
+ .then(handleResp)
+ .then(settings => {
+ dispatch({type: SETTINGS_RECEIVED, settings})
+ })
+ .catch(error => {
+ dispatch({type: SETTINGS_FETCH_ERROR, error})
+ })
+}
+
+export const updateSettings = settings => {
+ console.log('updated settings', settings)
+ return {type: SETTINGS_UPDATED, settings}
+}
+
+export const saveSettingsToServer = (dispatch, getState) => {
+ const settings = getState().settings.settings
+ dispatch({type: SAVE_SETTINGS_LOADING})
+ fetch(`${base}/settings`, getInit('PUT', settings))
+ .then(handleResp)
+ .then(() => {
+ dispatch({type: SAVE_SETTINGS_SUCCESS, settings})
+ })
+ .catch(error => {
+ dispatch({type: SAVE_SETTINGS_FAILED, error})
+ })
+}
diff --git a/client/coral-admin/src/containers/Configure.css b/client/coral-admin/src/containers/Configure.css
index 2c65fd5bc..b5ec3735b 100644
--- a/client/coral-admin/src/containers/Configure.css
+++ b/client/coral-admin/src/containers/Configure.css
@@ -20,6 +20,7 @@
border-radius: 4px;
height: 90px;
margin-bottom: 10px;
+ cursor: pointer;
}
.configSettingEmbed {
diff --git a/client/coral-admin/src/containers/Configure.js b/client/coral-admin/src/containers/Configure.js
index 4a36e56e7..70c357cc5 100644
--- a/client/coral-admin/src/containers/Configure.js
+++ b/client/coral-admin/src/containers/Configure.js
@@ -1,5 +1,6 @@
import React from 'react'
import {connect} from 'react-redux'
+import {fetchSettings, updateSettings, saveSettingsToServer} from '../actions/settings'
import {
List,
ListItem,
@@ -17,12 +18,31 @@ class Configure extends React.Component {
constructor (props) {
super(props)
this.state = {activeSection: 'comments'}
+ this.updateModeration = this.updateModeration.bind(this)
+ this.saveSettings = this.saveSettings.bind(this)
+ }
+
+ componentWillMount () {
+ this.props.dispatch(fetchSettings())
+ }
+
+ updateModeration () {
+ const moderation = this.props.settings.moderation === 'pre' ? 'post' : 'pre'
+ this.props.dispatch(updateSettings({moderation}))
+ }
+
+ saveSettings () {
+ this.props.dispatch(saveSettingsToServer())
}
getCommentSettings () {
return
-
+
+
+
Enable pre-moderation
@@ -75,7 +95,7 @@ class Configure extends React.Component {
icon='code'>Embed Comment Stream
-