Разные фиксы (#8)
Tests / frontend-test (push) Successful in 1m20s

Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/timur.gorodetskiy/request-portal/pulls/8
This commit was merged in pull request #8.
This commit is contained in:
2026-08-18 08:45:42 +00:00
parent 5b2c062e81
commit 3a71d0df1f
22 changed files with 497 additions and 67 deletions
@@ -4,12 +4,21 @@
// достаточно для нечастых событий (сохранение формы, решение согласующего).
const EVENT_NAME = 'rp-requests-changed';
export function emitRequestsChanged(): void {
window.dispatchEvent(new Event(EVENT_NAME));
/**
* force=true — повторный клик по УЖЕ открытому пункту меню (см. goto в
* RequestPortal.tsx): пользователь явно просит обновить список, поэтому таблица
* прячет прежние строки и показывает «Загрузка…», пока не придёт свежий ответ.
* force=false/не задан — фоновые обновления (создание заявки, решение
* согласующего, десятиминутный автообновление): строки остаются на экране, чтобы
* не моргать, если данные не изменились.
*/
export function emitRequestsChanged(force?: boolean): void {
window.dispatchEvent(new CustomEvent<{ force?: boolean }>(EVENT_NAME, { detail: { force } }));
}
/** Подписка на изменения. Возвращает функцию отписки (вызвать в cleanup эффекта). */
export function onRequestsChanged(handler: () => void): () => void {
window.addEventListener(EVENT_NAME, handler);
return () => window.removeEventListener(EVENT_NAME, handler);
export function onRequestsChanged(handler: (force?: boolean) => void): () => void {
const listener = (e: Event): void => handler((e as CustomEvent<{ force?: boolean }>).detail?.force);
window.addEventListener(EVENT_NAME, listener);
return () => window.removeEventListener(EVENT_NAME, listener);
}