Add auto scrolling to the selected story

This commit is contained in:
igor 2018-02-19 19:20:40 +02:00
parent ae86c53e6b
commit f4bc7dc680

View File

@ -8,6 +8,15 @@ import { EVENT_ID } from './';
registerLanguage('jsx', jsx); registerLanguage('jsx', jsx);
const styles = {
selections: {
backgroundColor: 'rgba(255, 242, 60, 0.2)',
},
panel: {
width: '100%',
},
};
export default class StoryPanel extends Component { export default class StoryPanel extends Component {
constructor(props) { constructor(props) {
super(props); super(props);
@ -23,9 +32,20 @@ export default class StoryPanel extends Component {
}); });
}); });
this.setSelectedStoryRef = this.setSelectedStoryRef.bind(this);
this.lineRenderer = this.lineRenderer.bind(this); this.lineRenderer = this.lineRenderer.bind(this);
} }
componentDidUpdate() {
if (this.selectedStoryRef) {
this.selectedStoryRef.scrollIntoView();
}
}
setSelectedStoryRef(ref) {
this.selectedStoryRef = ref;
}
createPart(rows, stylesheet, useInlineStyles) { createPart(rows, stylesheet, useInlineStyles) {
return rows.map((node, i) => return rows.map((node, i) =>
createElement({ createElement({
@ -51,7 +71,9 @@ export default class StoryPanel extends Component {
return ( return (
<span> <span>
{start} {start}
<div style={{ backgroundColor: 'rgba(255, 242, 60, 0.2)' }}>{selected}</div> <div ref={this.setSelectedStoryRef} style={styles.selections}>
{selected}
</div>
{end} {end}
</span> </span>
); );
@ -67,7 +89,7 @@ export default class StoryPanel extends Component {
showLineNumbers="true" showLineNumbers="true"
style={darcula} style={darcula}
renderer={this.lineRenderer} renderer={this.lineRenderer}
customStyle={{ width: '100%' }} customStyle={styles.panel}
> >
{this.state.source} {this.state.source}
</SyntaxHighlighter> </SyntaxHighlighter>