import React from "react"; import PATHS from "router/paths"; import { browserHistory } from "react-router"; import classnames from "classnames"; import { IDropdownOption } from "interfaces/dropdownOption"; import Button from "components/buttons/Button"; import ActionsDropdown from "components/ActionsDropdown"; import Icon from "components/Icon"; import { getPathWithQueryParams, QueryParams } from "utilities/url"; interface IHostLinkProps { queryParams?: QueryParams; className?: string; /** Including the platformId will view all hosts for the platform provided */ platformLabelId?: number; /** Shows right chevron without text */ condensed?: boolean; excludeChevron?: boolean; responsive?: boolean; /** Custom text replaces "View all hosts" in button or "Actions" in dropdown */ customText?: string; /** Table links shows on row hover and tab focus only */ rowHover?: boolean; /** Don't actually create a button, useful when click is handled by an ancestor */ noLink?: boolean; /** When provided, replaces View all hosts button with ActionDropdown */ dropdown?: { options: IDropdownOption[]; onChange: (value: string) => void }; } const baseClass = "view-all-hosts-button"; const ViewAllHostsButton = ({ queryParams, className, platformLabelId, condensed = false, excludeChevron = false, responsive = false, customText, rowHover = false, noLink = false, dropdown, }: IHostLinkProps): JSX.Element => { const viewAllHostsButtonClass = classnames(baseClass, className, { [`${baseClass}__condensed`]: condensed, "row-hover-button": rowHover, }); const endpoint = platformLabelId ? PATHS.MANAGE_HOSTS_LABEL(platformLabelId) : PATHS.MANAGE_HOSTS; const path = getPathWithQueryParams(endpoint, queryParams); const onClick = (e: MouseEvent): void => { if (!noLink) { e.stopPropagation(); // Allows for button to have different onClick behavior than the row's onClick behavior if (path) { browserHistory.push(path); } } }; if (dropdown) { return ( ); } return ( ); }; export default ViewAllHostsButton;