add hide/showing files, carrot doesn't work
This commit is contained in:
parent
c671d0c9f2
commit
e82270a709
7 changed files with 75 additions and 4 deletions
|
@ -69,6 +69,8 @@ export const OPEN_PROJECT_OPTIONS = 'OPEN_PROJECT_OPTIONS';
|
||||||
export const CLOSE_PROJECT_OPTIONS = 'CLOSE_PROJECT_OPTIONS';
|
export const CLOSE_PROJECT_OPTIONS = 'CLOSE_PROJECT_OPTIONS';
|
||||||
export const SHOW_NEW_FOLDER_MODAL = 'SHOW_NEW_FOLDER_MODAL';
|
export const SHOW_NEW_FOLDER_MODAL = 'SHOW_NEW_FOLDER_MODAL';
|
||||||
export const CLOSE_NEW_FOLDER_MODAL = 'CLOSE_NEW_FOLDER_MODAL';
|
export const CLOSE_NEW_FOLDER_MODAL = 'CLOSE_NEW_FOLDER_MODAL';
|
||||||
|
export const SHOW_FOLDER_CHILDREN = 'SHOW_FOLDER_CHILDREN';
|
||||||
|
export const HIDE_FOLDER_CHILDREN = 'HIDE_FOLDER_CHILDREN';
|
||||||
|
|
||||||
// eventually, handle errors more specifically and better
|
// eventually, handle errors more specifically and better
|
||||||
export const ERROR = 'ERROR';
|
export const ERROR = 'ERROR';
|
||||||
|
|
14
client/images/triangle-arrow-down.svg
Normal file
14
client/images/triangle-arrow-down.svg
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg width="10px" height="10px" viewBox="0 0 5 5" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<!-- Generator: Sketch 39.1 (31720) - http://www.bohemiancoding.com/sketch -->
|
||||||
|
<title>Triangle 3</title>
|
||||||
|
<desc>Created with Sketch.</desc>
|
||||||
|
<defs></defs>
|
||||||
|
<g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
|
<g id="environment" transform="translate(-26.000000, -42.000000)" fill="#B5B5B5">
|
||||||
|
<g id="libraries" transform="translate(21.000000, 32.000000)">
|
||||||
|
<polygon id="Triangle-3" transform="translate(7.500000, 12.500000) rotate(180.000000) translate(-7.500000, -12.500000) " points="7.5 10 10 15 5 15"></polygon>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 836 B |
|
@ -1,11 +1,11 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<svg width="6px" height="7px" viewBox="0 0 6 7" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
<svg width="10px" height="10px" viewBox="0 0 5 5" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
<!-- Generator: Sketch 39.1 (31720) - http://www.bohemiancoding.com/sketch -->
|
<!-- Generator: Sketch 39.1 (31720) - http://www.bohemiancoding.com/sketch -->
|
||||||
<title>Triangle 3</title>
|
<title>Triangle 3</title>
|
||||||
<desc>Created with Sketch.</desc>
|
<desc>Created with Sketch.</desc>
|
||||||
<defs></defs>
|
<defs></defs>
|
||||||
<g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
<g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||||
<g id="environment" transform="translate(-25.000000, -41.000000)" stroke="#B5B5B5" fill="#B5B5B5">
|
<g id="environment" transform="translate(-26.000000, -42.000000)" fill="#B5B5B5">
|
||||||
<g id="libraries" transform="translate(21.000000, 32.000000)">
|
<g id="libraries" transform="translate(21.000000, 32.000000)">
|
||||||
<polygon id="Triangle-3" transform="translate(7.500000, 12.500000) rotate(90.000000) translate(-7.500000, -12.500000) " points="7.5 10 10 15 5 15"></polygon>
|
<polygon id="Triangle-3" transform="translate(7.500000, 12.500000) rotate(90.000000) translate(-7.500000, -12.500000) " points="7.5 10 10 15 5 15"></polygon>
|
||||||
</g>
|
</g>
|
Before Width: | Height: | Size: 850 B After Width: | Height: | Size: 835 B |
|
@ -247,3 +247,17 @@ export function deleteFile(id, parentId) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function showFolderChildren(id) {
|
||||||
|
return {
|
||||||
|
type: ActionTypes.SHOW_FOLDER_CHILDREN,
|
||||||
|
id
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function hideFolderChildren(id) {
|
||||||
|
return {
|
||||||
|
type: ActionTypes.HIDE_FOLDER_CHILDREN,
|
||||||
|
id
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,8 @@ import { bindActionCreators } from 'redux';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import InlineSVG from 'react-inlinesvg';
|
import InlineSVG from 'react-inlinesvg';
|
||||||
const downArrowUrl = require('../../../images/down-arrow.svg');
|
const downArrowUrl = require('../../../images/down-arrow.svg');
|
||||||
|
const folderRightUrl = require('../../../images/triangle-arrow-right.svg');
|
||||||
|
const folderDownUrl = require('../../../images/triangle-arrow-down.svg');
|
||||||
const fileUrl = require('../../../images/file.svg');
|
const fileUrl = require('../../../images/file.svg');
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
|
|
||||||
|
@ -60,7 +62,8 @@ export class FileNode extends React.Component {
|
||||||
'sidebar__file-item': this.props.name !== 'root',
|
'sidebar__file-item': this.props.name !== 'root',
|
||||||
'sidebar__file-item--selected': this.props.isSelected,
|
'sidebar__file-item--selected': this.props.isSelected,
|
||||||
'sidebar__file-item--open': this.props.isOptionsOpen,
|
'sidebar__file-item--open': this.props.isOptionsOpen,
|
||||||
'sidebar__file-item--editing': this.props.isEditingName
|
'sidebar__file-item--editing': this.props.isEditingName,
|
||||||
|
'sidebar__file-item--closed': this.props.isFolderClosed
|
||||||
});
|
});
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
|
@ -80,7 +83,24 @@ export class FileNode extends React.Component {
|
||||||
<InlineSVG src={fileUrl} />
|
<InlineSVG src={fileUrl} />
|
||||||
</span>
|
</span>
|
||||||
);
|
);
|
||||||
|
} else if (this.props.isFolderClosed) {
|
||||||
|
return (
|
||||||
|
<span
|
||||||
|
className="sidebar__file-item-icon"
|
||||||
|
onClick={() => this.props.showFolderChildren(this.props.id)}
|
||||||
|
>
|
||||||
|
<InlineSVG src={folderRightUrl} />
|
||||||
|
</span>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
return (
|
||||||
|
<span
|
||||||
|
className="sidebar__file-item-icon"
|
||||||
|
onClick={() => this.props.hideFolderChildren(this.props.id)}
|
||||||
|
>
|
||||||
|
<InlineSVG src={folderDownUrl} />
|
||||||
|
</span>
|
||||||
|
);
|
||||||
})()}
|
})()}
|
||||||
<a className="sidebar__file-item-name">{this.props.name}</a>
|
<a className="sidebar__file-item-name">{this.props.name}</a>
|
||||||
<input
|
<input
|
||||||
|
@ -179,6 +199,7 @@ FileNode.propTypes = {
|
||||||
isSelected: PropTypes.bool,
|
isSelected: PropTypes.bool,
|
||||||
isOptionsOpen: PropTypes.bool,
|
isOptionsOpen: PropTypes.bool,
|
||||||
isEditingName: PropTypes.bool,
|
isEditingName: PropTypes.bool,
|
||||||
|
isFolderClosed: PropTypes.bool,
|
||||||
setSelectedFile: PropTypes.func.isRequired,
|
setSelectedFile: PropTypes.func.isRequired,
|
||||||
showFileOptions: PropTypes.func.isRequired,
|
showFileOptions: PropTypes.func.isRequired,
|
||||||
hideFileOptions: PropTypes.func.isRequired,
|
hideFileOptions: PropTypes.func.isRequired,
|
||||||
|
@ -188,7 +209,9 @@ FileNode.propTypes = {
|
||||||
updateFileName: PropTypes.func.isRequired,
|
updateFileName: PropTypes.func.isRequired,
|
||||||
resetSelectedFile: PropTypes.func.isRequired,
|
resetSelectedFile: PropTypes.func.isRequired,
|
||||||
newFile: PropTypes.func.isRequired,
|
newFile: PropTypes.func.isRequired,
|
||||||
newFolder: PropTypes.func.isRequired
|
newFolder: PropTypes.func.isRequired,
|
||||||
|
showFolderChildren: PropTypes.func.isRequired,
|
||||||
|
hideFolderChildren: PropTypes.func.isRequired
|
||||||
};
|
};
|
||||||
|
|
||||||
function mapStateToProps(state, ownProps) {
|
function mapStateToProps(state, ownProps) {
|
||||||
|
|
|
@ -172,6 +172,20 @@ const files = (state, action) => {
|
||||||
}
|
}
|
||||||
return Object.assign({}, file, { isSelected: false });
|
return Object.assign({}, file, { isSelected: false });
|
||||||
});
|
});
|
||||||
|
case ActionTypes.SHOW_FOLDER_CHILDREN:
|
||||||
|
return state.map(file => {
|
||||||
|
if (file.id === action.id) {
|
||||||
|
return Object.assign({}, file, { isFolderClosed: false });
|
||||||
|
}
|
||||||
|
return file;
|
||||||
|
});
|
||||||
|
case ActionTypes.HIDE_FOLDER_CHILDREN:
|
||||||
|
return state.map(file => {
|
||||||
|
if (file.id === action.id) {
|
||||||
|
return Object.assign({}, file, { isFolderClosed: true });
|
||||||
|
}
|
||||||
|
return file;
|
||||||
|
});
|
||||||
default:
|
default:
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
|
@ -177,3 +177,7 @@
|
||||||
padding: #{8 / $base-font-size}rem;
|
padding: #{8 / $base-font-size}rem;
|
||||||
width: #{110 / $base-font-size}rem;
|
width: #{110 / $base-font-size}rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.sidebar__file-item--closed .file-item__children {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue