diff --git a/src/components/EntityInfo/EntityInfo.test.tsx b/src/components/EntityInfo/EntityInfo.test.tsx index 2e42645e4..911b20690 100644 --- a/src/components/EntityInfo/EntityInfo.test.tsx +++ b/src/components/EntityInfo/EntityInfo.test.tsx @@ -16,7 +16,7 @@ describe("Entity info", () => { controller1, region: "eu1", }} />, @@ -25,6 +25,8 @@ describe("Entity info", () => { url: "/models/user-eggman@external/group-test", }, ); - expect(screen.getByText("eu1")).toHaveAttribute("data-name", "region"); + expect(screen.getByText("model1")).toHaveClass("u-truncate"); + expect(screen.getByText("controller1")).not.toHaveClass("u-truncate"); + expect(screen.getByText("eu1")).toHaveClass("u-truncate"); }); }); diff --git a/src/components/EntityInfo/EntityInfo.tsx b/src/components/EntityInfo/EntityInfo.tsx index fb0fad106..d5d0ec680 100644 --- a/src/components/EntityInfo/EntityInfo.tsx +++ b/src/components/EntityInfo/EntityInfo.tsx @@ -1,5 +1,7 @@ import type { ReactNode } from "react"; +import TruncatedTooltip from "components/TruncatedTooltip"; + import "./_entity-info.scss"; type Props = { @@ -13,7 +15,13 @@ export default function EntityInfo({ data }: Props): JSX.Element { return (

{label}

-

{value}

+ {typeof value === "string" || typeof value === "number" ? ( + + {value} + + ) : ( +

{value}

+ )}
); })} diff --git a/src/components/EntityInfo/_entity-info.scss b/src/components/EntityInfo/_entity-info.scss index 039aa3e7a..10f5ee659 100644 --- a/src/components/EntityInfo/_entity-info.scss +++ b/src/components/EntityInfo/_entity-info.scss @@ -2,12 +2,10 @@ &__grid { display: grid; - @media (width >= 1580px) { - grid-template-columns: repeat(2, 1fr); - } - &-item { + min-width: 0; overflow-wrap: anywhere; + width: 100%; .p-muted-heading { font-size: 0.75rem; diff --git a/src/components/TruncatedTooltip/TruncatedTooltip.test.tsx b/src/components/TruncatedTooltip/TruncatedTooltip.test.tsx index e75d455ab..9b0a3ee81 100644 --- a/src/components/TruncatedTooltip/TruncatedTooltip.test.tsx +++ b/src/components/TruncatedTooltip/TruncatedTooltip.test.tsx @@ -71,4 +71,26 @@ describe("TruncatedTooltip", () => { }); expect(screen.getByTestId("tooltip-portal")).not.toHaveClass("u-hide"); }); + + it("should render an inner div by default", () => { + const content = "Some content"; + render( + {content}, + ); + const innerElement = screen.getByText(content); + expect(innerElement.tagName.toLowerCase()).toBe("div"); + expect(innerElement).toHaveClass("u-truncate"); + }); + + it("should render an inner custom element type", () => { + const content = "Some content"; + render( + + {content} + , + ); + expect(screen.getByRole("button", { name: content })).toHaveClass( + "u-truncate", + ); + }); }); diff --git a/src/components/TruncatedTooltip/TruncatedTooltip.tsx b/src/components/TruncatedTooltip/TruncatedTooltip.tsx index 763e98eb8..91aa45092 100644 --- a/src/components/TruncatedTooltip/TruncatedTooltip.tsx +++ b/src/components/TruncatedTooltip/TruncatedTooltip.tsx @@ -1,7 +1,7 @@ import type { TooltipProps } from "@canonical/react-components"; import { Tooltip } from "@canonical/react-components"; import classNames from "classnames"; -import type { PropsWithChildren } from "react"; +import type { ComponentType, ElementType, PropsWithChildren } from "react"; import { useCallback, useEffect, useMemo, useState, useRef } from "react"; import "./_truncated-tooltip.scss"; @@ -10,6 +10,7 @@ type Props = { tooltipClassName?: TooltipProps["tooltipClassName"]; positionElementClassName?: TooltipProps["positionElementClassName"]; wrapperClassName?: string; + element?: ElementType | ComponentType; } & TooltipProps & PropsWithChildren; @@ -21,6 +22,7 @@ const TruncatedTooltip = ({ positionElementClassName, tooltipClassName, wrapperClassName, + element: Component = "div", ...tooltipProps }: Props) => { const truncatedNode = useRef(null); @@ -70,9 +72,9 @@ const TruncatedTooltip = ({ "u-hide": !truncated, })} > -
+ {children} -
+ ); diff --git a/src/pages/AdvancedSearch/SearchForm/SearchHelp/SearchHelp.tsx b/src/pages/AdvancedSearch/SearchForm/SearchHelp/SearchHelp.tsx index 2d1d6a766..6487d8a65 100644 --- a/src/pages/AdvancedSearch/SearchForm/SearchHelp/SearchHelp.tsx +++ b/src/pages/AdvancedSearch/SearchForm/SearchHelp/SearchHelp.tsx @@ -41,7 +41,7 @@ const SearchHelp = ({ search }: Props): JSX.Element => {
  • Get all available models:{" "}