[#1526] Add ellipsis to sidebar file names
This commit is contained in:
parent
db18ff4a28
commit
937421e90c
3 changed files with 65 additions and 5 deletions
|
@ -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"
|
||||||
|
|
|
@ -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}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue