Merge branch 'release-docs' into 'develop'
[akkoma] / priv / static / packs / features / account_gallery.js.map
index ac22b8cbe06f831b82d1887d9571861ba30c526e..c3ca6a4d6697020089c164fed9a510b9704a5730 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/account_gallery/components/media_item.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/account_gallery/index.js"],"names":["MediaItem","visible","displayMedia","_this","props","media","getIn","state","setState","render","label","icon","this","status","get","x","y","style","Object","jsx","className","backgroundImage","backgroundPosition","components_icon","id","permalink","to","href","onInterceptClick","handleClick","ImmutablePureComponent","ImmutablePropTypes","map","isRequired","LoadMoreMedia","onLoadMore","maxId","load_more","disabled","onClick","handleLoadMore","shouldUpdateScroll","PropTypes","func","string","AccountGallery","connect","medias","getAccountGallery","params","accountId","isLoading","hasMore","_this2","size","last","undefined","e","_e$target","target","scrollTop","scrollHeight","clientHeight","handleScrollToBottom","dispatch","expandAccountMediaTimeline","preventDefault","componentDidMount","fetchAccount","componentWillReceiveProps","nextProps","_this3","_this$props","loadOlder","column","loading_indicator","handleLoadOlder","column_back_button","react_router_scroll_4_es","scrollKey","onScroll","handleScroll","header_container","role","index","account_gallery_LoadMoreMedia","media_item_MediaItem","object","list","bool"],"mappings":"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","file":"features/account_gallery.js","sourcesContent":["import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport Permalink from '../../../components/permalink';\nimport { displayMedia } from '../../../initial_state';\nimport Icon from 'mastodon/components/icon';\n\nexport default class MediaItem extends ImmutablePureComponent {\n\n  static propTypes = {\n    media: ImmutablePropTypes.map.isRequired,\n  };\n\n  state = {\n    visible: displayMedia !== 'hide_all' && !this.props.media.getIn(['status', 'sensitive']) || displayMedia === 'show_all',\n  };\n\n  handleClick = () => {\n    if (!this.state.visible) {\n      this.setState({ visible: true });\n      return true;\n    }\n\n    return false;\n  }\n\n  render () {\n    const { media } = this.props;\n    const { visible } = this.state;\n    const status = media.get('status');\n    const focusX = media.getIn(['meta', 'focus', 'x']);\n    const focusY = media.getIn(['meta', 'focus', 'y']);\n    const x = ((focusX /  2) + .5) * 100;\n    const y = ((focusY / -2) + .5) * 100;\n    const style = {};\n\n    let label, icon;\n\n    if (media.get('type') === 'gifv') {\n      label = <span className='media-gallery__gifv__label'>GIF</span>;\n    }\n\n    if (visible) {\n      style.backgroundImage    = `url(${media.get('preview_url')})`;\n      style.backgroundPosition = `${x}% ${y}%`;\n    } else {\n      icon = (\n        <span className='account-gallery__item__icons'>\n          <Icon id='eye-slash' />\n        </span>\n      );\n    }\n\n    return (\n      <div className='account-gallery__item'>\n        <Permalink to={`/statuses/${status.get('id')}`} href={status.get('url')} style={style} onInterceptClick={this.handleClick}>\n          {icon}\n          {label}\n        </Permalink>\n      </div>\n    );\n  }\n\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport { fetchAccount } from '../../actions/accounts';\nimport { expandAccountMediaTimeline } from '../../actions/timelines';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport Column from '../ui/components/column';\nimport ColumnBackButton from '../../components/column_back_button';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { getAccountGallery } from '../../selectors';\nimport MediaItem from './components/media_item';\nimport HeaderContainer from '../account_timeline/containers/header_container';\nimport { ScrollContainer } from 'react-router-scroll-4';\nimport LoadMore from '../../components/load_more';\n\nconst mapStateToProps = (state, props) => ({\n  medias: getAccountGallery(state, props.params.accountId),\n  isLoading: state.getIn(['timelines', `account:${props.params.accountId}:media`, 'isLoading']),\n  hasMore:   state.getIn(['timelines', `account:${props.params.accountId}:media`, 'hasMore']),\n});\n\nclass LoadMoreMedia extends ImmutablePureComponent {\n\n  static propTypes = {\n    shouldUpdateScroll: PropTypes.func,\n    maxId: PropTypes.string,\n    onLoadMore: PropTypes.func.isRequired,\n  };\n\n  handleLoadMore = () => {\n    this.props.onLoadMore(this.props.maxId);\n  }\n\n  render () {\n    return (\n      <LoadMore\n        disabled={this.props.disabled}\n        onClick={this.handleLoadMore}\n      />\n    );\n  }\n\n}\n\nexport default @connect(mapStateToProps)\nclass AccountGallery extends ImmutablePureComponent {\n\n  static propTypes = {\n    params: PropTypes.object.isRequired,\n    dispatch: PropTypes.func.isRequired,\n    medias: ImmutablePropTypes.list.isRequired,\n    isLoading: PropTypes.bool,\n    hasMore: PropTypes.bool,\n  };\n\n  componentDidMount () {\n    this.props.dispatch(fetchAccount(this.props.params.accountId));\n    this.props.dispatch(expandAccountMediaTimeline(this.props.params.accountId));\n  }\n\n  componentWillReceiveProps (nextProps) {\n    if (nextProps.params.accountId !== this.props.params.accountId && nextProps.params.accountId) {\n      this.props.dispatch(fetchAccount(nextProps.params.accountId));\n      this.props.dispatch(expandAccountMediaTimeline(this.props.params.accountId));\n    }\n  }\n\n  handleScrollToBottom = () => {\n    if (this.props.hasMore) {\n      this.handleLoadMore(this.props.medias.size > 0 ? this.props.medias.last().getIn(['status', 'id']) : undefined);\n    }\n  }\n\n  handleScroll = (e) => {\n    const { scrollTop, scrollHeight, clientHeight } = e.target;\n    const offset = scrollHeight - scrollTop - clientHeight;\n\n    if (150 > offset && !this.props.isLoading) {\n      this.handleScrollToBottom();\n    }\n  }\n\n  handleLoadMore = maxId => {\n    this.props.dispatch(expandAccountMediaTimeline(this.props.params.accountId, { maxId }));\n  };\n\n  handleLoadOlder = (e) => {\n    e.preventDefault();\n    this.handleScrollToBottom();\n  }\n\n  render () {\n    const { medias, shouldUpdateScroll, isLoading, hasMore } = this.props;\n\n    let loadOlder = null;\n\n    if (!medias && isLoading) {\n      return (\n        <Column>\n          <LoadingIndicator />\n        </Column>\n      );\n    }\n\n    if (hasMore && !(isLoading && medias.size === 0)) {\n      loadOlder = <LoadMore visible={!isLoading} onClick={this.handleLoadOlder} />;\n    }\n\n    return (\n      <Column>\n        <ColumnBackButton />\n\n        <ScrollContainer scrollKey='account_gallery' shouldUpdateScroll={shouldUpdateScroll}>\n          <div className='scrollable scrollable--flex' onScroll={this.handleScroll}>\n            <HeaderContainer accountId={this.props.params.accountId} />\n\n            <div role='feed' className='account-gallery__container'>\n              {medias.map((media, index) => media === null ? (\n                <LoadMoreMedia\n                  key={'more:' + medias.getIn(index + 1, 'id')}\n                  maxId={index > 0 ? medias.getIn(index - 1, 'id') : null}\n                  onLoadMore={this.handleLoadMore}\n                />\n              ) : (\n                <MediaItem\n                  key={media.get('id')}\n                  media={media}\n                />\n              ))}\n              {loadOlder}\n            </div>\n\n            {isLoading && medias.size === 0 && (\n              <div className='scrollable__append'>\n                <LoadingIndicator />\n              </div>\n            )}\n          </div>\n        </ScrollContainer>\n      </Column>\n    );\n  }\n\n}\n"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/account_gallery/components/media_item.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/mastodon/features/account_gallery/index.js"],"names":["MediaItem","visible","displayMedia","_this","props","media","getIn","state","setState","render","label","icon","this","status","get","x","y","style","Object","jsx","className","backgroundImage","backgroundPosition","components_icon","id","permalink","to","href","onInterceptClick","handleClick","ImmutablePureComponent","ImmutablePropTypes","map","isRequired","LoadMoreMedia","onLoadMore","maxId","load_more","disabled","onClick","handleLoadMore","shouldUpdateScroll","PropTypes","func","string","AccountGallery","connect","isAccount","params","accountId","medias","getAccountGallery","isLoading","hasMore","_this2","size","last","undefined","e","_e$target","target","scrollTop","scrollHeight","clientHeight","handleScrollToBottom","dispatch","expandAccountMediaTimeline","preventDefault","componentDidMount","fetchAccount","componentWillReceiveProps","nextProps","_this3","_this$props","column","missing_indicator","loadOlder","loading_indicator","handleLoadOlder","column_back_button","react_router_scroll_4_es","scrollKey","onScroll","handleScroll","header_container","role","index","account_gallery_LoadMoreMedia","media_item_MediaItem","object","list","bool"],"mappings":"uQAOqBA,wLAMX,CACNC,QAA0B,aAAjBC,MAAgCC,EAAKC,MAAMC,MAAMC,MAAM,CAAC,SAAU,eAAkC,aAAjBJ,+CAGhF,WACZ,OAAKC,EAAKI,MAAMN,UACdE,EAAKK,SAAS,CAAEP,SAAS,KAClB,2CAMXQ,OAAA,WAAU,IAUJC,EAAOC,EATHN,EAAUO,KAAKR,MAAfC,MACAJ,EAAYW,KAAKL,MAAjBN,QACFY,EAASR,EAAMS,IAAI,UAGnBC,EAA2B,KAFlBV,EAAMC,MAAM,CAAC,OAAQ,QAAS,MAEvB,EAAK,IACrBU,EAA2B,KAFlBX,EAAMC,MAAM,CAAC,OAAQ,QAAS,OAEvB,EAAK,IACrBW,EAAQ,GAmBd,MAf0B,SAAtBZ,EAAMS,IAAI,UACZJ,EAAQQ,OAAAC,EAAA,EAAAD,CAAA,QAAME,UAAU,mCAAhB,UAGNnB,GACFgB,EAAMI,gBAAN,OAAkChB,EAAMS,IAAI,eAA5C,IACAG,EAAMK,mBAAwBP,EAA9B,KAAoCC,EAApC,KAEAL,EACEO,OAAAC,EAAA,EAAAD,CAAA,QAAME,UAAU,qCAAhB,EACEF,OAAAC,EAAA,EAAAD,CAACK,EAAA,EAAD,CAAMC,GAAG,eAMbN,OAAAC,EAAA,EAAAD,CAAA,OAAKE,UAAU,8BAAf,EACEF,OAAAC,EAAA,EAAAD,CAACO,EAAA,EAAD,CAAWC,GAAE,aAAeb,EAAOC,IAAI,MAASa,KAAMd,EAAOC,IAAI,OAAQG,MAAOA,EAAOW,iBAAkBhB,KAAKiB,kBAA9G,EACGlB,EACAD,QAlD4BoB,iBAAlB9B,cAEA,CACjBK,MAAO0B,IAAmBC,IAAIC,iGCOlC,IAOMC,iMAQa,WACf/B,EAAKC,MAAM+B,WAAWhC,EAAKC,MAAMgC,+CAGnC3B,OAAA,WACE,OACES,OAAAC,EAAA,EAAAD,CAACmB,EAAA,EAAD,CACEC,SAAU1B,KAAKR,MAAMkC,SACrBC,QAAS3B,KAAK4B,qBAhBMV,iBAAtBI,cAEe,CACjBO,mBAAoBC,IAAUC,KAC9BP,MAAOM,IAAUE,OACjBT,WAAYO,IAAUC,KAAKV,iBAmBzBY,EADUC,kBA9BQ,SAACvC,EAAOH,GAAR,MAAmB,CACzC2C,YAAaxC,EAAMD,MAAM,CAAC,WAAYF,EAAM4C,OAAOC,YACnDC,OAAQC,YAAkB5C,EAAOH,EAAM4C,OAAOC,WAC9CG,UAAW7C,EAAMD,MAAM,CAAC,YAAD,WAAyBF,EAAM4C,OAAOC,UAAtC,SAAyD,cAChFI,QAAW9C,EAAMD,MAAM,CAAC,YAAD,WAAyBF,EAAM4C,OAAOC,UAAtC,SAAyD,yNAkDzD,WACjBK,EAAKlD,MAAMiD,SACbC,EAAKd,eAAwC,EAAzBc,EAAKlD,MAAM8C,OAAOK,KAAWD,EAAKlD,MAAM8C,OAAOM,OAAOlD,MAAM,CAAC,SAAU,YAASmD,+CAIzF,SAACC,GAAM,IAAAC,EAC8BD,EAAEE,OAA5CC,EADYF,EACZE,UADYF,EACDG,aACWD,EAFVF,EACaI,aAG7B,MAAiBT,EAAKlD,MAAMgD,WAC9BE,EAAKU,qEAIQ,SAAA5B,GACfkB,EAAKlD,MAAM6D,SAASC,YAA2BZ,EAAKlD,MAAM4C,OAAOC,UAAW,CAAEb,0DAG9D,SAACsB,GACjBA,EAAES,iBACFb,EAAKU,uEAjCPI,kBAAA,WACExD,KAAKR,MAAM6D,SAASI,YAAazD,KAAKR,MAAM4C,OAAOC,YACnDrC,KAAKR,MAAM6D,SAASC,YAA2BtD,KAAKR,MAAM4C,OAAOC,eAGnEqB,0BAAA,SAA2BC,GACrBA,EAAUvB,OAAOC,YAAcrC,KAAKR,MAAM4C,OAAOC,WAAasB,EAAUvB,OAAOC,YACjFrC,KAAKR,MAAM6D,SAASI,YAAaE,EAAUvB,OAAOC,YAClDrC,KAAKR,MAAM6D,SAASC,YAA2BtD,KAAKR,MAAM4C,OAAOC,gBA4BrExC,OAAA,WAAU,IAAA+D,EAAA5D,KAAA6D,EAC8D7D,KAAKR,MAAnE8C,EADAuB,EACAvB,OAAQT,EADRgC,EACQhC,mBAAoBW,EAD5BqB,EAC4BrB,UAAWC,EADvCoB,EACuCpB,QAE/C,IAHQoB,EACgD1B,UAGtD,OACE7B,OAAAC,EAAA,EAAAD,CAACwD,EAAA,EAAD,UACExD,OAAAC,EAAA,EAAAD,CAACyD,EAAA,EAAD,KAKN,IAAIC,EAAY,KAEhB,OAAK1B,GAAUE,EAEXlC,OAAAC,EAAA,EAAAD,CAACwD,EAAA,EAAD,UACExD,OAAAC,EAAA,EAAAD,CAAC2D,EAAA,EAAD,OAKFxB,GAAaD,GAA6B,IAAhBF,EAAOK,OACnCqB,EAAY1D,OAAAC,EAAA,EAAAD,CAACmB,EAAA,EAAD,CAAUpC,SAAUmD,EAAWb,QAAS3B,KAAKkE,mBAIzD5D,OAAAC,EAAA,EAAAD,CAACwD,EAAA,EAAD,UACExD,OAAAC,EAAA,EAAAD,CAAC6D,EAAA,EAAD,IAEA7D,OAAAC,EAAA,EAAAD,CAAC8D,EAAA,EAAD,CAAiBC,UAAU,kBAAkBxC,mBAAoBA,QAAjE,EACEvB,OAAAC,EAAA,EAAAD,CAAA,OAAKE,UAAU,8BAA8B8D,SAAUtE,KAAKuE,mBAA5D,EACEjE,OAAAC,EAAA,EAAAD,CAACkE,EAAA,EAAD,CAAiBnC,UAAWrC,KAAKR,MAAM4C,OAAOC,YAE9C/B,OAAAC,EAAA,EAAAD,CAAA,OAAKmE,KAAK,OAAOjE,UAAU,mCAA3B,EACG8B,EAAOlB,IAAI,SAAC3B,EAAOiF,GAAR,OAA4B,OAAVjF,EAC5Ba,OAAAC,EAAA,EAAAD,CAACqE,EAAD,CAEEnD,MAAe,EAARkD,EAAYpC,EAAO5C,MAAMgF,EAAQ,EAAG,MAAQ,KACnDnD,WAAYqC,EAAKhC,gBAFZ,QAAUU,EAAO5C,MAAMgF,EAAQ,EAAG,OAKzCpE,OAAAC,EAAA,EAAAD,CAACsE,EAAD,CAEEnF,MAAOA,GADFA,EAAMS,IAAI,SAIlB8D,GAGFxB,GAA6B,IAAhBF,EAAOK,MACnBrC,OAAAC,EAAA,EAAAD,CAAA,OAAKE,UAAU,2BAAf,EACEF,OAAAC,EAAA,EAAAD,CAAC2D,EAAA,EAAD,aAlGa/C,+BAER,CACjBkB,OAAQN,IAAU+C,OAAOxD,WACzBgC,SAAUvB,IAAUC,KAAKV,WACzBiB,OAAQnB,IAAmB2D,KAAKzD,WAChCmB,UAAWV,IAAUiD,KACrBtC,QAASX,IAAUiD,KACnB5C,UAAWL,IAAUiD","file":"features/account_gallery.js","sourcesContent":["import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport Permalink from '../../../components/permalink';\nimport { displayMedia } from '../../../initial_state';\nimport Icon from 'mastodon/components/icon';\n\nexport default class MediaItem extends ImmutablePureComponent {\n\n  static propTypes = {\n    media: ImmutablePropTypes.map.isRequired,\n  };\n\n  state = {\n    visible: displayMedia !== 'hide_all' && !this.props.media.getIn(['status', 'sensitive']) || displayMedia === 'show_all',\n  };\n\n  handleClick = () => {\n    if (!this.state.visible) {\n      this.setState({ visible: true });\n      return true;\n    }\n\n    return false;\n  }\n\n  render () {\n    const { media } = this.props;\n    const { visible } = this.state;\n    const status = media.get('status');\n    const focusX = media.getIn(['meta', 'focus', 'x']);\n    const focusY = media.getIn(['meta', 'focus', 'y']);\n    const x = ((focusX /  2) + .5) * 100;\n    const y = ((focusY / -2) + .5) * 100;\n    const style = {};\n\n    let label, icon;\n\n    if (media.get('type') === 'gifv') {\n      label = <span className='media-gallery__gifv__label'>GIF</span>;\n    }\n\n    if (visible) {\n      style.backgroundImage    = `url(${media.get('preview_url')})`;\n      style.backgroundPosition = `${x}% ${y}%`;\n    } else {\n      icon = (\n        <span className='account-gallery__item__icons'>\n          <Icon id='eye-slash' />\n        </span>\n      );\n    }\n\n    return (\n      <div className='account-gallery__item'>\n        <Permalink to={`/statuses/${status.get('id')}`} href={status.get('url')} style={style} onInterceptClick={this.handleClick}>\n          {icon}\n          {label}\n        </Permalink>\n      </div>\n    );\n  }\n\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport { fetchAccount } from '../../actions/accounts';\nimport { expandAccountMediaTimeline } from '../../actions/timelines';\nimport LoadingIndicator from '../../components/loading_indicator';\nimport Column from '../ui/components/column';\nimport ColumnBackButton from '../../components/column_back_button';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { getAccountGallery } from '../../selectors';\nimport MediaItem from './components/media_item';\nimport HeaderContainer from '../account_timeline/containers/header_container';\nimport { ScrollContainer } from 'react-router-scroll-4';\nimport LoadMore from '../../components/load_more';\nimport MissingIndicator from 'mastodon/components/missing_indicator';\n\nconst mapStateToProps = (state, props) => ({\n  isAccount: !!state.getIn(['accounts', props.params.accountId]),\n  medias: getAccountGallery(state, props.params.accountId),\n  isLoading: state.getIn(['timelines', `account:${props.params.accountId}:media`, 'isLoading']),\n  hasMore:   state.getIn(['timelines', `account:${props.params.accountId}:media`, 'hasMore']),\n});\n\nclass LoadMoreMedia extends ImmutablePureComponent {\n\n  static propTypes = {\n    shouldUpdateScroll: PropTypes.func,\n    maxId: PropTypes.string,\n    onLoadMore: PropTypes.func.isRequired,\n  };\n\n  handleLoadMore = () => {\n    this.props.onLoadMore(this.props.maxId);\n  }\n\n  render () {\n    return (\n      <LoadMore\n        disabled={this.props.disabled}\n        onClick={this.handleLoadMore}\n      />\n    );\n  }\n\n}\n\nexport default @connect(mapStateToProps)\nclass AccountGallery extends ImmutablePureComponent {\n\n  static propTypes = {\n    params: PropTypes.object.isRequired,\n    dispatch: PropTypes.func.isRequired,\n    medias: ImmutablePropTypes.list.isRequired,\n    isLoading: PropTypes.bool,\n    hasMore: PropTypes.bool,\n    isAccount: PropTypes.bool,\n  };\n\n  componentDidMount () {\n    this.props.dispatch(fetchAccount(this.props.params.accountId));\n    this.props.dispatch(expandAccountMediaTimeline(this.props.params.accountId));\n  }\n\n  componentWillReceiveProps (nextProps) {\n    if (nextProps.params.accountId !== this.props.params.accountId && nextProps.params.accountId) {\n      this.props.dispatch(fetchAccount(nextProps.params.accountId));\n      this.props.dispatch(expandAccountMediaTimeline(this.props.params.accountId));\n    }\n  }\n\n  handleScrollToBottom = () => {\n    if (this.props.hasMore) {\n      this.handleLoadMore(this.props.medias.size > 0 ? this.props.medias.last().getIn(['status', 'id']) : undefined);\n    }\n  }\n\n  handleScroll = (e) => {\n    const { scrollTop, scrollHeight, clientHeight } = e.target;\n    const offset = scrollHeight - scrollTop - clientHeight;\n\n    if (150 > offset && !this.props.isLoading) {\n      this.handleScrollToBottom();\n    }\n  }\n\n  handleLoadMore = maxId => {\n    this.props.dispatch(expandAccountMediaTimeline(this.props.params.accountId, { maxId }));\n  };\n\n  handleLoadOlder = (e) => {\n    e.preventDefault();\n    this.handleScrollToBottom();\n  }\n\n  render () {\n    const { medias, shouldUpdateScroll, isLoading, hasMore, isAccount } = this.props;\n\n    if (!isAccount) {\n      return (\n        <Column>\n          <MissingIndicator />\n        </Column>\n      );\n    }\n\n    let loadOlder = null;\n\n    if (!medias && isLoading) {\n      return (\n        <Column>\n          <LoadingIndicator />\n        </Column>\n      );\n    }\n\n    if (hasMore && !(isLoading && medias.size === 0)) {\n      loadOlder = <LoadMore visible={!isLoading} onClick={this.handleLoadOlder} />;\n    }\n\n    return (\n      <Column>\n        <ColumnBackButton />\n\n        <ScrollContainer scrollKey='account_gallery' shouldUpdateScroll={shouldUpdateScroll}>\n          <div className='scrollable scrollable--flex' onScroll={this.handleScroll}>\n            <HeaderContainer accountId={this.props.params.accountId} />\n\n            <div role='feed' className='account-gallery__container'>\n              {medias.map((media, index) => media === null ? (\n                <LoadMoreMedia\n                  key={'more:' + medias.getIn(index + 1, 'id')}\n                  maxId={index > 0 ? medias.getIn(index - 1, 'id') : null}\n                  onLoadMore={this.handleLoadMore}\n                />\n              ) : (\n                <MediaItem\n                  key={media.get('id')}\n                  media={media}\n                />\n              ))}\n              {loadOlder}\n            </div>\n\n            {isLoading && medias.size === 0 && (\n              <div className='scrollable__append'>\n                <LoadingIndicator />\n              </div>\n            )}\n          </div>\n        </ScrollContainer>\n      </Column>\n    );\n  }\n\n}\n"],"sourceRoot":""}
\ No newline at end of file