Skip to content

Commit 34bb2f4

Browse files
committed
[PW-11.6/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 8306e44 commit 34bb2f4

File tree

4 files changed

+82
-11
lines changed

4 files changed

+82
-11
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
.dboard__table-body-loading-row td {
2+
border-bottom: none;
3+
height: 245px;
4+
}
5+
6+
.spinner-wrap {
7+
display: flex;
8+
flex-direction: column;
9+
justify-content: center;
10+
align-items: center;
11+
row-gap: 10px;
12+
}
13+
14+
.spinner {
15+
width: 90px;
16+
height: 90px;
17+
border: 15px solid var(--light-blue);
18+
border-top-color: var(--specific-blue);
19+
border-radius: 50%;
20+
animation: spin 1s linear infinite;
21+
}
22+
23+
@keyframes spin {
24+
0% {
25+
transform: rotate(0deg);
26+
}
27+
28+
100% {
29+
transform: rotate(360deg);
30+
}
31+
}
32+
33+
.spinner-text {
34+
font-weight: var(--medium);
35+
font-size: 17px;
36+
color: var(--starry-night);
37+
}
38+
39+
/* media queries, any-hover */
40+
41+
@media (max-width: 320px) {
42+
.spinner {
43+
width: 50px;
44+
height: 50px;
45+
border: 10px solid var(--light-blue);
46+
border-top-color: var(--specific-blue);
47+
}
48+
49+
.spinner-text {
50+
font-size: 13px;
51+
}
52+
}

core-courses/3-js-basic-level/11-server-async-await/11-6-pw-11-server-async-await/students-db-client/css/style.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@
55
@import url("btn.css");
66
@import url("table.css");
77
@import url("custom-tippy.css");
8+
@import url("spinner.css");

core-courses/3-js-basic-level/11-server-async-await/11-6-pw-11-server-async-await/students-db-client/css/table.css

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@
2323

2424
.dboard__table .dboard__table-body-empty-row td {
2525
width: 100%;
26-
/* height: 325px; */
26+
height: 245px;
27+
font-weight: var(--medium);
2728
font-size: 17px;
2829
color: var(--bootstrap-red);
2930
text-align: center;

core-courses/3-js-basic-level/11-server-async-await/11-6-pw-11-server-async-await/students-db-client/js/index.js

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -681,6 +681,26 @@
681681
return emptyTableTrRow;
682682
}
683683

684+
// ** создание строки с индикатором загрузки (спиннера.. для улучшения UX при "просыпании" Render-сервера)
685+
function createLoadingSpinnerRow() {
686+
const loadingTableTrRow = document.createElement('tr');
687+
const loadingTableTdCell = document.createElement('td');
688+
689+
loadingTableTrRow.classList.add('dboard__table-body-loading-row');
690+
691+
loadingTableTdCell.colSpan = 5; // объединение всех колонок
692+
loadingTableTdCell.innerHTML = `
693+
<div class="spinner-wrap">
694+
<div class="spinner"></div>
695+
<span class="spinner-text">Идёт загрузка данных.. подождите! 10.. 30.. 50 секунд!</span>
696+
</div>
697+
`;
698+
loadingTableTdCell.style.textAlign = 'center';
699+
loadingTableTrRow.append(loadingTableTdCell);
700+
701+
return loadingTableTrRow;
702+
}
703+
684704
// TODO: что бы перейти на "полностью" [СЕРВЕРНУЮ] логику/обратно.. нужно пошагово просмотреть весь файл и раскомментировать закомментированный код, при этом комментируя/удаляя код/строки помеченные, как [FOR DEMO - sessionStorage] в полном объёме (т.е. некоторые инициализации переменных, доп. функций проводились каждой логике свои)
685705

686706
// ** [СЕРВЕР] организация запроса, получение данных/списка студентов с сервера (корректировка входящих данных)
@@ -728,10 +748,9 @@
728748

729749
async function addStudentsDataToStorage() {
730750
try {
731-
// ??
732-
// const tableBody = document.querySelector('.dboard__table-body');
733-
// const spinnerRow = createLoadingSpinnerRow(); // создание спиннера
734-
// tableBody.append(spinnerRow); // добавление в таблицу
751+
const tableBody = document.querySelector('.dboard__table-body'); // фиксация тела таблицы
752+
const spinnerRow = createLoadingSpinnerRow(); // создание спиннера
753+
tableBody.append(spinnerRow); // добавление в таблицу
735754

736755
console.log('Ждём ответ от Render-сервера..');
737756

@@ -744,17 +763,16 @@
744763
'https://students-dashboard-crm.onrender.com/api/students'
745764
);
746765

747-
// ??
748766
// удаление спиннера после получения ответа/подгрузки студентов
749-
// spinnerRow.remove();
750-
751-
console.log('Ответ получен! Данные должны быть отображены!');
767+
spinnerRow.remove();
752768

753769
// проверка успешности/выполнения запроса
754770
if (!response.ok) {
755771
throw new Error(`Ошибка: ${response.status}!`);
756772
}
757773

774+
console.log('Ответ получен! Данные должны быть отображены!');
775+
758776
const data = await response.json(); // преобразование данных в JSON-формат
759777
sessionStorage.setItem('demoStudents', JSON.stringify(data)); // добавление/сохранение в Session storage
760778

@@ -764,9 +782,8 @@
764782
} catch (error) {
765783
console.error('Ошибка загрузки списка студентов с сервера!', error);
766784

767-
// ??
768785
// удаление спиннера, если запрос завершился ошибкой
769-
// document.querySelector('.dboard__table-body-loading-row')?.remove();
786+
document.querySelector('.dboard__table-body-loading-row')?.remove();
770787

771788
return []; // если ошибка, возврат "пустого" массива
772789
}

0 commit comments

Comments
 (0)