import {css} from '@emotion/react'; import styled from '@emotion/styled'; import {addErrorMessage, addSuccessMessage} from 'sentry/actionCreators/indicator'; import {Button} from 'sentry/components/button'; import Confirm from 'sentry/components/confirm'; import FieldGroup from 'sentry/components/forms/fieldGroup'; import Panel from 'sentry/components/panels/panel'; import PanelBody from 'sentry/components/panels/panelBody'; import PanelHeader from 'sentry/components/panels/panelHeader'; import {t} from 'sentry/locale'; import {space} from 'sentry/styles/space'; import {useMutation} from 'sentry/utils/queryClient'; import useApi from 'sentry/utils/useApi'; import useOrganization from 'sentry/utils/useOrganization'; import {dynamicSamplingForm} from 'sentry/views/settings/dynamicSampling/dynamicSamplingForm'; import {TargetSampleRateField} from 'sentry/views/settings/dynamicSampling/targetSampleRateField'; import {useAccess} from 'sentry/views/settings/projectMetrics/access'; const {useFormState, FormProvider} = dynamicSamplingForm; export function DynamicSampling() { const api = useApi(); const organization = useOrganization(); const {hasAccess} = useAccess({access: ['org:write']}); const formState = useFormState({ targetSampleRate: ((organization.targetSampleRate ?? 1) * 100)?.toLocaleString(), samplingMode: 'auto' as const, }); const modeField = formState.fields.samplingMode; const endpoint = `/organizations/${organization.slug}/`; const {mutate: updateOrganization, isPending} = useMutation({ mutationFn: () => { const {fields} = formState; return api.requestPromise(endpoint, { method: 'PUT', data: { targetSampleRate: Number(fields.targetSampleRate.value) / 100, }, }); }, onSuccess: () => { addSuccessMessage(t('Changes applied.')); formState.save(); }, onError: () => { addErrorMessage(t('Unable to save changes. Please try again.')); }, }); const handleSubmit = () => { updateOrganization(); }; const handleReset = () => { formState.reset(); }; return (
event.preventDefault()}> {t('Automatic Sampling')} {t('Automatic Balancing')} {/* TODO(aknaus): move into separate component when we make it interactive */} {modeField.value === 'auto' ? : null}
); } const FormActions = styled('div')` display: grid; grid-template-columns: repeat(2, max-content); gap: ${space(1)}; justify-content: flex-end; `;