Skip to content

Commit a9b6bf0

Browse files
committed
UX: Open KC connectors in a separate tab
Resolves: #1088
1 parent 41f244e commit a9b6bf0

File tree

3 files changed

+63
-22
lines changed

3 files changed

+63
-22
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import React from 'react';
2+
import { LinkCell } from 'components/common/NewTable';
3+
import useAppParams from 'lib/hooks/useAppParams';
4+
import { clusterConnectConnectorPath, ClusterNameRoute } from 'lib/paths';
5+
import { CellContext } from '@tanstack/react-table';
6+
import { FullConnectorInfo } from 'generated-sources';
7+
8+
type KafkaConnectLinkCellProps = CellContext<FullConnectorInfo, string>;
9+
10+
export const KafkaConnectLinkCell = ({
11+
getValue,
12+
row,
13+
}: KafkaConnectLinkCellProps) => {
14+
const { clusterName } = useAppParams<ClusterNameRoute>();
15+
const { connect, name } = row.original;
16+
const value = getValue();
17+
18+
return (
19+
<LinkCell
20+
value={value}
21+
to={clusterConnectConnectorPath(clusterName, connect, name)}
22+
wordBreak
23+
/>
24+
);
25+
};

frontend/src/components/Connect/List/List.tsx

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
11
import React from 'react';
22
import useAppParams from 'lib/hooks/useAppParams';
3-
import { clusterConnectConnectorPath, ClusterNameRoute } from 'lib/paths';
3+
import { ClusterNameRoute } from 'lib/paths';
44
import Table, { TagCell } from 'components/common/NewTable';
55
import { FullConnectorInfo } from 'generated-sources';
66
import { useConnectors } from 'lib/hooks/api/kafkaConnect';
77
import { ColumnDef } from '@tanstack/react-table';
8-
import { useNavigate, useSearchParams } from 'react-router-dom';
9-
import BreakableTextCell from 'components/common/NewTable/BreakableTextCell';
8+
import { useSearchParams } from 'react-router-dom';
109
import { useQueryPersister } from 'components/common/NewTable/ColumnFilter';
1110
import { useLocalStoragePersister } from 'components/common/NewTable/ColumnResizer/lib';
1211

1312
import ActionsCell from './ActionsCell';
1413
import TopicsCell from './TopicsCell';
1514
import RunningTasksCell from './RunningTasksCell';
15+
import { KafkaConnectLinkCell } from './KafkaConnectLinkCell';
1616

17-
const kafkaConnectColumns: ColumnDef<FullConnectorInfo>[] = [
17+
const kafkaConnectColumns: ColumnDef<FullConnectorInfo, string>[] = [
1818
{
1919
header: 'Name',
2020
accessorKey: 'name',
21-
cell: BreakableTextCell,
21+
cell: KafkaConnectLinkCell,
2222
enableResizing: true,
2323
},
2424
{
2525
header: 'Connect',
2626
accessorKey: 'connect',
27-
cell: BreakableTextCell,
27+
cell: KafkaConnectLinkCell,
2828
filterFn: 'arrIncludesSome',
2929
meta: {
3030
filterVariant: 'multi-select',
@@ -34,14 +34,15 @@ const kafkaConnectColumns: ColumnDef<FullConnectorInfo>[] = [
3434
{
3535
header: 'Type',
3636
accessorKey: 'type',
37+
cell: KafkaConnectLinkCell,
3738
meta: { filterVariant: 'multi-select' },
3839
filterFn: 'arrIncludesSome',
3940
size: 120,
4041
},
4142
{
4243
header: 'Plugin',
4344
accessorKey: 'connectorClass',
44-
cell: BreakableTextCell,
45+
cell: KafkaConnectLinkCell,
4546
meta: { filterVariant: 'multi-select' },
4647
filterFn: 'arrIncludesSome',
4748
enableResizing: true,
@@ -77,7 +78,6 @@ const kafkaConnectColumns: ColumnDef<FullConnectorInfo>[] = [
7778
];
7879

7980
const List: React.FC = () => {
80-
const navigate = useNavigate();
8181
const { clusterName } = useAppParams<ClusterNameRoute>();
8282
const [searchParams] = useSearchParams();
8383
const { data: connectors } = useConnectors(
@@ -95,9 +95,6 @@ const List: React.FC = () => {
9595
enableSorting
9696
enableColumnResizing
9797
columnSizingPersister={columnSizingPersister}
98-
onRowClick={({ original: { connect, name } }) =>
99-
navigate(clusterConnectConnectorPath(clusterName, connect, name))
100-
}
10198
emptyMessage="No connectors found"
10299
setRowId={(originalRow) => `${originalRow.name}-${originalRow.connect}`}
103100
filterPersister={filterPersister}

frontend/src/components/Connect/List/__tests__/List.spec.tsx

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -64,18 +64,37 @@ describe('Connectors List', () => {
6464

6565
it('opens broker when row clicked', async () => {
6666
renderComponent();
67-
await userEvent.click(
68-
screen.getByRole('row', {
69-
name: 'hdfs-source-connector first SOURCE FileStreamSource a b c RUNNING 2 of 2',
70-
})
67+
screen.debug();
68+
expect(screen.getByText('hdfs-source-connector')).toHaveAttribute(
69+
'href',
70+
clusterConnectConnectorPath(
71+
clusterName,
72+
'first',
73+
'hdfs-source-connector'
74+
)
75+
);
76+
expect(screen.getByText('first')).toHaveAttribute(
77+
'href',
78+
clusterConnectConnectorPath(
79+
clusterName,
80+
'first',
81+
'hdfs-source-connector'
82+
)
83+
);
84+
expect(screen.getByText('SOURCE')).toHaveAttribute(
85+
'href',
86+
clusterConnectConnectorPath(
87+
clusterName,
88+
'first',
89+
'hdfs-source-connector'
90+
)
7191
);
72-
await waitFor(() =>
73-
expect(mockedUsedNavigate).toBeCalledWith(
74-
clusterConnectConnectorPath(
75-
clusterName,
76-
'first',
77-
'hdfs-source-connector'
78-
)
92+
expect(screen.getAllByText('FileStreamSource')[0]).toHaveAttribute(
93+
'href',
94+
clusterConnectConnectorPath(
95+
clusterName,
96+
'first',
97+
'hdfs-source-connector'
7998
)
8099
);
81100
});

0 commit comments

Comments
 (0)