Fleet UI: Allow software + os filter onto manage host page (#32350)

This commit is contained in:
RachelElysia 2025-08-28 09:10:29 -04:00 committed by GitHub
parent 35df59ba39
commit 37e25f58bc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 55 additions and 8 deletions

View file

@ -136,6 +136,8 @@ export const KernelsCard = ({
>
<CardHeader header="Kernels" />
<OSKernelsTable
osName={osVersion.name_only}
osVersion={osVersion.version}
data={osVersion.kernels}
isLoading={isLoading}
router={router}

View file

@ -39,6 +39,8 @@ const NoKernelsDetected = (): JSX.Element => {
};
interface ISoftwareVulnerabilitiesTableProps {
osName: string;
osVersion: string;
data: IOperatingSystemKernels[];
isLoading: boolean;
className?: string;
@ -53,6 +55,8 @@ interface IRowProps extends Row {
}
const OSKernelsTable = ({
osName,
osVersion,
data,
isLoading,
className,
@ -76,7 +80,11 @@ const OSKernelsTable = ({
}
};
const tableHeaders = generateTableConfig({ teamId: teamIdForApi });
const tableHeaders = generateTableConfig({
teamId: teamIdForApi,
osName,
osVersion,
});
const rendersOsKernelsVersionCount = () => (
<TableCount name="items" count={data?.length} />

View file

@ -20,6 +20,8 @@ import VulnerabilitiesCell from "../VulnerabilitiesCell";
interface IOsKernelsTableConfigProps {
teamId?: number;
osName: string;
osVersion: string;
}
type IHostCountCellProps = INumberCellProps<IOperatingSystemKernels>;
@ -27,7 +29,11 @@ type IVersionCellProps = IStringCellProps<IOperatingSystemKernels>;
type IViewAllHostsLinkProps = CellProps<IOperatingSystemKernels>;
type IVulnCellProps = CellProps<IOperatingSystemKernels, string[] | null>;
const generateTableConfig = ({ teamId }: IOsKernelsTableConfigProps) => {
const generateTableConfig = ({
teamId,
osName,
osVersion,
}: IOsKernelsTableConfigProps) => {
const tableHeaders = [
{
title: "Version",
@ -101,6 +107,8 @@ const generateTableConfig = ({ teamId }: IOsKernelsTableConfigProps) => {
queryParams={{
software_version_id: cellProps.row.original.id,
team_id: teamId,
os_name: osName,
os_version: osVersion,
}}
className="software-link"
rowHover

View file

@ -1044,6 +1044,13 @@ const ManageHostsPage = ({
newQueryParams.software_id = softwareId;
} else if (softwareVersionId) {
newQueryParams.software_version_id = softwareVersionId;
// Software version can be combined with os name and os version
// e.g. Kernel version 6.8.0-71.71 (software version) on Ubuntu 24.04.2LTS (os name and os version)
if (osVersionId || (osName && osVersion)) {
newQueryParams.os_version_id = osVersionId;
newQueryParams.os_name = osName;
newQueryParams.os_version = osVersion;
}
} else if (softwareTitleId) {
newQueryParams.software_title_id = softwareTitleId;
if (softwareStatus && teamIdForApi !== API_ALL_TEAMS_ID) {

View file

@ -652,6 +652,17 @@ const HostsFilterBlock = ({
case !!softwareStatus:
return renderSoftwareInstallStatusBlock();
case !!softwareId || !!softwareVersionId || !!softwareTitleId:
// Software version can be combined with os name and os version
// e.g. Kernel version 6.8.0-71.71 (software version) on Ubuntu 24.04.2LTS (os name and os version)
// Note: This is our only double filter available in the UI, are there others?
if (!!osVersionId || (!!osName && !!osVersion)) {
return (
<div className={`${baseClass}__multi-filter`}>
{renderSoftwareFilterBlock()}
{renderOSFilterBlock()}
</div>
);
}
return renderSoftwareFilterBlock();
case !!mdmId:
return renderMDMSolutionFilterBlock();

View file

@ -36,4 +36,9 @@
width: 150px; // Fits all dropdown options without resizing
}
}
&__multi-filter {
display: flex;
gap: $pad-small;
}
}

View file

@ -252,18 +252,24 @@ export const reconcileMutuallyExclusiveHostParams = ({
case !!softwareStatus ||
!!softwareTitleId ||
!!softwareVersionId ||
!!softwareId:
return reconcileSoftwareParams({
!!softwareId: {
const params: Record<string, unknown> = reconcileSoftwareParams({
teamId,
softwareId,
softwareVersionId,
softwareTitleId,
softwareStatus,
});
case !!softwareVersionId:
return { software_version_id: softwareVersionId };
case !!softwareId:
return { software_id: softwareId };
// Software version can be combined with os name and os version
// e.g. Kernel version 6.8.0-71.71 (software version) on Ubuntu 24.04.2LTS (os name and os version)
if (osVersionId) {
params.os_version_id = osVersionId;
} else if (osName && osVersion) {
params.os_name = osName;
params.os_version = osVersion;
}
return params;
}
case !!osVersionId:
return { os_version_id: osVersionId };
case !!osName && !!osVersion: