|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export class Loading { |
|
|
|
|
|
|
|
|
|
|
|
static show(containerId, message = 'Loading...') { |
|
|
const container = document.getElementById(containerId); |
|
|
if (!container) { |
|
|
console.warn(`[Loading] Container not found: ${containerId}`); |
|
|
return; |
|
|
} |
|
|
|
|
|
const spinner = document.createElement('div'); |
|
|
spinner.className = 'loading-container'; |
|
|
spinner.innerHTML = ` |
|
|
<div class="spinner"></div> |
|
|
<p class="loading-text">${message}</p> |
|
|
`; |
|
|
|
|
|
container.innerHTML = ''; |
|
|
container.appendChild(spinner); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static hide(containerId) { |
|
|
const container = document.getElementById(containerId); |
|
|
if (!container) return; |
|
|
|
|
|
const spinner = container.querySelector('.loading-container'); |
|
|
if (spinner) { |
|
|
spinner.remove(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static skeletonRows(count = 5, columns = 5) { |
|
|
let html = ''; |
|
|
for (let i = 0; i < count; i++) { |
|
|
html += '<tr class="skeleton-row">'; |
|
|
for (let j = 0; j < columns; j++) { |
|
|
html += '<td><div class="skeleton-box"></div></td>'; |
|
|
} |
|
|
html += '</tr>'; |
|
|
} |
|
|
return html; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static skeletonCards(count = 4) { |
|
|
let html = ''; |
|
|
for (let i = 0; i < count; i++) { |
|
|
html += ` |
|
|
<div class="skeleton-card"> |
|
|
<div class="skeleton-box skeleton-title"></div> |
|
|
<div class="skeleton-box skeleton-text"></div> |
|
|
<div class="skeleton-box skeleton-text"></div> |
|
|
</div> |
|
|
`; |
|
|
} |
|
|
return html; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static addSkeleton(selector) { |
|
|
document.querySelectorAll(selector).forEach(el => { |
|
|
el.classList.add('skeleton'); |
|
|
}); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static removeSkeleton(selector) { |
|
|
document.querySelectorAll(selector).forEach(el => { |
|
|
el.classList.remove('skeleton'); |
|
|
}); |
|
|
} |
|
|
} |
|
|
|
|
|
export default Loading; |
|
|
|