import {useState} from 'react';
import styled from '@emotion/styled';
import {Button} from 'sentry/components/button';
import PanelItem from 'sentry/components/panels/panelItem';
import {IconChevron} from 'sentry/icons/iconChevron';
import {IconRefresh} from 'sentry/icons/iconRefresh';
import {t} from 'sentry/locale';
import {space} from 'sentry/styles/space';
import type {CustomRepo} from 'sentry/types/debugFiles';
import {CustomRepoType} from 'sentry/types/debugFiles';
import CustomRepositoryActions from './actions';
import Details from './details';
import Status from './status';
import {customRepoTypeLabel} from './utils';
type Props = {
hasAccess: boolean;
hasFeature: boolean;
onDelete: (repositoryId: string) => void;
onEdit: (repositoryId: string) => void;
onSyncNow: (repositoryId: string) => void;
repository: CustomRepo;
};
function Repository({
repository,
onSyncNow,
onDelete,
onEdit,
hasFeature,
hasAccess,
}: Props) {
const [isDetailsExpanded, setIsDetailsExpanded] = useState(false);
const {id, name, type} = repository;
if (repository.type === CustomRepoType.APP_STORE_CONNECT) {
const authenticated = repository.details?.credentials.status !== 'invalid';
const detailsAvailable = repository.details !== undefined;
return (
detailsAvailable ? setIsDetailsExpanded(!isDetailsExpanded) : undefined
}
direction={isDetailsExpanded ? 'down' : 'up'}
/>
{name}
{customRepoTypeLabel[type]}
onEdit(id)} />
onDelete(id)}
onEdit={() => onEdit(id)}
disabled={repository.details === undefined}
syncNowButton={
}
/>
{isDetailsExpanded && }
);
}
return (
{name}
{customRepoTypeLabel[type]}
onDelete(id)}
onEdit={() => onEdit(id)}
/>
);
}
export default Repository;
const StyledPanelItem = styled(PanelItem)`
display: grid;
align-items: flex-start;
gap: ${space(1)};
grid-template-columns: max-content 1fr;
@media (min-width: ${p => p.theme.breakpoints.small}) {
grid-template-columns: max-content 1fr max-content;
}
`;
const Name = styled('div')`
grid-column: 2/2;
@media (min-width: ${p => p.theme.breakpoints.small}) {
grid-column: 2/3;
grid-row: 1/2;
}
`;
const TypeAndStatus = styled('div')`
color: ${p => p.theme.gray300};
font-size: ${p => p.theme.fontSizeMedium};
display: flex;
flex-wrap: wrap;
align-items: center;
grid-column: 2/2;
gap: ${space(1.5)};
@media (min-width: ${p => p.theme.breakpoints.small}) {
grid-column: 2/3;
grid-row: 2/2;
gap: ${space(1)};
}
`;
const ToggleDetails = styled(IconChevron)`
cursor: pointer;
`;