|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|