mirror of
https://github.com/Dokploy/dokploy.git
synced 2026-06-28 10:35:21 +02:00
* refactor: add sidebar * chore: add deps * refactor: update sidebar * refactor: another layout * refactor: update variant * refactor: change layout * refactor: change variant * refactor: enhance sidebar navigation with active state management * feat: add project button to dashboard * Merge branch 'canary' into feat/add-sidebar * refactor: add loader * refactor: update destinations and refactor * refactor: ui refactor certificates * refactor: delete unused files * refactor: remove unused files and duplicate registry * refactor: update style registry * refactor: add new design registry * refactor: enhance git providers * refactor: remove duplicate files * refactor: update * refactor: update users * refactor: delete unused files * refactor: update profile * refactor: apply changes * refactor: update UI * refactor: enhance Docker monitoring UI layout * refactor: add theme toggle and language selection to user navigation (#1083) * refactor: remove unused files * feat: add filter to services * refactor: add active items * refactor: remove tab prop * refactor: remove unused files * refactor: remove duplicated files * refactor: remove unused files * refactor: remove duplicate files * refactor: remove unused files * refactor: delete unused files * refactor: remove unsued files * refactor: delete unused files * refactor: lint * refactor: remove unused secuirty * refactor: delete unused files * refactor: delete unused files * remove imports * refactor: add update button * refactor: delete unused files * refactor: remove unused code * refactor: remove unused files * refactor: update login page * refactor: update login UI * refactor: update ui reset password * refactor: add justify end * feat: add suscriptions * feat: add sheet * feat: add logs for postgres * feat: add logs for all databases * feat: add server logs with drawer logs * refactor: remove unused files * refactor: add refetch when closing * refactor: fix linter * chore: bump node-20 * revert * refactor: fix conflicts * refactor: update * refactor: add missing deps * refactor: delete duplicate files * refactor: delete unsued files * chore: lint * refactor: remove unsued file * refactor: add refetch * refactor: remove duplicated files * refactor: delete unused files * refactor: update setup onboarding * refactor: add breadcrumb * refactor: apply updates * refactor: add faker * refactor: use 0 in validation * refactor: show correct state * refactor: update --------- Co-authored-by: vishalkadam47 <vishal@jeevops.com> Co-authored-by: Vishal kadam <107353260+vishalkadam47@users.noreply.github.com>
80 lines
2.0 KiB
TypeScript
80 lines
2.0 KiB
TypeScript
import { api } from "@/utils/api";
|
|
import type { IUpdateData } from "@dokploy/server/index";
|
|
import { useRouter } from "next/router";
|
|
import { useEffect, useRef, useState } from "react";
|
|
import UpdateServer from "../dashboard/settings/web-server/update-server";
|
|
|
|
const AUTO_CHECK_UPDATES_INTERVAL_MINUTES = 7;
|
|
|
|
export const UpdateServerButton = () => {
|
|
const [updateData, setUpdateData] = useState<IUpdateData>({
|
|
latestVersion: null,
|
|
updateAvailable: false,
|
|
});
|
|
const router = useRouter();
|
|
const { data: isCloud } = api.settings.isCloud.useQuery();
|
|
const { mutateAsync: getUpdateData } =
|
|
api.settings.getUpdateData.useMutation();
|
|
|
|
const checkUpdatesIntervalRef = useRef<null | NodeJS.Timeout>(null);
|
|
|
|
if (isCloud) {
|
|
return null;
|
|
}
|
|
useEffect(() => {
|
|
// Handling of automatic check for server updates
|
|
if (isCloud) {
|
|
return;
|
|
}
|
|
|
|
if (!localStorage.getItem("enableAutoCheckUpdates")) {
|
|
// Enable auto update checking by default if user didn't change it
|
|
localStorage.setItem("enableAutoCheckUpdates", "true");
|
|
}
|
|
|
|
const clearUpdatesInterval = () => {
|
|
if (checkUpdatesIntervalRef.current) {
|
|
clearInterval(checkUpdatesIntervalRef.current);
|
|
}
|
|
};
|
|
|
|
const checkUpdates = async () => {
|
|
try {
|
|
if (localStorage.getItem("enableAutoCheckUpdates") !== "true") {
|
|
return;
|
|
}
|
|
|
|
const fetchedUpdateData = await getUpdateData();
|
|
|
|
if (fetchedUpdateData?.updateAvailable) {
|
|
// Stop interval when update is available
|
|
clearUpdatesInterval();
|
|
setUpdateData(fetchedUpdateData);
|
|
}
|
|
} catch (error) {
|
|
console.error("Error auto-checking for updates:", error);
|
|
}
|
|
};
|
|
|
|
checkUpdatesIntervalRef.current = setInterval(
|
|
checkUpdates,
|
|
AUTO_CHECK_UPDATES_INTERVAL_MINUTES * 60000,
|
|
);
|
|
|
|
// Also check for updates on initial page load
|
|
checkUpdates();
|
|
|
|
return () => {
|
|
clearUpdatesInterval();
|
|
};
|
|
}, []);
|
|
|
|
return (
|
|
updateData.updateAvailable && (
|
|
<div>
|
|
<UpdateServer updateData={updateData} />
|
|
</div>
|
|
)
|
|
);
|
|
};
|