index.tsx 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import {browserHistory, RouteComponentProps} from 'react-router';
  2. import {t} from 'sentry/locale';
  3. import {Organization} from 'sentry/types';
  4. import {normalizeUrl} from 'sentry/utils/withDomainRequired';
  5. import AsyncView from 'sentry/views/asyncView';
  6. import SettingsPageHeader from 'sentry/views/settings/components/settingsPageHeader';
  7. import PermissionAlert from 'sentry/views/settings/project/permissionAlert';
  8. import KeySettings from 'sentry/views/settings/project/projectKeys/details/keySettings';
  9. import KeyStats from 'sentry/views/settings/project/projectKeys/details/keyStats';
  10. import {ProjectKey} from 'sentry/views/settings/project/projectKeys/types';
  11. type Props = {
  12. organization: Organization;
  13. } & RouteComponentProps<
  14. {
  15. keyId: string;
  16. projectId: string;
  17. },
  18. {}
  19. >;
  20. type State = {
  21. data: ProjectKey;
  22. } & AsyncView['state'];
  23. export default class ProjectKeyDetails extends AsyncView<Props, State> {
  24. getTitle() {
  25. return t('Key Details');
  26. }
  27. getEndpoints(): ReturnType<AsyncView['getEndpoints']> {
  28. const {organization} = this.props;
  29. const {keyId, projectId} = this.props.params;
  30. return [['data', `/projects/${organization.slug}/${projectId}/keys/${keyId}/`]];
  31. }
  32. handleRemove = () => {
  33. const {organization} = this.props;
  34. const {projectId} = this.props.params;
  35. browserHistory.push(
  36. normalizeUrl(`/settings/${organization.slug}/projects/${projectId}/keys/`)
  37. );
  38. };
  39. renderBody() {
  40. const {organization, params} = this.props;
  41. const {data} = this.state;
  42. return (
  43. <div data-test-id="key-details">
  44. <SettingsPageHeader title={t('Key Details')} />
  45. <PermissionAlert />
  46. <KeyStats api={this.api} organization={organization} params={params} />
  47. <KeySettings
  48. api={this.api}
  49. data={data}
  50. onRemove={this.handleRemove}
  51. organization={organization}
  52. params={params}
  53. />
  54. </div>
  55. );
  56. }
  57. }