feat: added auto-refresh timeout for cloud new version updates

This commit is contained in:
Dmitry Popov
2025-03-05 18:32:48 +01:00
parent 6c22e6554d
commit aff00a18b5
4 changed files with 61 additions and 9 deletions
+53 -8
View File
@@ -1,5 +1,44 @@
const countdown = (secondsCount: number) => {
let minutes, seconds;
const dateEnd = new Date().getTime() + secondsCount * 1000;
const timer = setInterval(calculate, 1000);
function calculate() {
const dateStartDefault = new Date();
const dateStart = new Date(
dateStartDefault.getUTCFullYear(),
dateStartDefault.getUTCMonth(),
dateStartDefault.getUTCDate(),
dateStartDefault.getUTCHours(),
dateStartDefault.getUTCMinutes(),
dateStartDefault.getUTCSeconds(),
);
let timeRemaining = parseInt((dateEnd - dateStart.getTime()) / 1000);
if (timeRemaining >= 0) {
timeRemaining = timeRemaining % 86400;
timeRemaining = timeRemaining % 3600;
minutes = parseInt(timeRemaining / 60);
timeRemaining = timeRemaining % 60;
seconds = parseInt(timeRemaining);
document.getElementById('version-update-seconds').innerHTML = minutes * 60 + seconds;
} else {
return;
}
}
};
const LAST_VERSION_KEY = 'wandererLastVersion';
const updateVerion = (newVersion: string) => {
localStorage.setItem(LAST_VERSION_KEY, newVersion);
window.location.reload();
};
export default {
mounted() {
const hook = this;
@@ -14,12 +53,7 @@ export default {
el.classList.add('hex-brick--active');
});
setTimeout(() => {
const lastVersion = hook.el.dataset.version;
localStorage.setItem(LAST_VERSION_KEY, lastVersion);
window.location.reload();
}, 2000);
updateVerion(hook.el.dataset.version);
};
refreshZone.addEventListener('click', handleUpdate);
@@ -33,12 +67,23 @@ export default {
},
updated() {
const hook = this;
const activeVersion = this.getItem(LAST_VERSION_KEY);
const lastVersion = this.el.dataset.version;
const lastVersion = hook.el.dataset.version;
if (activeVersion === lastVersion) {
return;
}
this.el.classList.remove('hidden');
const enabled = hook.el.dataset.enabled;
if (enabled === 'true') {
hook.el.classList.remove('hidden');
const autoRefreshTimeout = Math.floor(Math.random() * (150 - 75 + 1)) + 75;
countdown(autoRefreshTimeout);
setTimeout(() => {
updateVerion(hook.el.dataset.version);
}, autoRefreshTimeout * 1000);
} else {
updateVerion(hook.el.dataset.version);
}
},
getItem(key: string) {
@@ -22,6 +22,7 @@ defmodule WandererAppWeb.Layouts do
end
attr :app_version, :string
attr :enabled, :boolean
def new_version_banner(assigns) do
~H"""
@@ -30,6 +31,7 @@ defmodule WandererAppWeb.Layouts do
phx-hook="NewVersionUpdate"
phx-update="ignore"
data-version={@app_version}
data-enabled={Jason.encode!(@enabled)}
class="!z-1000 hidden absolute top-0 left-0 w-full h-full group items-center fade-in-scale text-white !bg-opacity-70 rounded p-px overflow-hidden flex items-center"
>
<div class="hs-overlay-backdrop transition duration absolute left-0 top-0 w-full h-full bg-gray-900 bg-opacity-50 dark:bg-opacity-80 dark:bg-neutral-900">
@@ -19,7 +19,7 @@
<.ping_container rtt_class={@rtt_class} />
<.donate_container />
<.feedback_container />
<.new_version_banner app_version={@app_version} />
<.new_version_banner app_version={@app_version} enabled={@map_subscriptions_enabled?} />
</div>
<%= live_render(@socket, WandererAppWeb.ServerStatusLive,
@@ -4,6 +4,11 @@ defmodule WandererAppWeb.MapRefresh do
def render(assigns) do
~H"""
<div id="map-refresh" class="socket">
<div class="flex z-100 h-full w-full items-center justify-center z-auto">
<p class="text-[30px] ">
<span id="version-update-seconds"></span>
</p>
</div>
<div class="gel center-gel">
<div class="hex-brick h1"></div>
<div class="hex-brick h2"></div>