fleet/frontend/pages/ManageControlsPage/OSUpdates/components/CurrentVersionSection/CurrentVersionSection.tsx
Gabriel Hernandez 746a254362
fix ui bug for showing os updates table with no team (#17862)
quick fix to correctly show the os versions for "no teams" on os updates
page

**before:**

<img width="1688" alt="image"
src="https://github.com/fleetdm/fleet/assets/1153709/6867e62f-48a0-4020-9760-86c6f62af207">

**after:**

<img width="1687" alt="image"
src="https://github.com/fleetdm/fleet/assets/1153709/6d5245e4-bb46-466a-ba9f-7752ea1b0997">

- [x] Manual QA for all new/changed functionality
2024-03-26 16:38:53 +00:00

105 lines
2.6 KiB
TypeScript

import React from "react";
import { useQuery } from "react-query";
import { AxiosError } from "axios";
import { IOperatingSystemVersion } from "interfaces/operating_system";
import {
getOSVersions,
IOSVersionsResponse,
} from "services/entities/operating_systems";
import LastUpdatedText from "components/LastUpdatedText";
import SectionHeader from "components/SectionHeader";
import DataError from "components/DataError";
import OSVersionTable from "../OSVersionTable";
import { OSUpdatesSupportedPlatform } from "../../OSUpdates";
import OSVersionsEmptyState from "../OSVersionsEmptyState";
/** This overrides the `platform` attribute on IOperatingSystemVersion so that only our filtered platforms (currently
* "darwin" and "windows") values are included */
export type IFilteredOperatingSystemVersion = Omit<
IOperatingSystemVersion,
"platform"
> & {
platform: OSUpdatesSupportedPlatform;
};
const baseClass = "os-updates-current-version-section";
interface ICurrentVersionSectionProps {
currentTeamId: number;
}
const CurrentVersionSection = ({
currentTeamId,
}: ICurrentVersionSectionProps) => {
const { data, isError, isLoading: isLoadingOsVersions } = useQuery<
IOSVersionsResponse,
AxiosError
>(
["os_versions", currentTeamId],
() => getOSVersions({ teamId: currentTeamId }),
{
retry: false,
refetchOnWindowFocus: false,
}
);
const generateSubTitleText = () => {
return (
<LastUpdatedText
lastUpdatedAt={data?.counts_updated_at}
whatToRetrieve="operating systems"
/>
);
};
const renderTable = () => {
if (isError) {
return (
<DataError
className={`${baseClass}__error`}
description="Refresh the page to try again."
excludeIssueLink
/>
);
}
if (!data) {
return null;
}
if (!data.os_versions) {
return <OSVersionsEmptyState />;
}
// We only want to show windows and mac versions atm.
const filteredOSVersionData = data.os_versions.filter((osVersion) => {
return (
osVersion.platform === "windows" || osVersion.platform === "darwin"
);
}) as IFilteredOperatingSystemVersion[];
return (
<OSVersionTable
osVersionData={filteredOSVersionData}
currentTeamId={currentTeamId}
isLoading={isLoadingOsVersions}
/>
);
};
return (
<div className={baseClass}>
<SectionHeader
title="Current versions"
subTitle={generateSubTitleText()}
className={`${baseClass}__header`}
/>
{renderTable()}
</div>
);
};
export default CurrentVersionSection;