diff options
author | Samy Pesse <samypesse@gmail.com> | 2016-10-13 13:23:19 +0200 |
---|---|---|
committer | Samy Pesse <samypesse@gmail.com> | 2016-10-13 13:23:19 +0200 |
commit | c42c5897fee1841d2be0207faeda81bc42f250e2 (patch) | |
tree | 45fd9a773ba05ae362390e63ce0f2eaaa0154ede /packages/gitbook-plugin-sharing/src/index.js | |
parent | 3aea3e5d88384822440517c9a2b722c405547155 (diff) | |
download | gitbook-c42c5897fee1841d2be0207faeda81bc42f250e2.zip gitbook-c42c5897fee1841d2be0207faeda81bc42f250e2.tar.gz gitbook-c42c5897fee1841d2be0207faeda81bc42f250e2.tar.bz2 |
Refactor code of plugin sharing
Diffstat (limited to 'packages/gitbook-plugin-sharing/src/index.js')
-rw-r--r-- | packages/gitbook-plugin-sharing/src/index.js | 137 |
1 files changed, 2 insertions, 135 deletions
diff --git a/packages/gitbook-plugin-sharing/src/index.js b/packages/gitbook-plugin-sharing/src/index.js index 357ccbb..174adfc 100644 --- a/packages/gitbook-plugin-sharing/src/index.js +++ b/packages/gitbook-plugin-sharing/src/index.js @@ -1,142 +1,9 @@ const GitBook = require('gitbook-core'); -const { - React, - Dropdown -} = GitBook; -const { string, arrayOf, shape, func } = React.PropTypes; - -const SITES = require('./SITES'); -const optionsShape = require('./optionsShape'); -const siteShape = shape({ - label: string.isRequired, - icon: string.isRequired, - onShare: func.isRequired -}); +const SharingButtons = require('./components/SharingButtons'); module.exports = GitBook.createPlugin({ activate: (dispatch, getState, { Components }) => { // Dispatch initialization actions - dispatch(Components.registerComponent(Sharing, { role: 'toolbar:buttons:right' })); - }, - deactivate: (dispatch, getState) => { - // Dispatch cleanup actions - }, - reduce: (state, action) => state -}); - -/** - * Displays the group of sharing buttons - */ -let Sharing = React.createClass({ - propTypes: { - options: optionsShape.isRequired, - page: GitBook.Shapes.Page.isRequired - }, - - onShare(site) { - site.onShare(location.href, this.props.page.title); - }, - - render() { - const { options } = this.props; - - // Highlighted sites - const mainButtons = SITES - .ALL - .filter(id => options[id]) - .map(id => <SiteButton key={id} onShare={this.onShare} site={SITES[id]} />); - - // Other sites - let shareButton = undefined; - if (options.all.length > 0) { - shareButton = ( - <ShareButton siteIds={options.all} - onShare={this.onShare} /> - ); - } - - return ( - <GitBook.ButtonGroup> - { mainButtons } - { shareButton } - </GitBook.ButtonGroup> - ); - } -}); - -function mapStateToProps(state) { - let options = state.config.getIn(['pluginsConfig', 'sharing']); - if (options) { - options = options.toJS(); - } else { - options = { all: [] }; - } - - return { - page: state.page, - options - }; -} - -Sharing = GitBook.connect(Sharing, mapStateToProps); - -// An individual site sharing button -const SiteButton = React.createClass({ - propTypes: { - site: siteShape.isRequired, - onShare: func.isRequired - }, - - onClick(e) { - e.preventDefault(); - this.props.onShare(this.props.site); - }, - - render() { - const { site } = this.props; - - return ( - <GitBook.Button onClick={this.onClick}> - <GitBook.Icon id={site.icon}/> - </GitBook.Button> - ); - } -}); - -// Share button with dropdown list of sites -const ShareButton = React.createClass({ - propTypes: { - siteIds: arrayOf(string).isRequired, - onShare: func.isRequired - }, - - getInitialState() { - return { open: false }; - }, - - onToggle() { - this.setState({ open: !this.state.open }); - }, - - render() { - const { siteIds, onShare } = this.props; - - const items = siteIds.map((id) => ( - <Dropdown.Item onClick={() => onShare(SITES[id])} key={id}> - {SITES[id].label} - </Dropdown.Item> - )); - - return ( - <Dropdown.Container> - <GitBook.Button onClick={this.onToggle}> - <GitBook.Icon id="share-alt" /> - </GitBook.Button> - - <Dropdown.Menu open={this.state.open}> - {items} - </Dropdown.Menu> - </Dropdown.Container> - ); + dispatch(Components.registerComponent(SharingButtons, { role: 'toolbar:buttons:right' })); } }); |