index.tsx 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import * as React from 'react';
  2. import {RouteComponentProps} from 'react-router';
  3. import {Client} from 'app/api';
  4. import NotFound from 'app/components/errors/notFound';
  5. import LoadingIndicator from 'app/components/loadingIndicator';
  6. import {Organization} from 'app/types';
  7. import withApi from 'app/utils/withApi';
  8. import withOrganization from 'app/utils/withOrganization';
  9. import DashboardDetail from './detail';
  10. import OrgDashboards from './orgDashboards';
  11. import {DashboardState} from './types';
  12. import {DashboardBasicFeature} from './view';
  13. type Props = RouteComponentProps<{orgId: string}, {}> & {
  14. api: Client;
  15. organization: Organization;
  16. children: React.ReactNode;
  17. };
  18. class DashboardsV2Container extends React.Component<Props> {
  19. render() {
  20. const {organization, params, api, location, children} = this.props;
  21. if (organization.features.includes('dashboards-edit')) {
  22. return children;
  23. }
  24. return (
  25. <DashboardBasicFeature organization={organization}>
  26. <OrgDashboards
  27. api={api}
  28. location={location}
  29. params={params}
  30. organization={organization}
  31. >
  32. {({dashboard, dashboards, error, reloadData}) => {
  33. return error ? (
  34. <NotFound />
  35. ) : dashboard ? (
  36. <DashboardDetail
  37. {...this.props}
  38. initialState={DashboardState.VIEW}
  39. dashboard={dashboard}
  40. dashboards={dashboards}
  41. reloadData={reloadData}
  42. />
  43. ) : (
  44. <LoadingIndicator />
  45. );
  46. }}
  47. </OrgDashboards>
  48. </DashboardBasicFeature>
  49. );
  50. }
  51. }
  52. export default withApi(withOrganization(DashboardsV2Container));