128 lines
3.6 KiB
TypeScript
128 lines
3.6 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';
|
|
|
|
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',
|
|
];
|
|
const connectorConfigKey = (props: UseConnectorProps) => [
|
|
...connectorKey(props),
|
|
'config',
|
|
];
|
|
|
|
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: () => {
|
|
client.invalidateQueries(connectorKey(props));
|
|
client.invalidateQueries(connectorConfigKey(props));
|
|
},
|
|
}
|
|
);
|
|
}
|
|
export function useCreateConnector(clusterName: ClusterName) {
|
|
const client = useQueryClient();
|
|
return useMutation(
|
|
(props: CreateConnectorProps) =>
|
|
api.createConnector({ ...props, clusterName }),
|
|
{
|
|
onSuccess: () => client.invalidateQueries(connectorsKey(clusterName)),
|
|
}
|
|
);
|
|
}
|
|
export function useDeleteConnector(props: UseConnectorProps) {
|
|
const client = useQueryClient();
|
|
return useMutation(() => api.deleteConnector(props), {
|
|
onSuccess: () => client.invalidateQueries(connectorsKey(props.clusterName)),
|
|
});
|
|
}
|