Skip to content

Commit 79c28d9

Browse files
committed
[PRAC/ret] Add logic to create "spinner"
Creating tbl-row with loading indicator (when Render-server "wakes up"). Worth noting: - thus improving the UX.. what's going on? the data is loading! core: B-3 / JS-BL
1 parent 56d35a4 commit 79c28d9

File tree

3 files changed

+59
-0
lines changed

3 files changed

+59
-0
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
.crm__output-table-body-loading-row td {
2+
display: flex;
3+
justify-content: center;
4+
align-items: center;
5+
border-bottom: none;
6+
height: 325px;
7+
}
8+
9+
.spinner {
10+
width: 90px;
11+
height: 90px;
12+
border: 15px solid var(--light-purple);
13+
border-top-color: var(--main-purple);
14+
border-radius: 50%;
15+
animation: spin 1s linear infinite;
16+
}
17+
18+
@keyframes spin {
19+
0% {
20+
transform: rotate(0deg);
21+
}
22+
23+
100% {
24+
transform: rotate(360deg);
25+
}
26+
}

core-courses/3-js-basic-level/practicum-js-basic-level/sb-crm-client/css/style.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@
88
@import url("modal-type.css");
99
@import url("modal-delete.css");
1010
@import url("custom-tippy.css");
11+
@import url("spinner.css");

core-courses/3-js-basic-level/practicum-js-basic-level/sb-crm-client/js/index.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,11 +284,24 @@
284284

285285
async function addClientsDataToStorage() {
286286
try {
287+
const tableBody = document.querySelector('.crm__output-table-body');
288+
const spinnerRow = createLoadingSpinnerRow(); // создание спиннера
289+
tableBody.append(spinnerRow); // добавление в таблицу
290+
291+
console.log('Ждём ответ от Render-сервера..');
292+
293+
// await new Promise((resolve) => setTimeout(resolve, 5000)); // искусственная задержка.. имитация "просыпания" Render-сервера
294+
287295
// ! запрос на RENDER-сервер (а не на локальный, согласно маршрута.. ВНИМАНИЕ)
288296
const response = await fetch(
289297
'https://skillbus-crm.onrender.com/api/clients'
290298
);
291299

300+
// удаление спиннера после получения ответа/подгрузки клиентов
301+
spinnerRow.remove();
302+
303+
console.log('Ответ получен! Данные должны быть отображены!');
304+
292305
// проверка успешности/выполнения запроса
293306
if (!response.ok) {
294307
throw new Error(`Ошибка: ${response.status}!`);
@@ -302,6 +315,10 @@
302315
return data; // возврат массива данных
303316
} catch (error) {
304317
console.error('Ошибка загрузки списка клиентов с сервера!', error);
318+
319+
// удаление спиннера, если запрос завершился ошибкой
320+
document.querySelector('.crm__output-table-body-loading-row')?.remove();
321+
305322
return []; // если ошибка возврат "пустого" массива
306323
}
307324
}
@@ -409,6 +426,21 @@
409426
return emptyTableTrRow;
410427
}
411428

429+
// ** создание строки с индикатором загрузки (спиннера.. для улучшения UX при "просыпании" Render-сервера)
430+
function createLoadingSpinnerRow() {
431+
const loadingTableTrRow = document.createElement('tr');
432+
const loadingTableTdCell = document.createElement('td');
433+
434+
loadingTableTrRow.classList.add('crm__output-table-body-loading-row');
435+
436+
loadingTableTdCell.colSpan = 6; // объединение всех колонок
437+
loadingTableTdCell.innerHTML = '<div class="spinner"></div>';
438+
loadingTableTdCell.style.textAlign = 'center';
439+
loadingTableTrRow.append(loadingTableTdCell);
440+
441+
return loadingTableTrRow;
442+
}
443+
412444
// ** создание элементов/строк таблицы данных о клиентах (заполнение ячеек)
413445
function createClientsTableTrRow(client = {}) {
414446
const clientTableTr = document.createElement('tr');

0 commit comments

Comments
 (0)