123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- import {Fragment} from 'react';
- import styled from '@emotion/styled';
- import Access from 'sentry/components/acl/access';
- import {Button} from 'sentry/components/button';
- import Confirm from 'sentry/components/confirm';
- import IdBadge from 'sentry/components/idBadge';
- import {Tooltip} from 'sentry/components/tooltip';
- import {IconDelete, IconEdit} from 'sentry/icons';
- import {t} from 'sentry/locale';
- import {space} from 'sentry/styles/space';
- import type {RepositoryProjectPathConfig} from 'sentry/types/integrations';
- import type {Project} from 'sentry/types/project';
- type Props = {
- onDelete: (pathConfig: RepositoryProjectPathConfig) => void;
- onEdit: (pathConfig: RepositoryProjectPathConfig) => void;
- pathConfig: RepositoryProjectPathConfig;
- project: Project;
- };
- export default function RepositoryProjectPathConfigRow({
- pathConfig,
- project,
- onEdit,
- onDelete,
- }: Props) {
- return (
- <Fragment>
- <NameRepoColumn>
- <ProjectRepoHolder>
- <RepoName>{pathConfig.repoName}</RepoName>
- <ProjectAndBranch>
- <IdBadge
- project={project}
- avatarSize={14}
- displayName={project.slug}
- avatarProps={{consistentWidth: true}}
- />
- <BranchWrapper> | {pathConfig.defaultBranch}</BranchWrapper>
- </ProjectAndBranch>
- </ProjectRepoHolder>
- </NameRepoColumn>
- <OutputPathColumn>{pathConfig.sourceRoot}</OutputPathColumn>
- <InputPathColumn>{pathConfig.stackRoot}</InputPathColumn>
- <ButtonWrapper>
- <Button
- size="sm"
- icon={<IconEdit size="sm" />}
- aria-label={t('edit')}
- onClick={() => onEdit(pathConfig)}
- />
- <Access access={['org:integrations']}>
- {({hasAccess}) => (
- <Tooltip
- title={t(
- 'You must be an organization owner, manager or admin to remove a code mapping.'
- )}
- disabled={hasAccess}
- >
- <Confirm
- onConfirm={() => onDelete(pathConfig)}
- message={t('Are you sure you want to remove this code mapping?')}
- disabled={!hasAccess}
- >
- <Button
- size="sm"
- icon={<IconDelete size="sm" />}
- aria-label={t('delete')}
- disabled={!hasAccess}
- />
- </Confirm>
- </Tooltip>
- )}
- </Access>
- </ButtonWrapper>
- </Fragment>
- );
- }
- const ProjectRepoHolder = styled('div')`
- display: flex;
- flex-direction: column;
- `;
- const RepoName = styled(`span`)`
- padding-bottom: ${space(1)};
- `;
- const ProjectAndBranch = styled('div')`
- display: flex;
- flex-direction: row;
- color: ${p => p.theme.gray300};
- `;
- // match the line height of the badge
- const BranchWrapper = styled('div')`
- line-height: 1.2;
- `;
- // Columns below
- const Column = styled('span')`
- overflow: hidden;
- overflow-wrap: break-word;
- `;
- export const NameRepoColumn = styled(Column)`
- grid-area: name-repo;
- `;
- export const OutputPathColumn = styled(Column)`
- grid-area: output-path;
- `;
- export const InputPathColumn = styled(Column)`
- grid-area: input-path;
- `;
- export const ButtonWrapper = styled(Column)`
- display: flex;
- gap: ${space(1)};
- `;
|