Revert "Refactor OTA update handling and improve error reporting."
This reverts commit 7c128a27eb.
This commit is contained in:
@@ -1,50 +1,60 @@
|
|||||||
class ToastService {
|
class ToastService {
|
||||||
private container: HTMLElement;
|
private container: HTMLElement;
|
||||||
private stylesInjected = false;
|
private stylesInjected = false;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.container = document.getElementById('toast-container') as HTMLElement;
|
this.container = this.ensureContainer();
|
||||||
this.injectStyles();
|
this.injectStyles();
|
||||||
|
}
|
||||||
|
|
||||||
|
info(message: string, timeoutMs: number = 5000) {
|
||||||
|
const el = this.createToast(message, 'info');
|
||||||
|
this.container.appendChild(el);
|
||||||
|
// Auto-dismiss after timeout
|
||||||
|
const timer = window.setTimeout(() => this.dismiss(el), timeoutMs);
|
||||||
|
// Dismiss on click immediately
|
||||||
|
el.addEventListener('click', () => {
|
||||||
|
window.clearTimeout(timer);
|
||||||
|
this.dismiss(el);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
error(message: string) {
|
||||||
|
console.error(message);
|
||||||
|
const el = this.createToast(message, 'error');
|
||||||
|
this.container.appendChild(el);
|
||||||
|
// Only dismiss on click
|
||||||
|
el.addEventListener('click', () => this.dismiss(el));
|
||||||
|
}
|
||||||
|
|
||||||
|
private dismiss(el: HTMLElement) {
|
||||||
|
if (!el.parentElement) return;
|
||||||
|
el.parentElement.removeChild(el);
|
||||||
|
}
|
||||||
|
|
||||||
|
private createToast(message: string, type: 'info' | 'error'): HTMLElement {
|
||||||
|
const div = document.createElement('div');
|
||||||
|
div.className = `toast ${type}`;
|
||||||
|
div.textContent = message;
|
||||||
|
div.setAttribute('role', 'status');
|
||||||
|
div.setAttribute('aria-live', 'polite');
|
||||||
|
return div;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ensureContainer(): HTMLElement {
|
||||||
|
let container = document.getElementById('toast-container');
|
||||||
|
if (!container) {
|
||||||
|
container = document.createElement('div');
|
||||||
|
container.id = 'toast-container';
|
||||||
|
document.body.appendChild(container);
|
||||||
}
|
}
|
||||||
|
return container;
|
||||||
|
}
|
||||||
|
|
||||||
info(message: string, timeoutMs: number = 5000) {
|
private injectStyles() {
|
||||||
const el = this.createToast(message, 'info');
|
if (this.stylesInjected) return;
|
||||||
this.container.appendChild(el);
|
const style = document.createElement('style');
|
||||||
// Auto-dismiss after timeout
|
style.textContent = `
|
||||||
const timer = window.setTimeout(() => this.dismiss(el), timeoutMs);
|
|
||||||
// Dismiss on click immediately
|
|
||||||
el.addEventListener('click', () => {
|
|
||||||
window.clearTimeout(timer);
|
|
||||||
this.dismiss(el);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
error(message: string) {
|
|
||||||
console.error(message);
|
|
||||||
const el = this.createToast(message, 'error');
|
|
||||||
this.container.appendChild(el);
|
|
||||||
// Only dismiss on click
|
|
||||||
el.addEventListener('click', () => this.dismiss(el));
|
|
||||||
}
|
|
||||||
|
|
||||||
private dismiss(el: HTMLElement) {
|
|
||||||
if (!el.parentElement) return;
|
|
||||||
el.parentElement.removeChild(el);
|
|
||||||
}
|
|
||||||
|
|
||||||
private createToast(message: string, type: 'info' | 'error'): HTMLElement {
|
|
||||||
const div = document.createElement('div');
|
|
||||||
div.className = `toast ${type}`;
|
|
||||||
div.textContent = message;
|
|
||||||
div.setAttribute('role', 'status');
|
|
||||||
div.setAttribute('aria-live', 'polite');
|
|
||||||
return div;
|
|
||||||
}
|
|
||||||
|
|
||||||
private injectStyles() {
|
|
||||||
if (this.stylesInjected) return;
|
|
||||||
const style = document.createElement('style');
|
|
||||||
style.textContent = `
|
|
||||||
#toast-container {
|
#toast-container {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 12px;
|
top: 12px;
|
||||||
@@ -76,9 +86,9 @@ class ToastService {
|
|||||||
border-left: 4px solid #dc3545;
|
border-left: 4px solid #dc3545;
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
document.head.appendChild(style);
|
document.head.appendChild(style);
|
||||||
this.stylesInjected = true;
|
this.stylesInjected = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const toast = new ToastService();
|
export const toast = new ToastService();
|
||||||
|
|||||||
Reference in New Issue
Block a user