diff options
author | Thibaut Girka <thib@sitedethib.com> | 2018-05-17 16:53:58 +0200 |
---|---|---|
committer | Thibaut Girka <thib@sitedethib.com> | 2018-05-17 18:37:00 +0200 |
commit | 94db024e4c42027e8c03bf0ecd2aec26ee73a56c (patch) | |
tree | 1b4d6b6ed70d4a2415512d556a22650f57666825 /app/javascript/flavours/glitch/containers | |
parent | dd1d98f9cf405104ef106ee5f376bd09815dac42 (diff) |
[Glitch] Combine similar components into one on public UI
Port f9afd06221baf7f635b346dfbe350652ba6ffbd0 to glitch-soc
Diffstat (limited to 'app/javascript/flavours/glitch/containers')
-rw-r--r-- | app/javascript/flavours/glitch/containers/cards_container.js | 59 | ||||
-rw-r--r-- | app/javascript/flavours/glitch/containers/media_container.js (renamed from app/javascript/flavours/glitch/containers/media_galleries_container.js) | 39 | ||||
-rw-r--r-- | app/javascript/flavours/glitch/containers/video_container.js | 26 |
3 files changed, 23 insertions, 101 deletions
diff --git a/app/javascript/flavours/glitch/containers/cards_container.js b/app/javascript/flavours/glitch/containers/cards_container.js deleted file mode 100644 index 1cf980f65..000000000 --- a/app/javascript/flavours/glitch/containers/cards_container.js +++ /dev/null @@ -1,59 +0,0 @@ -import React, { Fragment } from 'react'; -import ReactDOM from 'react-dom'; -import PropTypes from 'prop-types'; -import { IntlProvider, addLocaleData } from 'react-intl'; -import { getLocale } from '../locales'; -import Card from 'flavours/glitch/features/status/components/card'; -import ModalRoot from 'flavours/glitch/components/modal_root'; -import MediaModal from 'flavours/glitch/features/ui/components/media_modal'; -import { fromJS } from 'immutable'; - -const { localeData, messages } = getLocale(); -addLocaleData(localeData); - -export default class CardsContainer extends React.PureComponent { - - static propTypes = { - locale: PropTypes.string, - cards: PropTypes.object.isRequired, - }; - - state = { - media: null, - }; - - handleOpenCard = (media) => { - document.body.classList.add('card-standalone__body'); - this.setState({ media }); - } - - handleCloseCard = () => { - document.body.classList.remove('card-standalone__body'); - this.setState({ media: null }); - } - - render () { - const { locale, cards } = this.props; - - return ( - <IntlProvider locale={locale} messages={messages}> - <Fragment> - {[].map.call(cards, container => { - const { card, ...props } = JSON.parse(container.getAttribute('data-props')); - - return ReactDOM.createPortal( - <Card card={fromJS(card)} onOpenMedia={this.handleOpenCard} {...props} />, - container, - ); - })} - <ModalRoot onClose={this.handleCloseCard}> - {this.state.media && ( - <MediaModal media={this.state.media} index={0} onClose={this.handleCloseCard} /> - )} - </ModalRoot> - </Fragment> - </IntlProvider> - ); - } - -} diff --git a/app/javascript/flavours/glitch/containers/media_galleries_container.js b/app/javascript/flavours/glitch/containers/media_container.js index a69457882..b79876419 100644 --- a/app/javascript/flavours/glitch/containers/media_galleries_container.js +++ b/app/javascript/flavours/glitch/containers/media_container.js @@ -1,9 +1,11 @@ -import React from 'react'; +import React, { PureComponent, Fragment } from 'react'; import ReactDOM from 'react-dom'; import PropTypes from 'prop-types'; import { IntlProvider, addLocaleData } from 'react-intl'; import { getLocale } from 'mastodon/locales'; import MediaGallery from 'flavours/glitch/components/media_gallery'; +import Video from 'flavours/glitch/features/video'; +import Card from 'flavours/glitch/features/status/components/card'; import ModalRoot from 'flavours/glitch/components/modal_root'; import MediaModal from 'flavours/glitch/features/ui/components/media_modal'; import { fromJS } from 'immutable'; @@ -11,11 +13,13 @@ import { fromJS } from 'immutable'; const { localeData, messages } = getLocale(); addLocaleData(localeData); -export default class MediaGalleriesContainer extends React.PureComponent { +const MEDIA_COMPONENTS = { MediaGallery, Video, Card }; + +export default class MediaContainer extends PureComponent { static propTypes = { locale: PropTypes.string.isRequired, - galleries: PropTypes.object.isRequired, + components: PropTypes.object.isRequired, }; state = { @@ -24,31 +28,34 @@ export default class MediaGalleriesContainer extends React.PureComponent { }; handleOpenMedia = (media, index) => { - document.body.classList.add('media-gallery-standalone__body'); + document.body.classList.add('media-standalone__body'); this.setState({ media, index }); } handleCloseMedia = () => { - document.body.classList.remove('media-gallery-standalone__body'); + document.body.classList.remove('media-standalone__body'); this.setState({ media: null, index: null }); } render () { - const { locale, galleries } = this.props; + const { locale, components } = this.props; return ( <IntlProvider locale={locale} messages={messages}> - <React.Fragment> - {[].map.call(galleries, gallery => { - const { media, ...props } = JSON.parse(gallery.getAttribute('data-props')); + <Fragment> + {[].map.call(components, (component, i) => { + const componentName = component.getAttribute('data-component'); + const Component = MEDIA_COMPONENTS[componentName]; + const { media, card, ...props } = JSON.parse(component.getAttribute('data-props')); + + Object.assign(props, { + ...(media ? { media: fromJS(media) } : {}), + ...(card ? { card: fromJS(card) } : {}), + }); return ReactDOM.createPortal( - <MediaGallery - {...props} - media={fromJS(media)} - onOpenMedia={this.handleOpenMedia} - />, - gallery + <Component onOpenMedia={this.handleOpenMedia} {...props} key={`media-${i}`} />, + component, ); })} <ModalRoot onClose={this.handleCloseMedia}> @@ -60,7 +67,7 @@ export default class MediaGalleriesContainer extends React.PureComponent { /> )} </ModalRoot> - </React.Fragment> + </Fragment> </IntlProvider> ); } diff --git a/app/javascript/flavours/glitch/containers/video_container.js b/app/javascript/flavours/glitch/containers/video_container.js deleted file mode 100644 index b206e9a10..000000000 --- a/app/javascript/flavours/glitch/containers/video_container.js +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { IntlProvider, addLocaleData } from 'react-intl'; -import { getLocale } from 'mastodon/locales'; -import Video from 'flavours/glitch/features/video'; - -const { localeData, messages } = getLocale(); -addLocaleData(localeData); - -export default class VideoContainer extends React.PureComponent { - - static propTypes = { - locale: PropTypes.string.isRequired, - }; - - render () { - const { locale, ...props } = this.props; - - return ( - <IntlProvider locale={locale} messages={messages}> - <Video {...props} /> - </IntlProvider> - ); - } - -} |