52 lines
1.5 KiB
JavaScript
52 lines
1.5 KiB
JavaScript
let bundleStaleNotified = false;
|
|
|
|
export function checkBundleVersion(response) {
|
|
const serverVersion = response.headers.get("X-Bundle-Version");
|
|
const clientVersion = window.__BUNDLE_VERSION__;
|
|
if (!serverVersion || !clientVersion || serverVersion === clientVersion) {
|
|
return;
|
|
}
|
|
|
|
if (bundleStaleNotified) {
|
|
return;
|
|
}
|
|
bundleStaleNotified = true;
|
|
|
|
const bar = document.createElement("div");
|
|
bar.setAttribute("role", "status");
|
|
bar.style.cssText = [
|
|
"position:fixed",
|
|
"top:0",
|
|
"left:0",
|
|
"right:0",
|
|
"z-index:99999",
|
|
"padding:12px 16px",
|
|
"background:#141620",
|
|
"color:#fff",
|
|
"text-align:center",
|
|
"font:14px system-ui,sans-serif",
|
|
"box-shadow:0 2px 8px rgba(0,0,0,0.2)",
|
|
].join(";");
|
|
|
|
const message = document.createElement("span");
|
|
message.textContent = "A new version of National CD Rateline is available.";
|
|
|
|
const button = document.createElement("button");
|
|
button.type = "button";
|
|
button.textContent = "Refresh";
|
|
button.style.cssText = "margin-left:12px;padding:4px 12px;cursor:pointer;border:0;border-radius:4px;background:#fff;color:#141620;font:inherit";
|
|
|
|
button.addEventListener("click", () => {
|
|
window.location.reload();
|
|
});
|
|
|
|
bar.append(message, button);
|
|
document.body.prepend(bar);
|
|
}
|
|
|
|
export async function apiFetch(url, options) {
|
|
const response = await fetch(url, options);
|
|
checkBundleVersion(response);
|
|
return response;
|
|
}
|