diff --git a/ui/src/admin/actions/index.js b/ui/src/admin/actions/index.js
index ea9da749d..1dd6e3b61 100644
--- a/ui/src/admin/actions/index.js
+++ b/ui/src/admin/actions/index.js
@@ -64,6 +64,10 @@ export const addRole = () => ({
type: 'ADD_ROLE',
})
+export const addDatabase = () => ({
+ type: 'ADD_DATABASE',
+})
+
export const syncUser = (staleUser, syncedUser) => ({
type: 'SYNC_USER',
payload: {
@@ -164,7 +168,7 @@ export const loadPermissionsAsync = (url) => async (dispatch) => {
export const loadDBsAndRPsAsync = (url) => async (dispatch) => {
const {data: dbs} = await showDatabases(url)
const {databases} = parseShowDatabases(dbs)
- dispatch(loadDatabases(databases))
+ dispatch(loadDatabases(databases.map(name => ({name}))))
const {data: {results}} = await showRetentionPolicies(url, databases)
const retentionPolicies = results.map(parseShowRetentionPolicies)
diff --git a/ui/src/admin/components/DatabaseManager.js b/ui/src/admin/components/DatabaseManager.js
index 6bee1a7f9..ada859bfe 100644
--- a/ui/src/admin/components/DatabaseManager.js
+++ b/ui/src/admin/components/DatabaseManager.js
@@ -1,19 +1,20 @@
import React, {PropTypes} from 'react'
import {formatRPDuration} from 'utils/formatting'
+import DatabaseTable from 'src/admin/components/DatabaseTable'
-const DatabaseManager = ({databases, retentionPolicies}) => {
+const DatabaseManager = ({databases, retentionPolicies, addDatabase}) => {
return (
{databases.length === 1 ? '1 Database' : `${databases.length} Databases`}
-
Create Database
+
Create Database
{
databases.map((db, i) =>
)
@@ -89,14 +90,16 @@ const DatabaseRow = ({name, duration, replication, isDefault}) => {
const {
arrayOf,
bool,
+ func,
number,
shape,
string,
} = PropTypes
DatabaseManager.propTypes = {
- databases: arrayOf(string),
+ databases: arrayOf(shape()),
retentionPolicies: arrayOf(arrayOf(shape)),
+ addDatabase: func,
}
DatabaseRow.propTypes = {
@@ -106,10 +109,5 @@ DatabaseRow.propTypes = {
isDefault: bool,
}
-DatabaseTable.propTypes = {
- database: string,
- retentionPolicies: arrayOf(shape()),
-}
-
export default DatabaseManager
diff --git a/ui/src/admin/containers/DatabaseManagerPage.js b/ui/src/admin/containers/DatabaseManagerPage.js
index a1e838455..db3d333ce 100644
--- a/ui/src/admin/containers/DatabaseManagerPage.js
+++ b/ui/src/admin/containers/DatabaseManagerPage.js
@@ -2,7 +2,7 @@ import React, {PropTypes, Component} from 'react'
import {connect} from 'react-redux'
import {bindActionCreators} from 'redux'
-import {loadDBsAndRPsAsync} from 'src/admin/actions'
+import * as adminActionCreators from 'src/admin/actions'
import DatabaseManager from 'src/admin/components/DatabaseManager'
class DatabaseManagerPage extends Component {
@@ -11,22 +11,37 @@ class DatabaseManagerPage extends Component {
}
componentDidMount() {
- const {source: {links: {proxy}}, loadDBsAndRPs} = this.props
+ const {source: {links: {proxy}}, actions} = this.props
- loadDBsAndRPs(proxy)
+ actions.loadDBsAndRPsAsync(proxy)
+ }
+
+ handleCreateDatabase() {
+ // this.props.createDatabase(database)
+ }
+
+ handleAddDatabase() {
+ this.props.actions.addDatabase()
}
render() {
- const {databases, retentionPolicies} = this.props
+ const {databases, retentionPolicies, actions} = this.props
- return
+ return (
+
+ )
}
}
const {
- array,
arrayOf,
+ bool,
func,
+ number,
shape,
string,
} = PropTypes
@@ -37,9 +52,20 @@ DatabaseManagerPage.propTypes = {
proxy: string,
}),
}),
- databases: arrayOf(string),
- retentionPolicies: array,
- loadDBsAndRPs: func,
+ databases: arrayOf(shape({
+ name: string,
+ isEditing: bool,
+ })),
+ retentionPolicies: arrayOf(arrayOf(shape({
+ name: string,
+ duration: string,
+ replication: number,
+ isDefault: bool,
+ }))),
+ actions: shape({
+ loadDBsAndRPsAsync: func,
+ addDatabase: func,
+ }),
}
const mapStateToProps = ({admin: {databases, retentionPolicies}}) => ({
@@ -48,7 +74,7 @@ const mapStateToProps = ({admin: {databases, retentionPolicies}}) => ({
})
const mapDispatchToProps = (dispatch) => ({
- loadDBsAndRPs: bindActionCreators(loadDBsAndRPsAsync, dispatch),
+ actions: bindActionCreators(adminActionCreators, dispatch),
})
export default connect(mapStateToProps, mapDispatchToProps)(DatabaseManagerPage)
diff --git a/ui/src/admin/reducers/admin.js b/ui/src/admin/reducers/admin.js
index ee997947d..698474169 100644
--- a/ui/src/admin/reducers/admin.js
+++ b/ui/src/admin/reducers/admin.js
@@ -16,6 +16,19 @@ const newDefaultRole = {
isNew: true,
}
+const newDefaultDatabase = {
+ name: '',
+ isNew: true,
+}
+
+const newDefaultRP = {
+ name: 'autogen',
+ duration: '0',
+ replication: 2,
+ isDefault: true,
+ isNew: true,
+}
+
const initialState = {
users: null,
roles: [],
@@ -70,6 +83,23 @@ export default function admin(state = initialState, action) {
}
}
+ case 'ADD_DATABASE': {
+ const newDatabase = {...newDefaultDatabase, isEditing: true}
+ const newRetentionPolicies = [{...newDefaultRP}]
+
+ return {
+ ...state,
+ databases: [
+ newDatabase,
+ ...state.databases,
+ ],
+ retentionPolicies: [
+ newRetentionPolicies,
+ ...state.retentionPolicies,
+ ],
+ }
+ }
+
case 'SYNC_USER': {
const {staleUser, syncedUser} = action.payload
const newState = {