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 = {