diff --git a/site/src/api/queries/updateCheck.ts b/site/src/api/queries/updateCheck.ts
new file mode 100644
index 0000000000000..40fcc6a3cfdde
--- /dev/null
+++ b/site/src/api/queries/updateCheck.ts
@@ -0,0 +1,8 @@
+import * as API from "api/api";
+
+export const updateCheck = () => {
+ return {
+ queryKey: ["updateCheck"],
+ queryFn: () => API.getUpdateCheck(),
+ };
+};
diff --git a/site/src/components/Dashboard/DashboardLayout.test.tsx b/site/src/components/Dashboard/DashboardLayout.test.tsx
index 0020a014fd26c..b580225491207 100644
--- a/site/src/components/Dashboard/DashboardLayout.test.tsx
+++ b/site/src/components/Dashboard/DashboardLayout.test.tsx
@@ -1,14 +1,22 @@
import { renderWithAuth } from "testHelpers/renderHelpers";
import { DashboardLayout } from "./DashboardLayout";
-import * as API from "api/api";
import { screen } from "@testing-library/react";
+import { rest } from "msw";
+import { server } from "testHelpers/server";
test("Show the new Coder version notification", async () => {
- jest.spyOn(API, "getUpdateCheck").mockResolvedValue({
- current: false,
- version: "v0.12.9",
- url: "https://github.com/coder/coder/releases/tag/v0.12.9",
- });
+ server.use(
+ rest.get("/api/v2/updatecheck", (req, res, ctx) => {
+ return res(
+ ctx.status(200),
+ ctx.json({
+ current: false,
+ version: "v0.12.9",
+ url: "https://github.com/coder/coder/releases/tag/v0.12.9",
+ }),
+ );
+ }),
+ );
renderWithAuth(, {
children: [{ element:
Test page
}],
});
diff --git a/site/src/components/Dashboard/DashboardLayout.tsx b/site/src/components/Dashboard/DashboardLayout.tsx
index 8aa96360d2cdc..1947e3ef9cbda 100644
--- a/site/src/components/Dashboard/DashboardLayout.tsx
+++ b/site/src/components/Dashboard/DashboardLayout.tsx
@@ -1,4 +1,3 @@
-import { useMachine } from "@xstate/react";
import { DeploymentBanner } from "./DeploymentBanner/DeploymentBanner";
import { LicenseBanner } from "components/Dashboard/LicenseBanner/LicenseBanner";
import { Loader } from "components/Loader/Loader";
@@ -7,7 +6,6 @@ import { usePermissions } from "hooks/usePermissions";
import { FC, Suspense } from "react";
import { Outlet } from "react-router-dom";
import { dashboardContentBottomPadding } from "theme/constants";
-import { updateCheckMachine } from "xServices/updateCheck/updateCheckXService";
import { Navbar } from "./Navbar/Navbar";
import Snackbar from "@mui/material/Snackbar";
import Link from "@mui/material/Link";
@@ -15,15 +13,11 @@ import Box, { BoxProps } from "@mui/material/Box";
import InfoOutlined from "@mui/icons-material/InfoOutlined";
import Button from "@mui/material/Button";
import { docs } from "utils/docs";
+import { useUpdateCheck } from "./useUpdateCheck";
export const DashboardLayout: FC = () => {
const permissions = usePermissions();
- const [updateCheckState, updateCheckSend] = useMachine(updateCheckMachine, {
- context: {
- permissions,
- },
- });
- const { updateCheck } = updateCheckState.context;
+ const updateCheck = useUpdateCheck(permissions.viewUpdateCheck);
const canViewDeployment = Boolean(permissions.viewDeploymentValues);
return (
@@ -57,7 +51,7 @@ export const DashboardLayout: FC = () => {
{
})}
/>
- Coder {updateCheck?.version} is now available. View the{" "}
- release notes and{" "}
+ Coder {updateCheck.data?.version} is now available. View the{" "}
+ release notes and{" "}
upgrade instructions{" "}
for more information.
}
action={
-