settingsProjectItem.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import {Component} from 'react';
  2. import styled from '@emotion/styled';
  3. import Link from 'app/components/links/link';
  4. import ProjectLabel from 'app/components/projectLabel';
  5. import BookmarkStar from 'app/components/projects/bookmarkStar';
  6. import space from 'app/styles/space';
  7. import {Organization, Project} from 'app/types';
  8. type Props = {
  9. project: Project;
  10. organization: Organization;
  11. };
  12. type State = {
  13. isBookmarked: boolean;
  14. };
  15. class ProjectItem extends Component<Props, State> {
  16. state: State = {
  17. isBookmarked: this.props.project.isBookmarked,
  18. };
  19. handleToggleBookmark = (isBookmarked: State['isBookmarked']) => {
  20. this.setState({isBookmarked});
  21. };
  22. render() {
  23. const {project, organization} = this.props;
  24. return (
  25. <Wrapper>
  26. <BookmarkLink
  27. organization={organization}
  28. project={project}
  29. isBookmarked={this.state.isBookmarked}
  30. onToggle={this.handleToggleBookmark}
  31. />
  32. <Link to={`/settings/${organization.slug}/projects/${project.slug}/`}>
  33. <ProjectLabel project={project} />
  34. </Link>
  35. </Wrapper>
  36. );
  37. }
  38. }
  39. const Wrapper = styled('div')`
  40. display: flex;
  41. align-items: center;
  42. `;
  43. const BookmarkLink = styled(BookmarkStar)`
  44. margin-right: ${space(1)};
  45. margin-top: -${space(0.25)};
  46. `;
  47. export default ProjectItem;