|
681 | 681 | return emptyTableTrRow; |
682 | 682 | } |
683 | 683 |
|
| 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 | + |
684 | 704 | // TODO: что бы перейти на "полностью" [СЕРВЕРНУЮ] логику/обратно.. нужно пошагово просмотреть весь файл и раскомментировать закомментированный код, при этом комментируя/удаляя код/строки помеченные, как [FOR DEMO - sessionStorage] в полном объёме (т.е. некоторые инициализации переменных, доп. функций проводились каждой логике свои) |
685 | 705 |
|
686 | 706 | // ** [СЕРВЕР] организация запроса, получение данных/списка студентов с сервера (корректировка входящих данных) |
|
728 | 748 |
|
729 | 749 | async function addStudentsDataToStorage() { |
730 | 750 | 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); // добавление в таблицу |
735 | 754 |
|
736 | 755 | console.log('Ждём ответ от Render-сервера..'); |
737 | 756 |
|
|
744 | 763 | 'https://students-dashboard-crm.onrender.com/api/students' |
745 | 764 | ); |
746 | 765 |
|
747 | | - // ?? |
748 | 766 | // удаление спиннера после получения ответа/подгрузки студентов |
749 | | - // spinnerRow.remove(); |
750 | | - |
751 | | - console.log('Ответ получен! Данные должны быть отображены!'); |
| 767 | + spinnerRow.remove(); |
752 | 768 |
|
753 | 769 | // проверка успешности/выполнения запроса |
754 | 770 | if (!response.ok) { |
755 | 771 | throw new Error(`Ошибка: ${response.status}!`); |
756 | 772 | } |
757 | 773 |
|
| 774 | + console.log('Ответ получен! Данные должны быть отображены!'); |
| 775 | + |
758 | 776 | const data = await response.json(); // преобразование данных в JSON-формат |
759 | 777 | sessionStorage.setItem('demoStudents', JSON.stringify(data)); // добавление/сохранение в Session storage |
760 | 778 |
|
|
764 | 782 | } catch (error) { |
765 | 783 | console.error('Ошибка загрузки списка студентов с сервера!', error); |
766 | 784 |
|
767 | | - // ?? |
768 | 785 | // удаление спиннера, если запрос завершился ошибкой |
769 | | - // document.querySelector('.dboard__table-body-loading-row')?.remove(); |
| 786 | + document.querySelector('.dboard__table-body-loading-row')?.remove(); |
770 | 787 |
|
771 | 788 | return []; // если ошибка, возврат "пустого" массива |
772 | 789 | } |
|
0 commit comments