|
@@ -1,17 +1,10 @@
|
|
|
import React from 'react';
|
|
|
-import {
|
|
|
- ClusterName,
|
|
|
- CleanupPolicy,
|
|
|
- TopicFormData,
|
|
|
- TopicName,
|
|
|
-} from 'redux/interfaces';
|
|
|
-import { useForm, FormContext, ErrorMessage } from 'react-hook-form';
|
|
|
+import { ClusterName, TopicFormData, TopicName } from 'redux/interfaces';
|
|
|
+import { useForm, FormContext } from 'react-hook-form';
|
|
|
|
|
|
import Breadcrumb from 'components/common/Breadcrumb/Breadcrumb';
|
|
|
import { clusterTopicsPath } from 'lib/paths';
|
|
|
-import { TOPIC_NAME_VALIDATION_PATTERN, BYTES_IN_GB } from 'lib/constants';
|
|
|
-import CustomParamsContainer from './CustomParams/CustomParamsContainer';
|
|
|
-import TimeToRetain from './TimeToRetain';
|
|
|
+import TopicForm from 'components/Topics/shared/Form/TopicForm';
|
|
|
|
|
|
interface Props {
|
|
|
clusterName: ClusterName;
|
|
@@ -36,13 +29,7 @@ const New: React.FC<Props> = ({
|
|
|
const { name } = methods.getValues();
|
|
|
redirectToTopicPath(clusterName, name);
|
|
|
}
|
|
|
- }, [
|
|
|
- isSubmitting,
|
|
|
- isTopicCreated,
|
|
|
- redirectToTopicPath,
|
|
|
- clusterName,
|
|
|
- methods.getValues,
|
|
|
- ]);
|
|
|
+ }, [isSubmitting, isTopicCreated, redirectToTopicPath, clusterName, methods]);
|
|
|
|
|
|
const onSubmit = async (data: TopicFormData) => {
|
|
|
// TODO: need to fix loader. After success loading the first time, we won't wait for creation any more, because state is
|
|
@@ -70,161 +57,10 @@ const New: React.FC<Props> = ({
|
|
|
<div className="box">
|
|
|
{/* eslint-disable react/jsx-props-no-spreading */}
|
|
|
<FormContext {...methods}>
|
|
|
- <form onSubmit={methods.handleSubmit(onSubmit)}>
|
|
|
- <div className="columns">
|
|
|
- <div className="column is-three-quarters">
|
|
|
- <label className="label">Topic Name *</label>
|
|
|
- <input
|
|
|
- className="input"
|
|
|
- placeholder="Topic Name"
|
|
|
- ref={methods.register({
|
|
|
- required: 'Topic Name is required.',
|
|
|
- pattern: {
|
|
|
- value: TOPIC_NAME_VALIDATION_PATTERN,
|
|
|
- message: 'Only alphanumeric, _, -, and . allowed',
|
|
|
- },
|
|
|
- })}
|
|
|
- name="name"
|
|
|
- autoComplete="off"
|
|
|
- disabled={isSubmitting}
|
|
|
- />
|
|
|
- <p className="help is-danger">
|
|
|
- <ErrorMessage errors={methods.errors} name="name" />
|
|
|
- </p>
|
|
|
- </div>
|
|
|
-
|
|
|
- <div className="column">
|
|
|
- <label className="label">Number of partitions *</label>
|
|
|
- <input
|
|
|
- className="input"
|
|
|
- type="number"
|
|
|
- placeholder="Number of partitions"
|
|
|
- defaultValue="1"
|
|
|
- ref={methods.register({
|
|
|
- required: 'Number of partitions is required.',
|
|
|
- })}
|
|
|
- name="partitions"
|
|
|
- disabled={isSubmitting}
|
|
|
- />
|
|
|
- <p className="help is-danger">
|
|
|
- <ErrorMessage errors={methods.errors} name="partitions" />
|
|
|
- </p>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <div className="columns">
|
|
|
- <div className="column">
|
|
|
- <label className="label">Replication Factor *</label>
|
|
|
- <input
|
|
|
- className="input"
|
|
|
- type="number"
|
|
|
- placeholder="Replication Factor"
|
|
|
- defaultValue="1"
|
|
|
- ref={methods.register({
|
|
|
- required: 'Replication Factor is required.',
|
|
|
- })}
|
|
|
- name="replicationFactor"
|
|
|
- disabled={isSubmitting}
|
|
|
- />
|
|
|
- <p className="help is-danger">
|
|
|
- <ErrorMessage
|
|
|
- errors={methods.errors}
|
|
|
- name="replicationFactor"
|
|
|
- />
|
|
|
- </p>
|
|
|
- </div>
|
|
|
-
|
|
|
- <div className="column">
|
|
|
- <label className="label">Min In Sync Replicas *</label>
|
|
|
- <input
|
|
|
- className="input"
|
|
|
- type="number"
|
|
|
- placeholder="Replication Factor"
|
|
|
- defaultValue="1"
|
|
|
- ref={methods.register({
|
|
|
- required: 'Min In Sync Replicas is required.',
|
|
|
- })}
|
|
|
- name="minInSyncReplicas"
|
|
|
- disabled={isSubmitting}
|
|
|
- />
|
|
|
- <p className="help is-danger">
|
|
|
- <ErrorMessage
|
|
|
- errors={methods.errors}
|
|
|
- name="minInSyncReplicas"
|
|
|
- />
|
|
|
- </p>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <div className="columns">
|
|
|
- <div className="column is-one-third">
|
|
|
- <label className="label">Cleanup policy</label>
|
|
|
- <div className="select is-block">
|
|
|
- <select
|
|
|
- defaultValue={CleanupPolicy.Delete}
|
|
|
- name="cleanupPolicy"
|
|
|
- ref={methods.register}
|
|
|
- disabled={isSubmitting}
|
|
|
- >
|
|
|
- <option value={CleanupPolicy.Delete}>Delete</option>
|
|
|
- <option value={CleanupPolicy.Compact}>Compact</option>
|
|
|
- </select>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <div className="column is-one-third">
|
|
|
- <TimeToRetain isSubmitting={isSubmitting} />
|
|
|
- </div>
|
|
|
-
|
|
|
- <div className="column is-one-third">
|
|
|
- <label className="label">Max size on disk in GB</label>
|
|
|
- <div className="select is-block">
|
|
|
- <select
|
|
|
- defaultValue={-1}
|
|
|
- name="retentionBytes"
|
|
|
- ref={methods.register}
|
|
|
- disabled={isSubmitting}
|
|
|
- >
|
|
|
- <option value={-1}>Not Set</option>
|
|
|
- <option value={BYTES_IN_GB}>1 GB</option>
|
|
|
- <option value={BYTES_IN_GB * 10}>10 GB</option>
|
|
|
- <option value={BYTES_IN_GB * 20}>20 GB</option>
|
|
|
- <option value={BYTES_IN_GB * 50}>50 GB</option>
|
|
|
- </select>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <div className="columns">
|
|
|
- <div className="column">
|
|
|
- <label className="label">Maximum message size in bytes *</label>
|
|
|
- <input
|
|
|
- className="input"
|
|
|
- type="number"
|
|
|
- defaultValue="1000012"
|
|
|
- ref={methods.register({
|
|
|
- required: 'Maximum message size in bytes is required',
|
|
|
- })}
|
|
|
- name="maxMessageBytes"
|
|
|
- disabled={isSubmitting}
|
|
|
- />
|
|
|
- <p className="help is-danger">
|
|
|
- <ErrorMessage
|
|
|
- errors={methods.errors}
|
|
|
- name="maxMessageBytes"
|
|
|
- />
|
|
|
- </p>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <CustomParamsContainer isSubmitting={isSubmitting} />
|
|
|
-
|
|
|
- <input
|
|
|
- type="submit"
|
|
|
- className="button is-primary"
|
|
|
- disabled={isSubmitting}
|
|
|
- />
|
|
|
- </form>
|
|
|
+ <TopicForm
|
|
|
+ isSubmitting={isSubmitting}
|
|
|
+ onSubmit={methods.handleSubmit(onSubmit)}
|
|
|
+ />
|
|
|
</FormContext>
|
|
|
</div>
|
|
|
</div>
|