diff --git a/client/modules/IDE/components/FileNode.jsx b/client/modules/IDE/components/FileNode.jsx
index d3b5be6b..252de291 100644
--- a/client/modules/IDE/components/FileNode.jsx
+++ b/client/modules/IDE/components/FileNode.jsx
@@ -65,6 +65,9 @@ export class FileNode extends React.Component {
toggleFileOptions(e) {
e.preventDefault();
+ if (!this.props.canEdit) {
+ return;
+ }
if (this.state.isOptionsOpen) {
this.setState({ isOptionsOpen: false });
} else {
@@ -88,7 +91,7 @@ export class FileNode extends React.Component {
renderChild(childId) {
return (
-
+
);
}
@@ -250,7 +253,8 @@ FileNode.propTypes = {
newFile: PropTypes.func.isRequired,
newFolder: PropTypes.func.isRequired,
showFolderChildren: PropTypes.func.isRequired,
- hideFolderChildren: PropTypes.func.isRequired
+ hideFolderChildren: PropTypes.func.isRequired,
+ canEdit: PropTypes.bool.isRequired
};
FileNode.defaultProps = {
@@ -261,8 +265,7 @@ FileNode.defaultProps = {
function mapStateToProps(state, ownProps) {
// this is a hack, state is updated before ownProps
- return state.files.find(file => file.id === ownProps.id) || { ...ownProps, name: 'test', fileType: 'file' };
- // return state.files.find(file => file.id === ownProps.id);
+ return state.files.find(file => file.id === ownProps.id) || { name: 'test', fileType: 'file' };
}
function mapDispatchToProps(dispatch) {
diff --git a/client/modules/IDE/components/NewFileForm.jsx b/client/modules/IDE/components/NewFileForm.jsx
index 8e3b5977..d0a6b8ab 100644
--- a/client/modules/IDE/components/NewFileForm.jsx
+++ b/client/modules/IDE/components/NewFileForm.jsx
@@ -8,6 +8,10 @@ class NewFileForm extends React.Component {
this.createFile = this.props.createFile.bind(this);
}
+ componentDidMount() {
+ this.fileName.focus();
+ }
+
render() {
const { fields: { name }, handleSubmit } = this.props;
return (
@@ -25,6 +29,7 @@ class NewFileForm extends React.Component {
type="text"
placeholder="Name"
{...domOnlyProps(name)}
+ ref={(element) => { this.fileName = element; }}
/>
{name.touched && name.error && {name.error}}
diff --git a/client/modules/IDE/components/Sidebar.jsx b/client/modules/IDE/components/Sidebar.jsx
index 5172f27a..6419abe1 100644
--- a/client/modules/IDE/components/Sidebar.jsx
+++ b/client/modules/IDE/components/Sidebar.jsx
@@ -41,11 +41,12 @@ class Sidebar extends React.Component {
}
render() {
+ const canEditProject = this.userCanEditProject();
const sidebarClass = classNames({
'sidebar': true,
'sidebar--contracted': !this.props.isExpanded,
'sidebar--project-options': this.props.projectOptionsVisible,
- 'sidebar--cant-edit': !this.userCanEditProject()
+ 'sidebar--cant-edit': !canEditProject
});
return (
@@ -82,7 +83,10 @@ class Sidebar extends React.Component {
- file.name === 'root')[0].id} />
+ file.name === 'root')[0].id}
+ canEdit={canEditProject}
+ />
);
}
diff --git a/client/styles/components/_sidebar.scss b/client/styles/components/_sidebar.scss
index dba607e0..2c25d4fa 100644
--- a/client/styles/components/_sidebar.scss
+++ b/client/styles/components/_sidebar.scss
@@ -46,7 +46,7 @@
.sidebar__root-item {
position: relative;
- overflow-y: scroll;
+ overflow-y: auto;
flex: 1 1 auto;
}
@@ -125,7 +125,6 @@
@include icon();
@include themify() {
padding: #{4 / $base-font-size}rem 0;
- background-color: map-get($theme-map, 'file-selected-color');
padding-right: #{6 / $base-font-size}rem;
}
display: none;
@@ -137,9 +136,18 @@
display: none;
}
}
+ .sidebar__file-item:hover > .file-item__content & {
+ display: inline-block;
+ .sidebar--cant-edit & {
+ display: none;
+ }
+ }
& svg {
width: #{10 / $base-font-size}rem;
}
+ .sidebar__file-item--open > .file-item__content & {
+ display: inline-block;
+ }
}
.sidebar__file-item-options {
diff --git a/client/utils/reduxFormUtils.js b/client/utils/reduxFormUtils.js
index 4bb74319..0f822b9b 100644
--- a/client/utils/reduxFormUtils.js
+++ b/client/utils/reduxFormUtils.js
@@ -64,6 +64,11 @@ export function validateSignup(formProps) {
if (!formProps.password) {
errors.password = 'Please enter a password';
}
+ if (formProps.password) {
+ if (formProps.password.length < 6) {
+ errors.password = 'Password must be at least 6 characters';
+ }
+ }
if (!formProps.confirmPassword) {
errors.confirmPassword = 'Please enter a password confirmation';
}
diff --git a/webpack/config.prod.js b/webpack/config.prod.js
index 249b509e..1b6b01e6 100644
--- a/webpack/config.prod.js
+++ b/webpack/config.prod.js
@@ -120,7 +120,8 @@ module.exports = [{
new webpack.optimize.UglifyJsPlugin({
sourceMap: true,
compress: {
- warnings: false
+ warnings: false,
+ drop_console :true
}
}),
new webpack.LoaderOptionsPlugin({