123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- import {RouteComponentProps} from 'react-router';
- import EmptyStateWarning from 'sentry/components/emptyStateWarning';
- import ErrorBoundary from 'sentry/components/errorBoundary';
- import * as Layout from 'sentry/components/layouts/thirds';
- import LoadingIndicator from 'sentry/components/loadingIndicator';
- import Pagination from 'sentry/components/pagination';
- import {Panel} from 'sentry/components/panels';
- import {t} from 'sentry/locale';
- import {space} from 'sentry/styles/space';
- import {Activity, Organization} from 'sentry/types';
- import routeTitle from 'sentry/utils/routeTitle';
- import withOrganization from 'sentry/utils/withOrganization';
- import AsyncView from 'sentry/views/asyncView';
- import ActivityFeedItem from './activityFeedItem';
- type Props = {
- organization: Organization;
- } & RouteComponentProps<{}, {}> &
- AsyncView['props'];
- type State = {
- activity: Activity[];
- } & AsyncView['state'];
- class OrganizationActivity extends AsyncView<Props, State> {
- getTitle() {
- const {organization} = this.props;
- return routeTitle(t('Activity'), organization.slug, false);
- }
- getEndpoints(): ReturnType<AsyncView['getEndpoints']> {
- const {organization} = this.props;
- return [['activity', `/organizations/${organization.slug}/activity/`]];
- }
- renderLoading() {
- return this.renderBody();
- }
- renderEmpty() {
- return (
- <EmptyStateWarning>
- <p>{t('Nothing to show here, move along.')}</p>
- </EmptyStateWarning>
- );
- }
- renderError(error?: Error, disableLog = false): React.ReactNode {
- const {errors} = this.state;
- const notFound = Object.values(errors).find(resp => resp && resp.status === 404);
- if (notFound) {
- return this.renderBody();
- }
- return super.renderError(error, disableLog);
- }
- renderBody() {
- const {loading, activity, activityPageLinks} = this.state;
- return (
- <Layout.Page>
- <Layout.Header>
- <Layout.HeaderContent>
- <Layout.Title>{t('Activity')}</Layout.Title>
- </Layout.HeaderContent>
- </Layout.Header>
- <Layout.Body>
- <Layout.Main fullWidth>
- <Panel>
- {loading && <LoadingIndicator />}
- {!loading && !activity?.length && this.renderEmpty()}
- {!loading && activity?.length > 0 && (
- <div data-test-id="activity-feed-list">
- {activity.map(item => (
- <ErrorBoundary
- mini
- css={{marginBottom: space(1), borderRadius: 0}}
- key={item.id}
- >
- <ActivityFeedItem
- organization={this.props.organization}
- item={item}
- />
- </ErrorBoundary>
- ))}
- </div>
- )}
- </Panel>
- {activityPageLinks && (
- <Pagination pageLinks={activityPageLinks} {...this.props} />
- )}
- </Layout.Main>
- </Layout.Body>
- </Layout.Page>
- );
- }
- }
- export default withOrganization(OrganizationActivity);
|