Files
2024-02-15 17:01:50 +00:00

79 lines
2.6 KiB
TypeScript

import {useContext} from 'react';
import styled from '@emotion/styled';
import {motion} from 'framer-motion';
import omit from 'lodash/omit';
import {OnboardingContext} from 'sentry/components/onboarding/onboardingContext';
import PlatformPicker from 'sentry/components/platformPicker';
import platforms from 'sentry/data/platforms';
import {t} from 'sentry/locale';
import testableTransition from 'sentry/utils/testableTransition';
import useOrganization from 'sentry/utils/useOrganization';
import StepHeading from 'sentry/views/onboarding/components/stepHeading';
import {CreateProjectsFooter} from './components/createProjectsFooter';
import type {StepProps} from './types';
export function PlatformSelection(props: StepProps) {
const organization = useOrganization();
const onboardingContext = useContext(OnboardingContext);
const selectedPlatform = onboardingContext.data.selectedSDK
? platforms.find(platform => platform.id === onboardingContext.data.selectedSDK?.key)
? onboardingContext.data.selectedSDK
: undefined
: undefined;
return (
<Wrapper>
<StepHeading step={props.stepIndex}>
{t('Select the platform you want to monitor')}
</StepHeading>
<motion.div
transition={testableTransition()}
variants={{
initial: {y: 30, opacity: 0},
animate: {y: 0, opacity: 1},
exit: {opacity: 0},
}}
>
<p>
{t(
'Set up a separate project for each part of your application (for example, your API server and frontend client), to quickly pinpoint which part of your application errors are coming from.'
)}
</p>
<PlatformPicker
noAutoFilter
source="targeted-onboarding"
platform={onboardingContext.data.selectedSDK?.key}
defaultCategory={onboardingContext.data.selectedSDK?.category}
setPlatform={platform => {
onboardingContext.setData({
...onboardingContext.data,
selectedSDK: platform
? {...omit(platform, 'id'), key: platform.id}
: undefined,
});
}}
organization={organization}
/>
</motion.div>
<CreateProjectsFooter
{...props}
organization={organization}
clearPlatform={() => {
onboardingContext.setData({...onboardingContext.data, selectedSDK: undefined});
}}
selectedPlatform={selectedPlatform}
/>
</Wrapper>
);
}
const Wrapper = styled('div')`
max-width: 850px;
margin-left: auto;
margin-right: auto;
width: 100%;
`;