diff --git a/src/app/index.less b/src/app/index.less index 27d0dc9918f..0f12a792d4a 100644 --- a/src/app/index.less +++ b/src/app/index.less @@ -17,6 +17,7 @@ @import "../internal-packages/app/styles/index.less"; @import "../internal-packages/collection-stats/styles/index.less"; @import "../internal-packages/crud/styles/index.less"; +@import "../internal-packages/database-ddl/styles/index.less"; @import "../internal-packages/home/styles/index.less"; @import "../internal-packages/status/styles/index.less"; @import "../internal-packages/query/styles/index.less"; diff --git a/src/internal-packages/database-ddl/index.js b/src/internal-packages/database-ddl/index.js new file mode 100644 index 00000000000..bbcff32f140 --- /dev/null +++ b/src/internal-packages/database-ddl/index.js @@ -0,0 +1,37 @@ +const app = require('ampersand-app'); +const Actions = require('./lib/action'); +const CreateDatabaseDialog = require('./lib/component/create-database-dialog'); +const DatabasesView = require('./lib/component/connected-databases'); +const DropDatabaseDialog = require('./lib/component/drop-database-dialog'); +const CreateDatabaseStore = require('./lib/store/create-database-store'); +const DatabasesStore = require('./lib/store/databases-store'); +const DropDatabaseStore = require('./lib/store/drop-database-store'); + +/** + * Activate all the components in the Database DDL package. + */ +function activate() { + app.appRegistry.registerAction('DatabaseDDL.Actions', Actions); + app.appRegistry.registerComponent('DatabaseDDL.CreateDatabaseDialog', CreateDatabaseDialog); + app.appRegistry.registerComponent('DatabaseDDL.DatabasesView', DatabasesView); + app.appRegistry.registerComponent('DatabaseDDL.DropDatabaseDialog', DropDatabaseDialog); + app.appRegistry.registerStore('DatabaseDDL.CreateDatabaseStore', CreateDatabaseStore); + app.appRegistry.registerStore('DatabaseDDL.DatabasesStore', DatabasesStore); + app.appRegistry.registerStore('DatabaseDDL.DropDatabaseStore', DropDatabaseStore); +} + +/** + * Deactivate all the components in the Database DDL package. + */ +function deactivate() { + app.appRegistry.deregisterAction('DatabaseDDL.Actions'); + app.appRegistry.deregisterComponent('DatabaseDDL.CreateDatabaseDialog'); + app.appRegistry.deregisterComponent('DatabaseDDL.DatabasesView'); + app.appRegistry.deregisterComponent('DatabaseDDL.DropDatabaseDialog'); + app.appRegistry.deregisterStore('DatabaseDDL.CreateDatabaseStore'); + app.appRegistry.deregisterStore('DatabaseDDL.DatabasesStore'); + app.appRegistry.deregisterStore('DatabaseDDL.DropDatabaseStore'); +} + +module.exports.activate = activate; +module.exports.deactivate = deactivate; diff --git a/src/internal-packages/server-stats/lib/action/databases-actions.js b/src/internal-packages/database-ddl/lib/action/index.js similarity index 81% rename from src/internal-packages/server-stats/lib/action/databases-actions.js rename to src/internal-packages/database-ddl/lib/action/index.js index 42bc5671796..05700d745b8 100644 --- a/src/internal-packages/server-stats/lib/action/databases-actions.js +++ b/src/internal-packages/database-ddl/lib/action/index.js @@ -1,7 +1,7 @@ const Reflux = require('reflux'); /** - * The actions used by the database components. + * The actions used by the Database DDL components. */ const Actions = Reflux.createActions([ 'sortDatabases', diff --git a/src/internal-packages/server-stats/lib/component/connected-databases.jsx b/src/internal-packages/database-ddl/lib/component/connected-databases.jsx similarity index 100% rename from src/internal-packages/server-stats/lib/component/connected-databases.jsx rename to src/internal-packages/database-ddl/lib/component/connected-databases.jsx diff --git a/src/internal-packages/server-stats/lib/component/create-database-dialog.jsx b/src/internal-packages/database-ddl/lib/component/create-database-dialog.jsx similarity index 99% rename from src/internal-packages/server-stats/lib/component/create-database-dialog.jsx rename to src/internal-packages/database-ddl/lib/component/create-database-dialog.jsx index c66f8f227f6..7679f59dfdb 100644 --- a/src/internal-packages/server-stats/lib/component/create-database-dialog.jsx +++ b/src/internal-packages/database-ddl/lib/component/create-database-dialog.jsx @@ -3,7 +3,7 @@ const shell = require('electron').shell; const React = require('react'); const Modal = require('react-bootstrap').Modal; const { TextButton } = require('hadron-react-buttons'); -const Actions = require('../action/databases-actions'); +const Actions = require('../action'); const CreateDatabaseStore = require('../store/create-database-store'); /** diff --git a/src/internal-packages/server-stats/lib/component/databases-table.jsx b/src/internal-packages/database-ddl/lib/component/databases-table.jsx similarity index 91% rename from src/internal-packages/server-stats/lib/component/databases-table.jsx rename to src/internal-packages/database-ddl/lib/component/databases-table.jsx index 6a9f6e47ea4..3a9c5f216e1 100644 --- a/src/internal-packages/server-stats/lib/component/databases-table.jsx +++ b/src/internal-packages/database-ddl/lib/component/databases-table.jsx @@ -2,9 +2,6 @@ const React = require('react'); const app = require('ampersand-app'); const { shell } = require('electron'); const ipc = require('hadron-ipc'); -const DatabasesActions = require('../action/databases-actions'); -const CreateDatabaseDialog = require('./create-database-dialog'); -const DropDatabaseDialog = require('./drop-database-dialog'); const { NamespaceStore } = require('hadron-reflux-store'); const numeral = require('numeral'); const _ = require('lodash'); @@ -20,21 +17,22 @@ class DatabasesTable extends React.Component { constructor(props) { super(props); + this.DatabaseDDLAction = app.appRegistry.getAction('DatabaseDDL.Actions'); this.SortableTable = app.appRegistry.getComponent('App.SortableTable'); this.CollectionStore = app.appRegistry.getStore('App.CollectionStore'); this.Tooltip = app.appRegistry.getComponent('App.Tooltip'); } onColumnHeaderClicked(column, order) { - DatabasesActions.sortDatabases(column, order); + this.DatabaseDDLAction.sortDatabases(column, order); } onRowDeleteButtonClicked(index, dbName) { - DatabasesActions.openDropDatabaseDialog(dbName); + this.DatabaseDDLAction.openDropDatabaseDialog(dbName); } onCreateDatabaseButtonClicked() { - DatabasesActions.openCreateDatabaseDialog(); + this.DatabaseDDLAction.openCreateDatabaseDialog(); } onAuthHelpClicked(evt) { @@ -119,8 +117,6 @@ class DatabasesTable extends React.Component { {this.props.databases.length === 0 ? this.renderNoCollections(isWritable) : null} - - ); } diff --git a/src/internal-packages/server-stats/lib/component/drop-database-dialog.jsx b/src/internal-packages/database-ddl/lib/component/drop-database-dialog.jsx similarity index 94% rename from src/internal-packages/server-stats/lib/component/drop-database-dialog.jsx rename to src/internal-packages/database-ddl/lib/component/drop-database-dialog.jsx index 180bfa9143f..9b5688df585 100644 --- a/src/internal-packages/server-stats/lib/component/drop-database-dialog.jsx +++ b/src/internal-packages/database-ddl/lib/component/drop-database-dialog.jsx @@ -2,7 +2,7 @@ const app = require('ampersand-app'); const React = require('react'); const Modal = require('react-bootstrap').Modal; const { TextButton } = require('hadron-react-buttons'); -const Actions = require('../action/databases-actions'); +const Actions = require('../action'); const DropDatabaseStore = require('../store/drop-database-store'); /** @@ -108,9 +108,10 @@ class DropDatabaseDialog extends React.Component {

- Type the database name - {this.state.name} - to drop + To drop + {this.state.name} + type the database name + {this.state.name}

- - ); } diff --git a/src/internal-packages/database/lib/components/create-collection-dialog.jsx b/src/internal-packages/database/lib/components/create-collection-dialog.jsx index 99963b55612..dd93ea8f635 100644 --- a/src/internal-packages/database/lib/components/create-collection-dialog.jsx +++ b/src/internal-packages/database/lib/components/create-collection-dialog.jsx @@ -3,8 +3,6 @@ const shell = require('electron').shell; const React = require('react'); const Modal = require('react-bootstrap').Modal; const { TextButton } = require('hadron-react-buttons'); -const NamespaceStore = require('hadron-reflux-store').NamespaceStore; -const toNS = require('mongodb-ns'); const Actions = require('../actions/collections-actions'); const CreateCollectionStore = require('../stores/create-collection-store'); const CreateCollectionInput = require('./create-collection-input'); @@ -50,12 +48,14 @@ class CreateCollectionDialog extends React.Component { /** * When the open dialog action is fired. + * + * @param {String} databaseName - The database to create the collection on. */ - onOpenDialog() { + onOpenDialog(databaseName) { this.setState({ open: true, collectionName: '', - databaseName: toNS(NamespaceStore.ns).database, + databaseName: databaseName, capped: false, maxSize: '', error: false, diff --git a/src/internal-packages/database/lib/components/drop-collection-dialog.jsx b/src/internal-packages/database/lib/components/drop-collection-dialog.jsx index b348ac8fe02..4e05301ff93 100644 --- a/src/internal-packages/database/lib/components/drop-collection-dialog.jsx +++ b/src/internal-packages/database/lib/components/drop-collection-dialog.jsx @@ -1,8 +1,6 @@ const app = require('ampersand-app'); const React = require('react'); const Modal = require('react-bootstrap').Modal; -const NamespaceStore = require('hadron-reflux-store').NamespaceStore; -const toNS = require('mongodb-ns'); const { TextButton } = require('hadron-react-buttons'); const Actions = require('../actions/collections-actions'); const DropCollectionStore = require('../stores/drop-collection-store'); @@ -19,7 +17,7 @@ class DropCollectionDialog extends React.Component { */ constructor(props) { super(props); - this.state = { name: '', confirmName: '' }; + this.state = { collectionName: '', confirmName: '' }; this.ModalStatusMessage = app.appRegistry.getComponent('App.ModalStatusMessage'); } @@ -42,14 +40,15 @@ class DropCollectionDialog extends React.Component { /** * When the open dialog action is fired. * - * @param {String} name - The name of the database to drop. + * @param {String} databaseName - The name of the database to drop the collection from. + * @param {String} collectionName - The name of the collection to drop. */ - onOpenDialog(name) { + onOpenDialog(databaseName, collectionName) { this.setState({ open: true, - name: name, + collectionName: collectionName, confirmName: '', - databaseName: toNS(NamespaceStore.ns).database + databaseName: databaseName }); } @@ -69,12 +68,12 @@ class DropCollectionDialog extends React.Component { evt.stopPropagation(); // prevent drop of collection if names don't match - if (this.state.confirmName !== this.state.name) { + if (this.state.confirmName !== this.state.collectionName) { return; } this.setState({ inProgress: true, error: false, errorMessage: '' }); - Actions.dropCollection(this.state.databaseName, this.state.name); + Actions.dropCollection(this.state.databaseName, this.state.collectionName); } /** @@ -116,9 +115,10 @@ class DropCollectionDialog extends React.Component {

- Type the collection name - {this.state.name} - to drop + To drop + {this.state.databaseName}.{this.state.collectionName} + type the collection name + {this.state.collectionName}

Drop Collection diff --git a/src/internal-packages/database/styles/drop-collection-dialog.less b/src/internal-packages/database/styles/drop-collection-dialog.less index 309ac7d0157..edaf6b4a1bb 100644 --- a/src/internal-packages/database/styles/drop-collection-dialog.less +++ b/src/internal-packages/database/styles/drop-collection-dialog.less @@ -1,3 +1,14 @@ .drop-collection-dialog { width: 500px; } +.drop-confirm-namespace { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + font-size: 13px; + margin: 0.5ex; +} + +.drop-confirm-collection { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + font-weight: bold; + margin: 0.5ex; +} diff --git a/src/internal-packages/home/index.js b/src/internal-packages/home/index.js index cf77b3defff..666d773c88e 100644 --- a/src/internal-packages/home/index.js +++ b/src/internal-packages/home/index.js @@ -1,6 +1,6 @@ const app = require('ampersand-app'); -const HomeComponent = require('./lib/components'); -const HomeActions = require('./lib/actions'); +const HomeComponent = require('./lib/component'); +const HomeActions = require('./lib/action'); /** * Activate all the components in the Collection package. diff --git a/src/internal-packages/home/lib/actions/index.js b/src/internal-packages/home/lib/action/index.js similarity index 100% rename from src/internal-packages/home/lib/actions/index.js rename to src/internal-packages/home/lib/action/index.js diff --git a/src/internal-packages/home/lib/components/home.jsx b/src/internal-packages/home/lib/component/home.jsx similarity index 79% rename from src/internal-packages/home/lib/components/home.jsx rename to src/internal-packages/home/lib/component/home.jsx index c4ebbc48602..edbdaaaeefa 100644 --- a/src/internal-packages/home/lib/components/home.jsx +++ b/src/internal-packages/home/lib/component/home.jsx @@ -13,6 +13,10 @@ class Home extends React.Component { * TODO (imlucas) Handle state when rtss permissions not available. */ this.serverStatsView = app.appRegistry.getComponent('RTSS.ServerStats'); + this.CreateDatabaseDialog = app.appRegistry.getComponent('DatabaseDDL.CreateDatabaseDialog'); + this.DropDatabaseDialog = app.appRegistry.getComponent('DatabaseDDL.DropDatabaseDialog'); + this.CreateCollectionDialog = app.appRegistry.getComponent('Database.CreateCollectionDialog'); + this.DropCollectionDialog = app.appRegistry.getComponent('Database.DropCollectionDialog'); } getContentClasses() { @@ -59,6 +63,10 @@ class Home extends React.Component { {isNotWritableTooltip} + + + + ); } diff --git a/src/internal-packages/home/lib/components/index.jsx b/src/internal-packages/home/lib/component/index.jsx similarity index 100% rename from src/internal-packages/home/lib/components/index.jsx rename to src/internal-packages/home/lib/component/index.jsx diff --git a/src/internal-packages/home/lib/store/index.js b/src/internal-packages/home/lib/store/index.js index a5441643741..052dff0d4df 100644 --- a/src/internal-packages/home/lib/store/index.js +++ b/src/internal-packages/home/lib/store/index.js @@ -1,6 +1,6 @@ const app = require('ampersand-app'); const Reflux = require('reflux'); -const HomeActions = require('../actions'); +const HomeActions = require('../action'); const StateMixin = require('reflux-state-mixin'); const NamespaceStore = require('hadron-reflux-store').NamespaceStore; const toNS = require('mongodb-ns'); diff --git a/src/internal-packages/server-stats/lib/component/index.jsx b/src/internal-packages/server-stats/lib/component/index.jsx index a13e4e10133..501a9222b1d 100644 --- a/src/internal-packages/server-stats/lib/component/index.jsx +++ b/src/internal-packages/server-stats/lib/component/index.jsx @@ -1,7 +1,6 @@ const React = require('react'); const Actions = require('../action'); const Performance = require('./performance-component'); -const Databases = require('./connected-databases'); const app = require('ampersand-app'); // const debug = require('debug')('mongodb-compass:server-stats-RTSSComponent'); @@ -18,6 +17,7 @@ class RTSSComponent extends React.Component { constructor(props) { super(props); this.state = {activeTab: 0}; + this.DatabasesView = app.appRegistry.getComponent('DatabaseDDL.DatabasesView'); this.TabNavBar = app.appRegistry.getComponent('App.TabNavBar'); } @@ -40,7 +40,7 @@ class RTSSComponent extends React.Component { */ render() { const performanceView = ; - const databasesView = ; + const databasesView = ; return (
', () => { app.appRegistry.registerComponent('Database.CreateCollectionInput', CreateCollectionInput); app.appRegistry.registerComponent('Database.CreateCollectionSizeInput', CreateCollectionSizeInput); - this.DatabasesTable = require('../../src/internal-packages/server-stats/lib/component/databases-table'); + this.DatabasesTable = require('../../src/internal-packages/database-ddl/lib/component/databases-table'); }); afterEach(() => { // Restore properties on the global app object,