fix: не сообщать об успехе раньше времени — ни о решении, ни о пустом списке
1) DecisionPanel ждёт onDecided, если тот вернул Promise: «Решение сохранено. Статус заявки: «Согласовано»» появляется только после побочных действий решения — для заявления на увольнение это созданный обходной лист. Пока идёт создание, кнопки остаются заблокированными, а на месте результата — «Создаём обходной лист…». Провал побочного действия статус решения не отменяет (оно уже применено на сервере) — о проблеме сообщает сам обработчик своим предупреждением. 2) «Вы ещё не создавали заявок» больше не мигает на недогруженном списке. «Мои заявки» и «Доработка» собираются из двух источников (Search + REST-довесок по свежести), и onPartial показывал тот, что ответил первым, даже если он пустой — на экране на мгновение появлялась пустота вместо «Загрузка…». Теперь пустой промежуточный результат не показывается вовсе, а вывод «заявок нет» делается только по ЗАВЕРШЁННОЙ загрузке именно этой таблицы (loadedKey), а не по любому пустому rows. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -421,6 +421,12 @@ export const RequestsTableView: React.FC<IRequestsTableViewProps> = ({
|
||||
? undefined
|
||||
: (partial: IPage): void => {
|
||||
if (cancelled) return;
|
||||
// ПУСТОЙ промежуточный результат не показываем: смысл onPartial —
|
||||
// не держать экран пустым, пока отвечает более медленный источник,
|
||||
// а пустая страница как раз пустой экран и даёт, только вместо
|
||||
// «Загрузка…» на нём появляется «Вы ещё не создавали заявок» —
|
||||
// и через мгновение исчезает, когда придёт второй источник.
|
||||
if (partial.rows.length === 0) return;
|
||||
setRows(partial.rows);
|
||||
setTotalRows(partial.totalRows);
|
||||
};
|
||||
@@ -477,6 +483,18 @@ export const RequestsTableView: React.FC<IRequestsTableViewProps> = ({
|
||||
const q = debouncedQuery.trim();
|
||||
const total = totalRows;
|
||||
const visible = rows || [];
|
||||
|
||||
/**
|
||||
* Можно ли уже судить о содержимом таблицы.
|
||||
*
|
||||
* Пустоту («Вы ещё не создавали заявок») объявляем ТОЛЬКО по завершённой
|
||||
* загрузке именно ЭТОЙ таблицы (loadedKey), а не по любому пустому rows: до
|
||||
* этого rows может быть пустым по совершенно другой причине — часть источников
|
||||
* ещё в пути (см. onPartial выше, «Мои заявки» собираются из Search + REST).
|
||||
* Промежуточный НЕПУСТОЙ результат показывать можно и нужно — в нём уже есть
|
||||
* что смотреть.
|
||||
*/
|
||||
const loaded = loadedKey === dataKey || visible.length > 0;
|
||||
const totalPages = Math.max(1, Math.ceil(total / PAGE_SIZE));
|
||||
|
||||
// Страница может оказаться за пределами набора: пришла из старой ссылки или
|
||||
@@ -527,8 +545,8 @@ export const RequestsTableView: React.FC<IRequestsTableViewProps> = ({
|
||||
</div>
|
||||
|
||||
{error && <div className={styles.error}>Не удалось загрузить заявки: {error}</div>}
|
||||
{!error && rows === undefined && <div className={styles.empty}>Загрузка…</div>}
|
||||
{!error && rows && total === 0 && (
|
||||
{!error && !loaded && <div className={styles.empty}>Загрузка…</div>}
|
||||
{!error && loaded && total === 0 && (
|
||||
<div className={styles.empty}>
|
||||
{q ? `По запросу «${debouncedQuery}» ничего не найдено.` : EMPTY_TEXTS[view]}
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user