mirror of
https://github.com/fleetdm/fleet
synced 2026-05-19 15:09:20 +00:00
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
105 lines
2.6 KiB
TypeScript
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;
|