import React from 'react' import styles from './SnippetTab.styl' import CSSModules from 'browser/lib/CSSModules' import dataApi from 'browser/main/lib/dataApi' import i18n from 'browser/lib/i18n' import eventEmitter from 'browser/main/lib/eventEmitter' import context from 'browser/lib/context' class SnippetList extends React.Component { constructor(props) { super(props) this.state = { snippets: [] } } componentDidMount() { this.reloadSnippetList() eventEmitter.on('snippetList:reload', this.reloadSnippetList.bind(this)) } reloadSnippetList() { dataApi.fetchSnippet().then(snippets => { this.setState({ snippets }) this.props.onSnippetSelect(this.props.currentSnippet) }) } handleSnippetContextMenu(snippet) { context.popup([ { label: i18n.__('Delete snippet'), click: () => this.deleteSnippet(snippet) } ]) } deleteSnippet(snippet) { dataApi .deleteSnippet(snippet) .then(() => { this.reloadSnippetList() this.props.onSnippetDeleted(snippet) }) .catch(err => { throw err }) } handleSnippetClick(snippet) { this.props.onSnippetSelect(snippet) } createSnippet() { dataApi .createSnippet() .then(() => { this.reloadSnippetList() // scroll to end of list when added new snippet const snippetList = document.getElementById('snippets') snippetList.scrollTop = snippetList.scrollHeight }) .catch(err => { throw err }) } defineSnippetStyleName(snippet) { const { currentSnippet } = this.props if (currentSnippet == null) { return 'snippet-item' } if (currentSnippet.id === snippet.id) { return 'snippet-item-selected' } else { return 'snippet-item' } } render() { const { snippets } = this.state return (
) } } export default CSSModules(SnippetList, styles)