import {Fragment} from 'react';
import styled from '@emotion/styled';
/* TODO: replace with I/O when finished */
import img from 'sentry-images/spot/hair-on-fire.svg';
import Button from 'app/components/button';
import ButtonBar from 'app/components/buttonBar';
import PageHeading from 'app/components/pageHeading';
import {t} from 'app/locale';
import ConfigStore from 'app/stores/configStore';
import space from 'app/styles/space';
import {Organization, Project} from 'app/types';
import withProjects from 'app/utils/withProjects';
type Props = React.PropsWithChildren<{
organization: Organization;
projects: Project[];
loadingProjects: boolean;
superuserNeedsToBeProjectMember?: boolean;
}>;
function NoProjectMessage({
children,
organization,
projects,
loadingProjects,
superuserNeedsToBeProjectMember,
}: Props) {
const orgSlug = organization.slug;
const canCreateProject = organization.access.includes('project:write');
const canJoinTeam = organization.access.includes('team:read');
const {isSuperuser} = ConfigStore.get('user');
const orgHasProjects = !!projects?.length;
const hasProjectAccess =
isSuperuser && !superuserNeedsToBeProjectMember
? !!projects?.some(p => p.hasAccess)
: !!projects?.some(p => p.isMember && p.hasAccess);
if (hasProjectAccess || loadingProjects) {
return {children};
}
// If the organization has some projects, but the user doesn't have access to
// those projects, the primary action is to Join a Team. Otherwise the primary
// action is to create a project.
const joinTeamAction = (
);
const createProjectAction = (
);
return (
{t('Remain Calm')}
{t('You need at least one project to use this view')}
{!orgHasProjects ? (
createProjectAction
) : (
{joinTeamAction}
{createProjectAction}
)}
);
}
const StyledPageHeading = styled(PageHeading)`
font-size: 28px;
margin-bottom: ${space(1.5)};
`;
const HelpMessage = styled('div')`
margin-bottom: ${space(2)};
`;
const Flex = styled('div')`
display: flex;
`;
const Wrapper = styled(Flex)`
flex: 1;
align-items: center;
justify-content: center;
`;
const HeightWrapper = styled(Flex)`
height: 350px;
`;
const Content = styled(Flex)`
flex-direction: column;
justify-content: center;
margin-left: 40px;
`;
const Actions = styled(ButtonBar)`
width: fit-content;
`;
export default withProjects(NoProjectMessage);