fleet/frontend/components/GitOpsModeTooltipWrapper/GitOpsModeTooltipWrapper.tsx
jacobshandling 391bd0a5a0
UI - GitOps mode, part 2 (#26509)
## For #26229 

This is the 2nd iterative PR for this ticket. It includes:
- tests with a new testing utility
- refactored argument and class names
- another batch of UI updates

- [x] Added/updated automated tests
- [x] Manual QA for all new/changed functionality

---------

Co-authored-by: Jacob Shandling <jacob@fleetdm.com>
2025-02-21 12:22:08 -08:00

60 lines
1.5 KiB
TypeScript

import CustomLink from "components/CustomLink";
import TooltipWrapper, {
ITooltipWrapper,
} from "components/TooltipWrapper/TooltipWrapper";
import { AppContext } from "context/app";
import React, { useContext } from "react";
interface IGitOpsModeTooltipWrapper {
renderChildren: (disableChildren?: boolean) => React.ReactNode;
position?: ITooltipWrapper["position"];
tipOffset?: ITooltipWrapper["tipOffset"];
fixedPositionStrategy?: ITooltipWrapper["fixedPositionStrategy"];
}
const baseClass = "gitops-mode-tooltip-wrapper";
const GitOpsModeTooltipWrapper = ({
position = "top",
tipOffset,
renderChildren,
fixedPositionStrategy,
}: IGitOpsModeTooltipWrapper) => {
const { config } = useContext(AppContext);
const gitOpsModeEnabled = config?.gitops.gitops_mode_enabled;
const repoURL = config?.gitops.repository_url;
if (!gitOpsModeEnabled) {
return <>{renderChildren()}</>;
}
const tipContent = (
// at this point repoURL will always be defined
<>
{repoURL && (
<>
Manage in{" "}
<CustomLink newTab text="YAML" variant="tooltip-link" url={repoURL} />
<br />
</>
)}
(GitOps mode enabled)
</>
);
return (
<TooltipWrapper
className={baseClass}
position={position}
tipOffset={tipOffset}
tipContent={tipContent}
underline={false}
showArrow
fixedPositionStrategy={fixedPositionStrategy}
>
{renderChildren(true)}
</TooltipWrapper>
);
};
export default GitOpsModeTooltipWrapper;