import { ErrorMessage } from '@hookform/error-message'; import { Button } from 'components/common/Button/Button'; import ControlledInput from 'components/common/Input/ControlledInput'; import { FormError } from 'components/common/Input/Input.styled'; import { InputLabel } from 'components/common/Input/InputLabel.styled'; import React from 'react'; import { FormProvider, useForm } from 'react-hook-form'; import { RouteParamsClusterTopic } from 'lib/paths'; import useAppParams from 'lib/hooks/useAppParams'; import { useConfirm } from 'lib/hooks/useConfirm'; import { useIncreaseTopicPartitionsCount, useUpdateTopicReplicationFactor, } from 'lib/hooks/api/topics'; import * as S from './DangerZone.styled'; export interface DangerZoneProps { defaultPartitions: number; defaultReplicationFactor: number; } const DangerZone: React.FC = ({ defaultPartitions, defaultReplicationFactor, }) => { const params = useAppParams(); const [partitions, setPartitions] = React.useState(defaultPartitions); const [replicationFactor, setReplicationFactor] = React.useState( defaultReplicationFactor ); const increaseTopicPartitionsCount = useIncreaseTopicPartitionsCount(params); const updateTopicReplicationFactor = useUpdateTopicReplicationFactor(params); const partitionsMethods = useForm({ defaultValues: { partitions, }, }); const replicationFactorMethods = useForm({ defaultValues: { replicationFactor, }, }); const confirm = useConfirm(); const confirmPartitionsChange = () => confirm( `Are you sure you want to increase the number of partitions? Do it only if you 100% know what you are doing!`, () => increaseTopicPartitionsCount.mutateAsync( partitionsMethods.getValues('partitions') ) ); const confirmReplicationFactorChange = () => confirm('Are you sure you want to update the replication factor?', () => updateTopicReplicationFactor.mutateAsync( replicationFactorMethods.getValues('replicationFactor') ) ); const validatePartitions = (data: { partitions: number }) => { if (data.partitions < defaultPartitions) { partitionsMethods.setError('partitions', { type: 'manual', message: 'You can only increase the number of partitions!', }); } else { setPartitions(data.partitions); confirmPartitionsChange(); } }; const validateReplicationFactor = (data: { replicationFactor: number }) => { try { setReplicationFactor(data.replicationFactor); confirmReplicationFactorChange(); } catch (e) { // do nothing } }; return ( Danger Zone Change these parameters only if you are absolutely sure what you are doing.
Number of partitions *
Replication Factor *
); }; export default DangerZone;