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

49 lines
1.5 KiB
TypeScript

import styled from '@emotion/styled';
import Button from 'sentry/components/actions/button';
import type {ButtonProps} from 'sentry/components/button';
import {space} from 'sentry/styles/space';
interface FooterWithButtonsProps
extends Partial<Pick<ButtonProps, 'disabled' | 'onClick' | 'href'>> {
buttonText: string;
formFields?: Array<{name: string; value: any}>;
formProps?: React.FormHTMLAttributes<HTMLFormElement>;
}
export default function FooterWithButtons({
buttonText,
formFields,
formProps,
...rest
}: FooterWithButtonsProps) {
/**
* We use a form post here to replicate what we do with standard HTML views for the integration pipeline.
* Since this is a form post, we need to pass a hidden replica of the form inputs
* so we can submit this form instead of the one collecting the user inputs.
*/
return (
<Footer data-test-id="aws-lambda-footer-form" {...formProps}>
{formFields?.map(field => {
return <input type="hidden" key={field.name} {...field} />;
})}
<Button priority="primary" type="submit" size="xs" {...rest}>
{buttonText}
</Button>
</Footer>
);
}
// wrap in form so we can keep form submission behavior
const Footer = styled('form')`
width: 100%;
position: fixed;
display: flex;
justify-content: flex-end;
bottom: 0;
z-index: 100;
background-color: ${p => p.theme.bodyBackground};
border-top: 1px solid ${p => p.theme.innerBorder};
padding: ${space(2)};
`;