Fleet-maintained app rollbacks: Fix tooltips (#45599)

For the following bug:
- https://github.com/fleetdm/fleet/issues/45597
This commit is contained in:
Noah Talerman
2026-05-15 11:12:56 -04:00
committed by GitHub
parent e447a685f0
commit 855caac093
4 changed files with 48 additions and 17 deletions
@@ -122,8 +122,8 @@ const FileDetails = ({
onFileSelect &&
(gitopsCompatible ? (
<GitOpsModeTooltipWrapper
position="left"
tipOffset={4}
position="top"
tipOffset={8}
renderChildren={(disableChildren) =>
renderEditButton(disableChildren)
}
@@ -465,6 +465,7 @@ const PackageForm = ({
versionOptions={versionOptions}
onSelectVersion={onSelectVersion}
className={`${baseClass}__version-selector`}
isGitOpsMode={gitOpsModeEnabled}
/>
);
};
@@ -34,6 +34,11 @@ describe("PackageVersionSelector component", () => {
expect(
screen.queryByText("Latest (2.0.0)", { exact: false })
).not.toBeInTheDocument();
// No tooltip when there is only one version (nothing to roll back to)
expect(
document.querySelector(".component__tooltip-wrapper__element")
).toBeNull();
});
it("renders the package version dropdown when there are package versions to choose from", () => {
@@ -134,7 +139,7 @@ describe("PackageVersionSelector component", () => {
expect(latestOptionWrapper).toHaveAttribute("aria-disabled", "true");
});
it("shows the GitOps rollback tooltip text when the selected version is the first (latest) option", async () => {
it("shows the rollback tooltip when the latest version is selected and not in GitOps mode", async () => {
const { user } = renderWithSetup(
<PackageVersionSelector
selectedVersion="2.0.0"
@@ -146,7 +151,6 @@ describe("PackageVersionSelector component", () => {
/>
);
// TooltipWrapper attaches tooltip to this element:
const tooltipAnchor = document.querySelector(
".component__tooltip-wrapper__element"
) as HTMLElement;
@@ -163,6 +167,24 @@ describe("PackageVersionSelector component", () => {
});
});
it("shows no tooltip when in GitOps mode (parent handles the GitOps tooltip)", () => {
render(
<PackageVersionSelector
selectedVersion="2.0.0"
versionOptions={[
{ value: "2.0.0", label: "Latest (2.0.0)" },
{ value: "1.0.0", label: "1.0.0" },
]}
onSelectVersion={noop}
isGitOpsMode
/>
);
expect(
document.querySelector(".component__tooltip-wrapper__element")
).toBeNull();
});
it("shows the update-to-latest tooltip text when the selected version is not the first (latest) option", async () => {
const { user } = renderWithSetup(
<PackageVersionSelector
@@ -27,6 +27,7 @@ interface IPackageVersionSelectorProps {
versionOptions: CustomOptionType[];
selectedVersion: string;
onSelectVersion: (version: string) => void;
isGitOpsMode?: boolean;
}
const PackageVersionSelector = ({
@@ -34,6 +35,7 @@ const PackageVersionSelector = ({
versionOptions,
selectedVersion,
onSelectVersion,
isGitOpsMode = false,
}: IPackageVersionSelectorProps) => {
if (versionOptions.length === 0) {
return null;
@@ -47,24 +49,30 @@ const PackageVersionSelector = ({
onChange={(version) => onSelectVersion(version?.value || "")}
options={disableAllUIOptions(versionOptions, selectedVersion)} // Replace with "versions" when we want to enable selecting versions in the UI
placeholder="Select a version"
isDisabled={isGitOpsMode}
/>
);
if (isGitOpsMode || versionOptions.length < 2) {
return renderDropdown();
}
const tipContent =
selectedVersion === versionOptions[0].value ? (
<>
Currently, you can only use GitOps <br />
to roll back (UI coming soon).
</>
) : (
<>
Currently, to update to latest you have
<br /> to delete and re-add the software.
</>
);
return (
<TooltipWrapper
tipContent={
selectedVersion === versionOptions[0].value ? (
<>
Currently, you can only use GitOps <br />
to roll back (UI coming soon).
</>
) : (
<>
Currently, to update to latest you have
<br /> to delete and re-add the software.
</>
)
}
tipContent={tipContent}
position="top"
showArrow
underline={false}