Разные фиксы (#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
@@ -20,7 +20,7 @@ import {
OwnTab,
} from '../shared/routing';
import { onRequestsChanged, emitRequestsChanged } from '../shared/requestEvents';
import { getImpersonatedEmail } from '../shared/impersonation';
import { getImpersonatedEmail, getImpersonatedDisplayName } from '../shared/impersonation';
import { confirmDiscardFormChanges, markFormClean, markFormDirty } from '../shared/unsavedChanges';
import { Drawer } from './Drawer/Drawer';
import { CategoryTabs } from './CategoryTabs/CategoryTabs';
@@ -62,6 +62,7 @@ const RequestPortal: React.FC<IRequestPortalProps> = ({ hasTeamsContext, context
// (setImpersonatedEmail в render) до создания этого элемента, и меняется оно
// только вместе с новым render всей веб-части.
const impersonatedEmail = getImpersonatedEmail();
const impersonatedDisplayName = getImpersonatedDisplayName();
const route = useRoute();
const [navCollapsed, setNavCollapsed] = React.useState<boolean>(false);
@@ -133,7 +134,7 @@ const RequestPortal: React.FC<IRequestPortalProps> = ({ hasTeamsContext, context
// загрузки в таблице не перезапустится сам. Шлём событие обновления —
// таблица на него подписана и перечитает данные фоном, не убирая с экрана
// текущие строки (см. RequestsTableView/SearchView).
if (nav === route.nav && route.mode === 'submit') emitRequestsChanged();
if (nav === route.nav && route.mode === 'submit') emitRequestsChanged(true);
// Всё восстанавливаемое состояние раздела передаём ЯВНО, из запомненного.
// parseRoute подставил бы его и сам, но тогда оно осталось бы только в
// состоянии и не попало бы в адрес: ссылка на раздел вела бы на первую
@@ -276,8 +277,11 @@ const RequestPortal: React.FC<IRequestPortalProps> = ({ hasTeamsContext, context
закрыть: она исчезает только когда свойство веб-части очищено. */}
{impersonatedEmail && (
<div className={styles.impersonationBar}>
Включена отладочная подмена: портал работает от имени <strong>{impersonatedEmail}</strong>.
Очистите поле в свойствах веб-части, чтобы вернуться к своей учётной записи.
Включена отладочная подмена: портал работает от имени{' '}
<strong>
{impersonatedDisplayName ? `${impersonatedDisplayName} (${impersonatedEmail})` : impersonatedEmail}
</strong>
. Очистите поле в свойствах веб-части, чтобы вернуться к своей учётной записи.
</div>
)}
<div className={styles.layout}>