bigbuffet-rw/app/soapbox/pages/remote_instance_page.js

84 lines
2.8 KiB
JavaScript
Raw Normal View History

import React from 'react';
import ImmutablePureComponent from 'react-immutable-pure-component';
import { connect } from 'react-redux';
import Sticky from 'react-stickynode';
import PrimaryNavigation from 'soapbox/components/primary_navigation';
import LinkFooter from 'soapbox/features/ui/components/link_footer';
import BundleContainer from 'soapbox/features/ui/containers/bundle_container';
2021-09-18 15:48:13 -07:00
import {
PromoPanel,
FeaturesPanel,
2021-09-18 17:23:48 -07:00
InstanceInfoPanel,
InstanceModerationPanel,
2021-09-18 15:48:13 -07:00
} from 'soapbox/features/ui/util/async-components';
import { isAdmin } from 'soapbox/utils/accounts';
import { federationRestrictionsDisclosed } from 'soapbox/utils/state';
const mapStateToProps = state => {
const me = state.get('me');
const account = state.getIn(['accounts', me]);
return {
me,
disclosed: federationRestrictionsDisclosed(state),
isAdmin: isAdmin(account),
};
};
export default @connect(mapStateToProps)
class RemoteInstancePage extends ImmutablePureComponent {
render() {
const { me, children, params: { instance: host }, disclosed, isAdmin } = this.props;
return (
<div className='page'>
<div className='page__columns'>
<div className='columns-area__panels'>
<div className='columns-area__panels__pane columns-area__panels__pane--left'>
<div className='columns-area__panels__pane__inner'>
<Sticky top={65}>
<PrimaryNavigation />
</Sticky>
</div>
</div>
<div className='columns-area__panels__main'>
<div className='columns-area'>
{children}
</div>
</div>
<div className='columns-area__panels__pane columns-area__panels__pane--right'>
<div className='columns-area__panels__pane__inner'>
<Sticky top={65}>
{me && (
<BundleContainer fetchComponent={FeaturesPanel}>
{Component => <Component key='features-panel' />}
</BundleContainer>
)}
<BundleContainer fetchComponent={PromoPanel}>
{Component => <Component key='promo-panel' />}
</BundleContainer>
<BundleContainer fetchComponent={InstanceInfoPanel}>
{Component => <Component host={host} />}
2021-09-18 15:48:13 -07:00
</BundleContainer>
{(disclosed || isAdmin) && (
<BundleContainer fetchComponent={InstanceModerationPanel}>
{Component => <Component host={host} />}
</BundleContainer>
)}
<LinkFooter key='link-footer' />
</Sticky>
</div>
</div>
</div>
</div>
</div>
);
}
}