var _ = require('underscore'); var React = require('react/addons'); var remote = require('remote'); var metrics = require('../utils/MetricsUtil'); var dialog = remote.require('dialog'); var ContainerUtil = require('../utils/ContainerUtil'); var containerActions = require('../actions/ContainerActions'); var ContainerSettingsGeneral = React.createClass({ mixins: [React.addons.LinkedStateMixin], contextTypes: { router: React.PropTypes.func }, getInitialState: function () { let env = ContainerUtil.env(this.props.container) || []; env.push(['', '']); return { slugName: null, nameError: null, env: env }; }, shouldComponentUpdate: function (nextProps, nextState) { if (nextState.slugName !== this.state.slugName || nextState.nameError !== this.state.nameError) { return true; } return true; }, handleNameChange: function (e) { let name = e.target.value; if (name === this.state.slugName) { return; } name = name.replace(/^\s+|\s+$/g, ''); // Trim name = name.toLowerCase(); // Remove Accents let from = "àáäâèéëêìíïîòóöôùúüûñç·/,:;"; let to = "aaaaeeeeiiiioooouuuunc-----"; for (var i=0, l=from.length ; i { let [key, value] = kvp; if ((key && key.length) || (value && value.length)) { list.push(key + '=' + value); } }); containerActions.update(this.props.container.Name, {Env: list}); }, handleChangeEnvKey: function (index, event) { let env = _.map(this.state.env, _.clone); env[index][0] = event.target.value; this.setState({ env: env }); }, handleChangeEnvVal: function (index, event) { let env = _.map(this.state.env, _.clone); env[index][1] = event.target.value; this.setState({ env: env }); }, handleAddEnvVar: function () { let env = _.map(this.state.env, _.clone); env.push(['', '']); this.setState({ env: env }); metrics.track('Added Pending Environment Variable'); }, handleRemoveEnvVar: function (index) { let env = _.map(this.state.env, _.clone); env.splice(index, 1); if (env.length === 0) { env.push(['', '']); } this.setState({ env: env }); metrics.track('Removed Environment Variable'); }, handleDeleteContainer: function () { dialog.showMessageBox({ message: 'Are you sure you want to delete this container?', buttons: ['Delete', 'Cancel'] }, index => { if (index === 0) { metrics.track('Deleted Container', { from: 'settings', type: 'existing' }); containerActions.destroy(this.props.container.Name); } }); }, render: function () { if (!this.props.container) { return false; } var willBeRenamedAs; var btnSaveName = ( Save ); if (this.state.slugName) { willBeRenamedAs = (

Will be renamed as: {this.state.slugName}

); btnSaveName = ( Save ); } else if (this.state.nameError) { willBeRenamedAs = (

{this.state.nameError}

); } let rename = (

Container Name

{willBeRenamedAs}
{btnSaveName}
); let vars = _.map(this.state.env, (kvp, index) => { let [key, val] = kvp; let icon; if (index === this.state.env.length - 1) { icon = ; } else { icon = ; } return (
{icon}
); }); return (
{rename}

Environment Variables

KEY
VALUE
{vars}
Save

Delete Container

Delete Container
); } }); module.exports = ContainerSettingsGeneral;