GlobalSchemaSelector.tsx 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import ConfirmationModal from 'components/common/ConfirmationModal/ConfirmationModal';
  2. import PageLoader from 'components/common/PageLoader/PageLoader';
  3. import { CompatibilityLevelCompatibilityEnum } from 'generated-sources';
  4. import React from 'react';
  5. import { useForm } from 'react-hook-form';
  6. import { useParams } from 'react-router-dom';
  7. import { ClusterName } from 'redux/interfaces';
  8. export interface GlobalSchemaSelectorProps {
  9. globalSchemaCompatibilityLevel?: CompatibilityLevelCompatibilityEnum;
  10. updateGlobalSchemaCompatibilityLevel: (
  11. clusterName: ClusterName,
  12. compatibilityLevel: CompatibilityLevelCompatibilityEnum
  13. ) => Promise<void>;
  14. }
  15. const GlobalSchemaSelector: React.FC<GlobalSchemaSelectorProps> = ({
  16. globalSchemaCompatibilityLevel,
  17. updateGlobalSchemaCompatibilityLevel,
  18. }) => {
  19. const { clusterName } = useParams<{ clusterName: string }>();
  20. const {
  21. register,
  22. handleSubmit,
  23. formState: { isSubmitting },
  24. } = useForm();
  25. const [
  26. isUpdateCompatibilityConfirmationVisible,
  27. setUpdateCompatibilityConfirmationVisible,
  28. ] = React.useState(false);
  29. const onCompatibilityLevelUpdate = async ({
  30. compatibilityLevel,
  31. }: {
  32. compatibilityLevel: CompatibilityLevelCompatibilityEnum;
  33. }) => {
  34. await updateGlobalSchemaCompatibilityLevel(clusterName, compatibilityLevel);
  35. setUpdateCompatibilityConfirmationVisible(false);
  36. };
  37. return (
  38. <div className="level-item">
  39. <h5 className="is-5 mr-2">Global Compatibility Level: </h5>
  40. <div className="select mr-2">
  41. <select
  42. name="compatibilityLevel"
  43. defaultValue={globalSchemaCompatibilityLevel}
  44. ref={register()}
  45. onChange={() => setUpdateCompatibilityConfirmationVisible(true)}
  46. >
  47. {Object.keys(CompatibilityLevelCompatibilityEnum).map(
  48. (level: string) => (
  49. <option key={level} value={level}>
  50. {level}
  51. </option>
  52. )
  53. )}
  54. </select>
  55. </div>
  56. <ConfirmationModal
  57. isOpen={isUpdateCompatibilityConfirmationVisible}
  58. onCancel={() => setUpdateCompatibilityConfirmationVisible(false)}
  59. onConfirm={handleSubmit(onCompatibilityLevelUpdate)}
  60. >
  61. {isSubmitting ? (
  62. <PageLoader />
  63. ) : (
  64. `Are you sure you want to update the global compatibility level?
  65. This may affect the compatibility levels of the schemas.`
  66. )}
  67. </ConfirmationModal>
  68. </div>
  69. );
  70. };
  71. export default GlobalSchemaSelector;