12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- import React from 'react';
- import cx from 'classnames';
- import { NavLink } from 'react-router-dom';
- import { TopicWithDetailedInfo } from 'redux/interfaces';
- interface ListItemProps {
- topic: TopicWithDetailedInfo;
- }
- const ListItem: React.FC<ListItemProps> = ({
- topic: { name, internal, partitions },
- }) => {
- const outOfSyncReplicas = React.useMemo(() => {
- if (partitions === undefined || partitions.length === 0) {
- return 0;
- }
- return partitions.reduce((memo: number, { replicas }) => {
- const outOfSync = replicas?.filter(({ inSync }) => !inSync);
- return memo + (outOfSync?.length || 0);
- }, 0);
- }, [partitions]);
- return (
- <tr>
- <td>
- <NavLink
- exact
- to={`topics/${name}`}
- activeClassName="is-active"
- className="title is-6"
- >
- {name}
- </NavLink>
- </td>
- <td>{partitions?.length}</td>
- <td>{outOfSyncReplicas}</td>
- <td>
- <div
- className={cx('tag is-small', internal ? 'is-light' : 'is-success')}
- >
- {internal ? 'Internal' : 'External'}
- </div>
- </td>
- </tr>
- );
- };
- export default ListItem;
|