kafka-ui/kafka-ui-react-app/src/lib/hooks/api/kafkaConnect.ts
Oleg Shur 84d3b329ba
Migrate KSQL to RQ. Get rid of redux reducer (#3478)
* Migrate KSQL to RQ. Get rid of redux reducer

* refactor react-ace using

* get rid of deadcode

* ace

* Fix add/remove stream props

* ace

* Fix Clear result handler

* Fix error handler

* rollback removal of yup async validation helper

* reduce re-renders

* move ace to separate chunk

* upd KsqlQueryForm

* feedback

---------

Co-authored-by: VladSenyuta <vlad.senyuta@gmail.com>
2023-03-23 16:36:29 +03:00

141 lines
3.9 KiB
TypeScript

import {
Connect,
Connector,
ConnectorAction,
NewConnector,
} from 'generated-sources';
import { kafkaConnectApiClient as api } from 'lib/api';
import sortBy from 'lodash/sortBy';
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { ClusterName } from 'redux/interfaces';
import { showSuccessAlert } from 'lib/errorHandling';
interface UseConnectorProps {
clusterName: ClusterName;
connectName: Connect['name'];
connectorName: Connector['name'];
}
interface CreateConnectorProps {
connectName: Connect['name'];
newConnector: NewConnector;
}
const connectsKey = (clusterName: ClusterName) => [
'clusters',
clusterName,
'connects',
];
const connectorsKey = (clusterName: ClusterName, search?: string) => {
const base = ['clusters', clusterName, 'connectors'];
if (search) {
return [...base, { search }];
}
return base;
};
const connectorKey = (props: UseConnectorProps) => [
'clusters',
props.clusterName,
'connects',
props.connectName,
'connectors',
props.connectorName,
];
const connectorTasksKey = (props: UseConnectorProps) => [
...connectorKey(props),
'tasks',
];
export function useConnects(clusterName: ClusterName) {
return useQuery(connectsKey(clusterName), () =>
api.getConnects({ clusterName })
);
}
export function useConnectors(clusterName: ClusterName, search?: string) {
return useQuery(
connectorsKey(clusterName, search),
() => api.getAllConnectors({ clusterName, search }),
{
select: (data) => sortBy(data, 'name'),
}
);
}
export function useConnector(props: UseConnectorProps) {
return useQuery(connectorKey(props), () => api.getConnector(props));
}
export function useConnectorTasks(props: UseConnectorProps) {
return useQuery(
connectorTasksKey(props),
() => api.getConnectorTasks(props),
{
select: (data) => sortBy(data, 'status.id'),
}
);
}
export function useUpdateConnectorState(props: UseConnectorProps) {
const client = useQueryClient();
return useMutation(
(action: ConnectorAction) => api.updateConnectorState({ ...props, action }),
{
onSuccess: () => client.invalidateQueries(connectorKey(props)),
}
);
}
export function useRestartConnectorTask(props: UseConnectorProps) {
const client = useQueryClient();
return useMutation(
(taskId: number) => api.restartConnectorTask({ ...props, taskId }),
{
onSuccess: () => client.invalidateQueries(connectorTasksKey(props)),
}
);
}
export function useConnectorConfig(props: UseConnectorProps) {
return useQuery([...connectorKey(props), 'config'], () =>
api.getConnectorConfig(props)
);
}
export function useUpdateConnectorConfig(props: UseConnectorProps) {
const client = useQueryClient();
return useMutation(
(requestBody: Connector['config']) =>
api.setConnectorConfig({ ...props, requestBody }),
{
onSuccess: () => {
showSuccessAlert({
message: `Config successfully updated.`,
});
client.invalidateQueries(connectorKey(props));
},
}
);
}
function useCreateConnectorMutation(clusterName: ClusterName) {
const client = useQueryClient();
return useMutation(
(props: CreateConnectorProps) =>
api.createConnector({ ...props, clusterName }),
{
onSuccess: () => client.invalidateQueries(connectorsKey(clusterName)),
}
);
}
// this will change later when we validate the request before
export function useCreateConnector(clusterName: ClusterName) {
const mutate = useCreateConnectorMutation(clusterName);
return {
createResource: async (param: CreateConnectorProps) => {
return mutate.mutateAsync(param);
},
...mutate,
};
}
export function useDeleteConnector(props: UseConnectorProps) {
const client = useQueryClient();
return useMutation(() => api.deleteConnector(props), {
onSuccess: () => client.invalidateQueries(connectorsKey(props.clusterName)),
});
}