Added Title component for the layout
This commit is contained in:
@ -1,5 +1,4 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import _truncate from 'lodash/truncate';
|
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import Link from 'react-router/lib/Link';
|
import Link from 'react-router/lib/Link';
|
||||||
|
|
||||||
@ -11,7 +10,7 @@ import styles from './Layout.scss';
|
|||||||
class Layout extends React.Component {
|
class Layout extends React.Component {
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
actions: React.PropTypes.node,
|
actions: React.PropTypes.node,
|
||||||
title: React.PropTypes.string,
|
title: React.PropTypes.node,
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
@ -22,11 +21,7 @@ class Layout extends React.Component {
|
|||||||
<Link to="/">{ this.props.teamName }</Link>
|
<Link to="/">{ this.props.teamName }</Link>
|
||||||
</div>
|
</div>
|
||||||
<Flex align="center" className={ styles.title }>
|
<Flex align="center" className={ styles.title }>
|
||||||
{ this.props.title ? (
|
{ this.props.title }
|
||||||
<span title={this.props.title}>{ _truncate(this.props.title, 60) }</span>
|
|
||||||
) : (
|
|
||||||
<span className={ styles.untitled }>Untitled document</span>
|
|
||||||
)}
|
|
||||||
</Flex>
|
</Flex>
|
||||||
<Flex direction="row">
|
<Flex direction="row">
|
||||||
<Flex align="center" className={ styles.actions }>
|
<Flex align="center" className={ styles.actions }>
|
||||||
|
@ -33,15 +33,7 @@
|
|||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.title {
|
|
||||||
color: #444;
|
|
||||||
}
|
|
||||||
|
|
||||||
.actions a {
|
.actions a {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
margin-right: 15px;
|
margin-right: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.untitled {
|
|
||||||
color: #ccc;
|
|
||||||
}
|
|
38
src/components/Layout/components/Title/Title.js
Normal file
38
src/components/Layout/components/Title/Title.js
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import _truncate from 'lodash/truncate';
|
||||||
|
|
||||||
|
import styles from './Title.scss';
|
||||||
|
import classNames from 'classnames/bind';
|
||||||
|
const cx = classNames.bind(styles);
|
||||||
|
|
||||||
|
const Title = (props) => {
|
||||||
|
let title;
|
||||||
|
if (props.truncate) {
|
||||||
|
title = _truncate(props.children, props.truncate);
|
||||||
|
} else {
|
||||||
|
title = props.children;
|
||||||
|
}
|
||||||
|
|
||||||
|
let usePlaceholder;
|
||||||
|
if (props.children === null && props.placeholder) {
|
||||||
|
title = props.placeholder;
|
||||||
|
usePlaceholder = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return(
|
||||||
|
<span
|
||||||
|
title={ props.children }
|
||||||
|
className={ cx(styles.title, { untitled: usePlaceholder })}
|
||||||
|
>
|
||||||
|
{ title }
|
||||||
|
</span>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
Title.propTypes = {
|
||||||
|
children: React.PropTypes.string,
|
||||||
|
truncate: React.PropTypes.number,
|
||||||
|
placeholder: React.PropTypes.string,
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Title;
|
7
src/components/Layout/components/Title/Title.scss
Normal file
7
src/components/Layout/components/Title/Title.scss
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
.title {
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
.untitled {
|
||||||
|
color: #ccc;
|
||||||
|
}
|
2
src/components/Layout/components/Title/index.js
Normal file
2
src/components/Layout/components/Title/index.js
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
import Title from './Title';
|
||||||
|
export default Title;
|
@ -1,2 +1,8 @@
|
|||||||
import Layout from './Layout';
|
import Layout from './Layout';
|
||||||
export default Layout;
|
import Title from './components/Title';
|
||||||
|
|
||||||
|
export default Layout;
|
||||||
|
|
||||||
|
export {
|
||||||
|
Title,
|
||||||
|
};
|
||||||
|
@ -8,7 +8,7 @@ import { fetchAtlasAsync } from 'actions/AtlasActions';
|
|||||||
// Temp
|
// Temp
|
||||||
import { client } from 'utils/ApiClient';
|
import { client } from 'utils/ApiClient';
|
||||||
|
|
||||||
import Layout from 'components/Layout';
|
import Layout, { Title } from 'components/Layout';
|
||||||
import AtlasPreviewLoading from 'components/AtlasPreviewLoading';
|
import AtlasPreviewLoading from 'components/AtlasPreviewLoading';
|
||||||
import CenteredContent from 'components/CenteredContent';
|
import CenteredContent from 'components/CenteredContent';
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ class Atlas extends React.Component {
|
|||||||
actions={(
|
actions={(
|
||||||
<Link to={ `/atlas/${data.id}/new` }>New document</Link>
|
<Link to={ `/atlas/${data.id}/new` }>New document</Link>
|
||||||
)}
|
)}
|
||||||
title={ data.name }
|
title={ <Title>{ data.name }</Title> }
|
||||||
>
|
>
|
||||||
<CenteredContent>
|
<CenteredContent>
|
||||||
{ this.state.isLoading ? (
|
{ this.state.isLoading ? (
|
||||||
|
@ -10,7 +10,7 @@ import {
|
|||||||
import styles from './Editor.scss';
|
import styles from './Editor.scss';
|
||||||
import 'assets/styles/codemirror.css';
|
import 'assets/styles/codemirror.css';
|
||||||
|
|
||||||
import Layout from 'components/Layout';
|
import Layout, { Title } from 'components/Layout';
|
||||||
import Flex from 'components/Flex';
|
import Flex from 'components/Flex';
|
||||||
import MarkdownEditor from 'components/MarkdownEditor';
|
import MarkdownEditor from 'components/MarkdownEditor';
|
||||||
|
|
||||||
@ -26,6 +26,15 @@ class Editor extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
let title = (
|
||||||
|
<Title
|
||||||
|
truncate={ 60 }
|
||||||
|
placeholder={ "Untitle document" }
|
||||||
|
>
|
||||||
|
{ this.props.title }
|
||||||
|
</Title>
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Layout
|
<Layout
|
||||||
actions={(
|
actions={(
|
||||||
@ -34,15 +43,13 @@ class Editor extends Component {
|
|||||||
<MoreAction />
|
<MoreAction />
|
||||||
</Flex>
|
</Flex>
|
||||||
)}
|
)}
|
||||||
title={ this.props.title }
|
title={ title }
|
||||||
>
|
>
|
||||||
|
<MarkdownEditor
|
||||||
<MarkdownEditor
|
onChange={ this.props.updateText }
|
||||||
onChange={ this.props.updateText }
|
text={ this.props.text }
|
||||||
text={ this.props.text }
|
replaceText={this.props.replaceText}
|
||||||
replaceText={this.props.replaceText}
|
/>
|
||||||
/>
|
|
||||||
|
|
||||||
</Layout>
|
</Layout>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user