/* eslint-disable sonarjs/cognitive-complexity */ import '../OnboardingQuestionaire.styles.scss'; import { Color } from '@signozhq/design-tokens'; import { Button, Input, Typography } from 'antd'; import logEvent from 'api/common/logEvent'; import { ArrowRight, CheckCircle, Loader2 } from 'lucide-react'; import { useEffect, useState } from 'react'; import { useSelector } from 'react-redux'; import { AppState } from 'store/reducers'; import AppReducer from 'types/reducer/app'; export interface OrgData { id: string; isAnonymous: boolean; name: string; } export interface OrgDetails { organisationName: string; usesObservability: boolean | null; observabilityTool: string | null; otherTool: string | null; familiarity: string | null; } interface OrgQuestionsProps { isLoading: boolean; orgDetails: OrgDetails; setOrgDetails: (details: OrgDetails) => void; onNext: () => void; } const observabilityTools = { AWSCloudwatch: 'AWS Cloudwatch', DataDog: 'DataDog', NewRelic: 'New Relic', GrafanaPrometheus: 'Grafana / Prometheus', AzureAppMonitor: 'Azure App Monitor', GCPNativeO11yTools: 'GCP-native o11y tools', Honeycomb: 'Honeycomb', }; const o11yFamiliarityOptions: Record = { beginner: 'Beginner', intermediate: 'Intermediate', expert: 'Expert', notFamiliar: "I'm not familiar with it", }; function OrgQuestions({ isLoading, orgDetails, setOrgDetails, onNext, }: OrgQuestionsProps): JSX.Element { const { user } = useSelector((state) => state.app); const [organisationName, setOrganisationName] = useState( orgDetails?.organisationName || '', ); const [usesObservability, setUsesObservability] = useState( orgDetails?.usesObservability || null, ); const [observabilityTool, setObservabilityTool] = useState( orgDetails?.observabilityTool || null, ); const [otherTool, setOtherTool] = useState( orgDetails?.otherTool || '', ); const [familiarity, setFamiliarity] = useState( orgDetails?.familiarity || null, ); const [isNextDisabled, setIsNextDisabled] = useState(true); useEffect(() => { setOrganisationName(orgDetails.organisationName); }, [orgDetails.organisationName]); const isValidUsesObservability = (): boolean => { if (usesObservability === null) { return false; } if (usesObservability && (!observabilityTool || observabilityTool === '')) { return false; } // eslint-disable-next-line sonarjs/prefer-single-boolean-return if (usesObservability && observabilityTool === 'Others' && otherTool === '') { return false; } return true; }; useEffect(() => { const isValidObservability = isValidUsesObservability(); if (organisationName !== '' && familiarity !== null && isValidObservability) { setIsNextDisabled(false); } else { setIsNextDisabled(true); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [ organisationName, usesObservability, familiarity, observabilityTool, otherTool, ]); const handleOnNext = (): void => { setOrgDetails({ organisationName, usesObservability, observabilityTool, otherTool, familiarity, }); logEvent('Onboarding: Org Questions: Next', { organisationName, usesObservability, observabilityTool, otherTool, familiarity, }); onNext(); }; return (
Welcome, {user?.name}! We'll help you get the most out of SigNoz, whether you're new to observability or a seasoned pro.
setOrganisationName(e.target.value)} />
{usesObservability && (
{Object.keys(observabilityTools).map((tool) => ( ))} {observabilityTool === 'Others' ? ( ) : ( '' ) } onChange={(e): void => setOtherTool(e.target.value)} /> ) : ( )}
)}
Are you familiar with setting up observability (o11y)?
{Object.keys(o11yFamiliarityOptions).map((option: string) => ( ))}
); } export default OrgQuestions;