remoteConfigCreateFeatureModal.tsx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import {Fragment} from 'react';
  2. import {css} from '@emotion/react';
  3. import type {ModalRenderProps} from 'sentry/actionCreators/modal';
  4. import FieldFromConfig from 'sentry/components/forms/fieldFromConfig';
  5. import Form from 'sentry/components/forms/form';
  6. import type {Field} from 'sentry/components/forms/types';
  7. import {t} from 'sentry/locale';
  8. import theme from 'sentry/utils/theme';
  9. interface RemoteConfigCreateFeatureModal extends ModalRenderProps {
  10. createFeature: (key: string, value: string) => void;
  11. isValid: (key: string) => boolean;
  12. }
  13. const formFields: Field[] = [
  14. {
  15. name: 'key',
  16. type: 'string',
  17. required: true,
  18. label: t('Feature Key'),
  19. },
  20. {
  21. name: 'value',
  22. type: 'string',
  23. required: true,
  24. label: t('Feature Value'),
  25. },
  26. ];
  27. export default function RemoteConfigCreateFeatureModal({
  28. Body,
  29. Header,
  30. Footer: _Footer,
  31. closeModal,
  32. createFeature,
  33. isValid,
  34. }: RemoteConfigCreateFeatureModal) {
  35. return (
  36. <Fragment>
  37. <Header closeButton>
  38. <h4>{t('Add Remote Config Feature')}</h4>
  39. </Header>
  40. <Body>
  41. <Form
  42. submitLabel={t('Add')}
  43. cancelLabel={t('Cancel')}
  44. onCancel={closeModal}
  45. onSubmit={(data, onSubmitSuccess, onSubmitError) => {
  46. if (isValid(data.key)) {
  47. closeModal();
  48. onSubmitSuccess(data);
  49. createFeature(data.key, data.value);
  50. } else {
  51. onSubmitError('Invalid key');
  52. }
  53. }}
  54. >
  55. {formFields.map(field => (
  56. <FieldFromConfig
  57. key={field.name}
  58. field={field}
  59. inline={false}
  60. stacked
  61. flexibleControlStateSize
  62. />
  63. ))}
  64. </Form>
  65. </Body>
  66. </Fragment>
  67. );
  68. }
  69. export const modalCss = css`
  70. @media (min-width: ${theme.breakpoints.small}) {
  71. width: 80%;
  72. }
  73. `;