[#1526] Add ellipsis to sidebar file names

This commit is contained in:
Cassie Tarakajian 2020-07-30 18:59:12 -04:00
parent db18ff4a28
commit 937421e90c
3 changed files with 65 additions and 5 deletions

View file

@ -10,6 +10,47 @@ import FolderRightIcon from '../../../images/triangle-arrow-right.svg';
import FolderDownIcon from '../../../images/triangle-arrow-down.svg'; import FolderDownIcon from '../../../images/triangle-arrow-down.svg';
import FileIcon from '../../../images/file.svg'; import FileIcon from '../../../images/file.svg';
function FileName({ name }) {
const nameArray = name.split('.');
if (nameArray.length > 1) {
const extension = `.${nameArray[nameArray.length - 1]}`;
const fileName = nameArray.slice(0, -1).join('');
const firstLetter = fileName[0];
const lastLetter = fileName[fileName.length - 1];
const middleText = fileName.slice(1, -1);
return (
<span className="sidebar__file-item-name-text">
<span>{firstLetter}</span>
{fileName.length > 2 &&
<span className="sidebar__file-item-name--ellipsis">{middleText}</span>
}
{fileName.length > 1 &&
<span>{lastLetter}</span>
}
<span>{extension}</span>
</span>
);
}
const firstLetter = name[0];
const lastLetter = name[name.length - 1];
const middleText = name.slice(1, -1);
return (
<span className="sidebar__file-item-name-text">
<span>{firstLetter}</span>
{name.length > 2 &&
<span className="sidebar__file-item-name--ellipsis">{middleText}</span>
}
{name.length > 1 &&
<span>{lastLetter}</span>
}
</span>
);
}
FileName.propTypes = {
name: PropTypes.string.isRequired
};
export class FileNode extends React.Component { export class FileNode extends React.Component {
constructor(props) { constructor(props) {
super(props); super(props);
@ -210,7 +251,7 @@ export class FileNode extends React.Component {
className="sidebar__file-item-name" className="sidebar__file-item-name"
onClick={this.handleFileClick} onClick={this.handleFileClick}
> >
{this.state.updatedName} <FileName name={this.state.updatedName} />
</button> </button>
<input <input
data-testid="input" data-testid="input"

View file

@ -254,7 +254,7 @@ class IDEView extends React.Component {
onChange={size => this.setState({ sidebarSize: size })} onChange={size => this.setState({ sidebarSize: size })}
onDragFinished={this._handleSidebarPaneOnDragFinished} onDragFinished={this._handleSidebarPaneOnDragFinished}
allowResize={this.props.ide.sidebarIsExpanded} allowResize={this.props.ide.sidebarIsExpanded}
minSize={20} minSize={125}
> >
<Sidebar <Sidebar
files={this.props.files} files={this.props.files}

View file

@ -110,8 +110,28 @@
} }
} }
.sidebar__file-item-name--ellipsis {
overflow-x: hidden;
white-space: nowrap;
text-overflow: ellipsis;
min-width: #{15 / $base-font-size}rem;
}
.sidebar__file-item-name-text {
display: flex;
width: 100%;
overflow: hidden;
min-width: #{50 / $base-font-size}rem;
white-space: nowrap;
text-align: left;
}
.sidebar__file-item-name { .sidebar__file-item-name {
padding: #{4 / $base-font-size}rem 0; padding: #{4 / $base-font-size}rem 0;
padding-right: #{25 / $base-font-size}rem;
font-family: Inconsolata, monospace;
font-size: #{14 / $base-font-size}rem;
overflow: hidden;
.sidebar__file-item--editing & { .sidebar__file-item--editing & {
display: none; display: none;
} }
@ -174,6 +194,8 @@
padding: 0; padding: 0;
border: 0; border: 0;
width: calc(100% - #{63 / $base-font-size}rem); width: calc(100% - #{63 / $base-font-size}rem);
font-family: Inconsolata, monospace;
font-size: #{14 / $base-font-size}rem;
.sidebar__file-item--editing & { .sidebar__file-item--editing & {
display: inline-block; display: inline-block;
} }
@ -254,9 +276,6 @@
fill: getThemifyVariable('secondary-text-color'); fill: getThemifyVariable('secondary-text-color');
} }
} }
& svg {
height: #{10 / $base-font-size}rem;
}
background-color: transparent; background-color: transparent;
border: none; border: none;
} }