Merging with develop
[akkoma] / priv / static / packs / flavours / glitch / async / account_gallery.js.map
index f66a420be76c4130bfbcd97022b5efae9a5a2da4..bc4e22a5e0649057cead9da58effe0842219b99d 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/flavours/glitch/features/account_gallery/components/media_item.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/flavours/glitch/features/account_gallery/index.js"],"names":["MediaItem","visible","displayMedia","_this","props","media","getIn","state","setState","render","label","icon","title","this","status","get","x","y","style","Object","jsx","className","backgroundImage","backgroundPosition","permalink","to","href","onInterceptClick","handleClick","ImmutablePureComponent","ImmutablePropTypes","map","isRequired","LoadMoreMedia","onLoadMore","maxId","load_more","disabled","onClick","handleLoadMore","PropTypes","string","func","AccountGallery","connect","medias","getAccountGallery","params","accountId","isLoading","hasMore","_this2","size","last","undefined","e","_e$target","target","scrollTop","scrollHeight","clientHeight","handleScrollToBottom","dispatch","expandAccountMediaTimeline","preventDefault","prevRouterProps","_ref","location","mastodonModalOpen","componentDidMount","fetchAccount","componentWillReceiveProps","nextProps","_this3","_this$props","loadOlder","column","loading_indicator","handleLoadOlder","column_back_button","react_router_scroll_4_es","scrollKey","shouldUpdateScroll","onScroll","handleScroll","header_container","role","index","account_gallery_LoadMoreMedia","media_item_MediaItem","object","list","bool"],"mappings":"+PAMqBA,qMAMX,CACNC,QAA0B,aAAjBC,MAAgCC,EAAKC,MAAMC,MAAMC,MAAM,CAAC,SAAU,eAAkC,aAAjBJ,4DAGhF,WACZ,OAAKC,EAAKI,MAAMN,UACdE,EAAKK,SAAS,CAAEP,SAAS,KAClB,2CAMXQ,OAAA,WAAU,IAUJC,EAAOC,EAAMC,EATTP,EAAUQ,KAAKT,MAAfC,MACAJ,EAAYY,KAAKN,MAAjBN,QACFa,EAAST,EAAMU,IAAI,UAGnBC,EAA2B,KAFlBX,EAAMC,MAAM,CAAC,OAAQ,QAAS,MAEvB,EAAK,IACrBW,EAA2B,KAFlBZ,EAAMC,MAAM,CAAC,OAAQ,QAAS,OAEvB,EAAK,IACrBY,EAAQ,GAqBd,MAjB0B,SAAtBb,EAAMU,IAAI,UACZL,EAAQS,OAAAC,EAAA,EAAAD,CAAA,QAAME,UAAU,mCAAhB,UAMRT,EAHEX,GACFiB,EAAMI,gBAAN,OAAkCjB,EAAMU,IAAI,eAA5C,IACAG,EAAMK,mBAAwBP,EAA9B,KAAoCC,EAApC,IAC2BZ,EAAMU,IAAI,iBAErCJ,EACEQ,OAAAC,EAAA,EAAAD,CAAA,QAAME,UAAU,qCAAhB,EACEF,OAAAC,EAAA,EAAAD,CAAA,KAAGE,UAAU,qBAGTP,EAAOC,IAAI,iBAAmBV,EAAMU,IAAI,gBAIhDI,OAAAC,EAAA,EAAAD,CAAA,OAAKE,UAAU,8BAAf,EACEF,OAAAC,EAAA,EAAAD,CAACK,EAAA,EAAD,CACEC,GAAE,aAAeX,EAAOC,IAAI,MAC5BW,KAAMZ,EAAOC,IAAI,OACjBG,MAAOA,EACPN,MAAOA,EACPe,iBAAkBd,KAAKe,kBALzB,EAOGjB,EACAD,QA1D4BmB,iBAAlB7B,cAEA,CACjBK,MAAOyB,IAAmBC,IAAIC,wFCOlC,IAMMC,8MAOa,WACf9B,EAAKC,MAAM8B,WAAW/B,EAAKC,MAAM+B,+CAGnC1B,OAAA,WACE,OACEU,OAAAC,EAAA,EAAAD,CAACiB,EAAA,EAAD,CACEC,SAAUxB,KAAKT,MAAMiC,SACrBC,QAASzB,KAAK0B,qBAfMV,iBAAtBI,cAEe,CACjBE,MAAOK,IAAUC,OACjBP,WAAYM,IAAUE,KAAKV,iBAmBVW,EADpBC,kBA5BuB,SAACrC,EAAOH,GAAR,MAAmB,CACzCyC,OAAQC,YAAkBvC,EAAOH,EAAM2C,OAAOC,WAC9CC,UAAW1C,EAAMD,MAAM,CAAC,YAAD,WAAyBF,EAAM2C,OAAOC,UAAtC,SAAyD,cAChFE,QAAW3C,EAAMD,MAAM,CAAC,YAAD,WAAyBF,EAAM2C,OAAOC,UAAtC,SAAyD,sOAgDzD,WACjBG,EAAK/C,MAAM8C,SACbC,EAAKZ,eAAwC,EAAzBY,EAAK/C,MAAMyC,OAAOO,KAAWD,EAAK/C,MAAMyC,OAAOQ,OAAO/C,MAAM,CAAC,SAAU,YAASgD,4DAIzF,SAACC,GAAM,IAAAC,EAC8BD,EAAEE,OAA5CC,EADYF,EACZE,UADYF,EACDG,aACWD,EAFVF,EACaI,aAG7B,MAAiBT,EAAK/C,MAAM6C,WAC9BE,EAAKU,kFAIQ,SAAA1B,GACfgB,EAAK/C,MAAM0D,SAASC,YAA2BZ,EAAK/C,MAAM2C,OAAOC,UAAW,CAAEb,uEAG9D,SAACoB,GACjBA,EAAES,iBACFb,EAAKU,sFAGc,SAACI,EAADC,GAAmC,IAAfC,EAAeD,EAAfC,SACvC,UAAOF,GAAmB,IAAIE,UAAY,IAAI5D,OAAS,IAAI6D,qBAClDD,EAAS5D,OAAS4D,EAAS5D,MAAM6D,mEAtC5CC,kBAAA,WACExD,KAAKT,MAAM0D,SAASQ,YAAazD,KAAKT,MAAM2C,OAAOC,YACnDnC,KAAKT,MAAM0D,SAASC,YAA2BlD,KAAKT,MAAM2C,OAAOC,eAGnEuB,0BAAA,SAA2BC,GACrBA,EAAUzB,OAAOC,YAAcnC,KAAKT,MAAM2C,OAAOC,WAAawB,EAAUzB,OAAOC,YACjFnC,KAAKT,MAAM0D,SAASQ,YAAaE,EAAUzB,OAAOC,YAClDnC,KAAKT,MAAM0D,SAASC,YAA2BlD,KAAKT,MAAM2C,OAAOC,gBAiCrEvC,OAAA,WAAU,IAAAgE,EAAA5D,KAAA6D,EAC+B7D,KAAKT,MAApCyC,EADA6B,EACA7B,OAAQI,EADRyB,EACQzB,UAAWC,EADnBwB,EACmBxB,QAEvByB,EAAY,KAEhB,OAAK9B,GAAUI,EAEX9B,OAAAC,EAAA,EAAAD,CAACyD,EAAA,EAAD,UACEzD,OAAAC,EAAA,EAAAD,CAAC0D,EAAA,EAAD,OAKF3B,GAAaD,GAA6B,IAAhBJ,EAAOO,OACnCuB,EAAYxD,OAAAC,EAAA,EAAAD,CAACiB,EAAA,EAAD,CAAUnC,SAAUgD,EAAWX,QAASzB,KAAKiE,mBAIzD3D,OAAAC,EAAA,EAAAD,CAACyD,EAAA,EAAD,UACEzD,OAAAC,EAAA,EAAAD,CAAC4D,EAAA,EAAD,IAEA5D,OAAAC,EAAA,EAAAD,CAAC6D,EAAA,EAAD,CAAiBC,UAAU,kBAAkBC,mBAAoBrE,KAAKqE,yBAAtE,EACE/D,OAAAC,EAAA,EAAAD,CAAA,OAAKE,UAAU,8BAA8B8D,SAAUtE,KAAKuE,mBAA5D,EACEjE,OAAAC,EAAA,EAAAD,CAACkE,EAAA,EAAD,CAAiBrC,UAAWnC,KAAKT,MAAM2C,OAAOC,YAE9C7B,OAAAC,EAAA,EAAAD,CAAA,OAAKmE,KAAK,OAAOjE,UAAU,mCAA3B,EACGwB,EAAOd,IAAI,SAAC1B,EAAOkF,GAAR,OAA4B,OAAVlF,EAC5Bc,OAAAC,EAAA,EAAAD,CAACqE,EAAD,CAEErD,MAAe,EAARoD,EAAY1C,EAAOvC,MAAMiF,EAAQ,EAAG,MAAQ,KACnDrD,WAAYuC,EAAKlC,gBAFZ,QAAUM,EAAOvC,MAAMiF,EAAQ,EAAG,OAKzCpE,OAAAC,EAAA,EAAAD,CAACsE,EAAD,CAEEpF,MAAOA,GADFA,EAAMU,IAAI,SAIlB4D,GAGF1B,GAA6B,IAAhBJ,EAAOO,MACnBjC,OAAAC,EAAA,EAAAD,CAAA,OAAKE,UAAU,2BAAf,EACEF,OAAAC,EAAA,EAAAD,CAAC0D,EAAA,EAAD,aA9F4BhD,+BAEvB,CACjBkB,OAAQP,IAAUkD,OAAO1D,WACzB8B,SAAUtB,IAAUE,KAAKV,WACzBa,OAAQf,IAAmB6D,KAAK3D,WAChCiB,UAAWT,IAAUoD,KACrB1C,QAASV,IAAUoD","file":"flavours/glitch/async/account_gallery.js","sourcesContent":["import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport Permalink from 'flavours/glitch/components/permalink';\nimport { displayMedia } from 'flavours/glitch/util/initial_state';\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, title;\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      title                    = media.get('description');\n    } else {\n      icon = (\n        <span className='account-gallery__item__icons'>\n          <i className='fa fa-eye-slash' />\n        </span>\n      );\n      title = status.get('spoiler_text') || media.get('description');\n    }\n\n    return (\n      <div className='account-gallery__item'>\n        <Permalink\n          to={`/statuses/${status.get('id')}`}\n          href={status.get('url')}\n          style={style}\n          title={title}\n          onInterceptClick={this.handleClick}\n        >\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 'flavours/glitch/actions/accounts';\nimport { expandAccountMediaTimeline } from 'flavours/glitch/actions/timelines';\nimport LoadingIndicator from 'flavours/glitch/components/loading_indicator';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ColumnBackButton from 'flavours/glitch/components/column_back_button';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { getAccountGallery } from 'flavours/glitch/selectors';\nimport MediaItem from './components/media_item';\nimport HeaderContainer from 'flavours/glitch/features/account_timeline/containers/header_container';\nimport { ScrollContainer } from 'react-router-scroll-4';\nimport LoadMore from 'flavours/glitch/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    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\n@connect(mapStateToProps)\nexport default class 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  shouldUpdateScroll = (prevRouterProps, { location }) => {\n    if ((((prevRouterProps || {}).location || {}).state || {}).mastodonModalOpen) return false;\n    return !(location.state && location.state.mastodonModalOpen);\n  }\n\n  render () {\n    const { medias, 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={this.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/flavours/glitch/features/account_gallery/components/media_item.js","webpack:///app/javascript/builds/pleroma/mastofe/app/javascript/flavours/glitch/features/account_gallery/index.js"],"names":["MediaItem","visible","displayMedia","_this","props","media","getIn","state","setState","render","label","icon","title","this","status","get","x","y","style","Object","jsx","className","backgroundImage","backgroundPosition","permalink","to","href","onInterceptClick","handleClick","ImmutablePureComponent","ImmutablePropTypes","map","isRequired","LoadMoreMedia","onLoadMore","maxId","load_more","disabled","onClick","handleLoadMore","PropTypes","string","func","AccountGallery","connect","medias","getAccountGallery","params","accountId","isLoading","hasMore","_this2","column","scrollTop","size","last","undefined","e","_e$target","target","scrollHeight","clientHeight","handleScrollToBottom","dispatch","expandAccountMediaTimeline","preventDefault","prevRouterProps","_ref","location","mastodonModalOpen","c","componentDidMount","fetchAccount","componentWillReceiveProps","nextProps","_this3","_this$props","loadOlder","loading_indicator","handleLoadOlder","react_default","a","createElement","ref","setRef","profile_column_header","handleHeaderClick","react_router_scroll_4_es","scrollKey","shouldUpdateScroll","onScroll","handleScroll","header_container","role","index","account_gallery_LoadMoreMedia","media_item_MediaItem","object","list","bool"],"mappings":"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","file":"flavours/glitch/async/account_gallery.js","sourcesContent":["import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport Permalink from 'flavours/glitch/components/permalink';\nimport { displayMedia } from 'flavours/glitch/util/initial_state';\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, title;\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      title                    = media.get('description');\n    } else {\n      icon = (\n        <span className='account-gallery__item__icons'>\n          <i className='fa fa-eye-slash' />\n        </span>\n      );\n      title = status.get('spoiler_text') || media.get('description');\n    }\n\n    return (\n      <div className='account-gallery__item'>\n        <Permalink\n          to={`/statuses/${status.get('id')}`}\n          href={status.get('url')}\n          style={style}\n          title={title}\n          onInterceptClick={this.handleClick}\n        >\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 'flavours/glitch/actions/accounts';\nimport { expandAccountMediaTimeline } from 'flavours/glitch/actions/timelines';\nimport LoadingIndicator from 'flavours/glitch/components/loading_indicator';\nimport Column from 'flavours/glitch/features/ui/components/column';\nimport ProfileColumnHeader from 'flavours/glitch/features/account/components/profile_column_header';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { getAccountGallery } from 'flavours/glitch/selectors';\nimport MediaItem from './components/media_item';\nimport HeaderContainer from 'flavours/glitch/features/account_timeline/containers/header_container';\nimport { ScrollContainer } from 'react-router-scroll-4';\nimport LoadMore from 'flavours/glitch/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    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\n@connect(mapStateToProps)\nexport default class 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  handleHeaderClick = () => {\n    this.column.scrollTop();\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  shouldUpdateScroll = (prevRouterProps, { location }) => {\n    if ((((prevRouterProps || {}).location || {}).state || {}).mastodonModalOpen) return false;\n    return !(location.state && location.state.mastodonModalOpen);\n  }\n\n  setRef = c => {\n    this.column = c;\n  }\n\n  render () {\n    const { medias, 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 ref={this.setRef}>\n        <ProfileColumnHeader onClick={this.handleHeaderClick} />\n\n        <ScrollContainer scrollKey='account_gallery' shouldUpdateScroll={this.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