import {Fragment, useState} from 'react'; import styled from '@emotion/styled'; import {Button} from 'sentry/components/button'; import TextArea from 'sentry/components/forms/controls/textarea'; import TextField from 'sentry/components/forms/fields/textField'; import {t} from 'sentry/locale'; import {space} from 'sentry/styles/space'; import {trackAnalytics} from 'sentry/utils/analytics'; import {WidgetBuilderVersion} from 'sentry/utils/analytics/dashboardsAnalyticsEvents'; import useOrganization from 'sentry/utils/useOrganization'; import {SectionHeader} from 'sentry/views/dashboards/widgetBuilder/components/common/sectionHeader'; import {useWidgetBuilderContext} from 'sentry/views/dashboards/widgetBuilder/contexts/widgetBuilderContext'; import useDashboardWidgetSource from 'sentry/views/dashboards/widgetBuilder/hooks/useDashboardWidgetSource'; import useIsEditingWidget from 'sentry/views/dashboards/widgetBuilder/hooks/useIsEditingWidget'; import {BuilderStateAction} from 'sentry/views/dashboards/widgetBuilder/hooks/useWidgetBuilderState'; interface WidgetBuilderNameAndDescriptionProps { error?: Record; setError?: (error: Record) => void; } function WidgetBuilderNameAndDescription({ error, setError, }: WidgetBuilderNameAndDescriptionProps) { const organization = useOrganization(); const {state, dispatch} = useWidgetBuilderContext(); const [isDescSelected, setIsDescSelected] = useState(state.description ? true : false); const isEditing = useIsEditingWidget(); const source = useDashboardWidgetSource(); return ( { // clear error once user starts typing setError?.({...error, title: undefined}); dispatch({type: BuilderStateAction.SET_TITLE, payload: newTitle}); }} onBlur={() => { trackAnalytics('dashboards_views.widget_builder.change', { from: source, widget_type: state.dataset ?? '', builder_version: WidgetBuilderVersion.SLIDEOUT, field: 'title', value: state.title ?? '', new_widget: !isEditing, organization, }); }} required error={error?.title} inline={false} /> {!isDescSelected && ( { setIsDescSelected(true); }} data-test-id={'add-description'} > {t('+ Add Widget Description')} )} {isDescSelected && ( { dispatch({type: BuilderStateAction.SET_DESCRIPTION, payload: e.target.value}); }} onBlur={() => { trackAnalytics('dashboards_views.widget_builder.change', { from: source, widget_type: state.dataset ?? '', builder_version: WidgetBuilderVersion.SLIDEOUT, field: 'description', value: state.description ?? '', new_widget: !isEditing, organization, }); }} /> )} ); } export default WidgetBuilderNameAndDescription; const StyledInput = styled(TextField)` margin-bottom: ${space(1)}; padding: 0; border: none; `; const AddDescriptionButton = styled(Button)` margin-bottom: ${space(1)}; `; const DescriptionTextArea = styled(TextArea)` margin: ${space(2)} 0; `;