saveButton.tsx 1.0 KB

12345678910111213141516171819202122232425262728293031
  1. import {useCallback} from 'react';
  2. import {Button} from 'sentry/components/button';
  3. import {t} from 'sentry/locale';
  4. import {useParams} from 'sentry/utils/useParams';
  5. import type {Widget} from 'sentry/views/dashboards/types';
  6. import {useWidgetBuilderContext} from 'sentry/views/dashboards/widgetBuilder/contexts/widgetBuilderContext';
  7. import {convertBuilderStateToWidget} from 'sentry/views/dashboards/widgetBuilder/utils/convertBuilderStateToWidget';
  8. interface SaveButtonProps {
  9. isEditing: boolean;
  10. onSave: ({index, widget}: {index: number; widget: Widget}) => void;
  11. }
  12. function SaveButton({isEditing, onSave}: SaveButtonProps) {
  13. const {state} = useWidgetBuilderContext();
  14. const {widgetIndex} = useParams();
  15. const handleSave = useCallback(() => {
  16. const widget = convertBuilderStateToWidget(state);
  17. onSave({index: Number(widgetIndex), widget});
  18. }, [onSave, state, widgetIndex]);
  19. return (
  20. <Button priority="primary" onClick={handleSave}>
  21. {isEditing ? t('Update Widget') : t('Add Widget')}
  22. </Button>
  23. );
  24. }
  25. export default SaveButton;