|
284 | 284 |
|
285 | 285 | async function addClientsDataToStorage() { |
286 | 286 | 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 | + |
287 | 295 | // ! запрос на RENDER-сервер (а не на локальный, согласно маршрута.. ВНИМАНИЕ) |
288 | 296 | const response = await fetch( |
289 | 297 | 'https://skillbus-crm.onrender.com/api/clients' |
290 | 298 | ); |
291 | 299 |
|
| 300 | + // удаление спиннера после получения ответа/подгрузки клиентов |
| 301 | + spinnerRow.remove(); |
| 302 | + |
| 303 | + console.log('Ответ получен! Данные должны быть отображены!'); |
| 304 | + |
292 | 305 | // проверка успешности/выполнения запроса |
293 | 306 | if (!response.ok) { |
294 | 307 | throw new Error(`Ошибка: ${response.status}!`); |
|
302 | 315 | return data; // возврат массива данных |
303 | 316 | } catch (error) { |
304 | 317 | console.error('Ошибка загрузки списка клиентов с сервера!', error); |
| 318 | + |
| 319 | + // удаление спиннера, если запрос завершился ошибкой |
| 320 | + document.querySelector('.crm__output-table-body-loading-row')?.remove(); |
| 321 | + |
305 | 322 | return []; // если ошибка возврат "пустого" массива |
306 | 323 | } |
307 | 324 | } |
|
409 | 426 | return emptyTableTrRow; |
410 | 427 | } |
411 | 428 |
|
| 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 | + |
412 | 444 | // ** создание элементов/строк таблицы данных о клиентах (заполнение ячеек) |
413 | 445 | function createClientsTableTrRow(client = {}) { |
414 | 446 | const clientTableTr = document.createElement('tr'); |
|
0 commit comments