mirror of
https://github.com/shlinkio/shlink-web-client.git
synced 2026-07-18 17:51:53 +00:00
42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
import { faChevronRight as chevronIcon } from '@fortawesome/free-solid-svg-icons';
|
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
import { clsx } from 'clsx';
|
|
import type { FC } from 'react';
|
|
import { Link } from 'react-router';
|
|
import type { ServerWithId } from './data';
|
|
|
|
type ServersListGroupProps = {
|
|
servers: ServerWithId[];
|
|
borderless?: boolean;
|
|
};
|
|
|
|
const ServerListItem = ({ id, name }: { id: string; name: string }) => (
|
|
<Link
|
|
to={`/server/${id}`}
|
|
className={clsx(
|
|
'servers-list__server-item',
|
|
'flex items-center justify-between gap-x-2 px-4 py-3',
|
|
'rounded-none hover:bg-lm-secondary hover:dark:bg-dm-secondary',
|
|
'border-b last:border-0 border-lm-border dark:border-dm-border',
|
|
)}
|
|
>
|
|
<span className="truncate">{name}</span>
|
|
<FontAwesomeIcon icon={chevronIcon} />
|
|
</Link>
|
|
);
|
|
|
|
export const ServersListGroup: FC<ServersListGroupProps> = ({ servers, borderless }) => (
|
|
servers.length > 0 && (
|
|
<div
|
|
data-testid="list"
|
|
className={clsx(
|
|
'w-full border-lm-border dark:border-dm-border',
|
|
'md:max-h-56 md:overflow-y-auto -mb-1 scroll-thin',
|
|
{ 'border-y': !borderless },
|
|
)}
|
|
>
|
|
{servers.map(({ id, name }) => <ServerListItem key={id} id={id} name={name} />)}
|
|
</div>
|
|
)
|
|
);
|