имперсонейшн
This commit is contained in:
@@ -19,6 +19,7 @@ import {
|
||||
OwnTab,
|
||||
} from '../shared/routing';
|
||||
import { onRequestsChanged, emitRequestsChanged } from '../shared/requestEvents';
|
||||
import { getImpersonatedEmail } from '../shared/impersonation';
|
||||
import { confirmDiscardFormChanges, markFormClean, markFormDirty } from '../shared/unsavedChanges';
|
||||
import { SideNav } from './SideNav/SideNav';
|
||||
import { Drawer } from './Drawer/Drawer';
|
||||
@@ -57,6 +58,11 @@ const RequestPortal: React.FC<IRequestPortalProps> = ({ hasTeamsContext, context
|
||||
.filter(Boolean)
|
||||
.join(' ');
|
||||
|
||||
// Читаем при рендере, а не через состояние: значение выставляет веб-часть
|
||||
// (setImpersonatedEmail в render) до создания этого элемента, и меняется оно
|
||||
// только вместе с новым render всей веб-части.
|
||||
const impersonatedEmail = getImpersonatedEmail();
|
||||
|
||||
const route = useRoute();
|
||||
const [navCollapsed, setNavCollapsed] = React.useState<boolean>(false);
|
||||
const [navCounts, setNavCounts] = React.useState<INavCounts | undefined>(undefined);
|
||||
@@ -254,6 +260,15 @@ const RequestPortal: React.FC<IRequestPortalProps> = ({ hasTeamsContext, context
|
||||
<section className={rootClasses}>
|
||||
<IconSprite />
|
||||
<ConfirmHost />
|
||||
{/* Подмену личности легко забыть включённой — тогда портал молча показывал
|
||||
бы чужие заявки и чужую очередь. Полосу поэтому не прячем и не даём
|
||||
закрыть: она исчезает только когда свойство веб-части очищено. */}
|
||||
{impersonatedEmail && (
|
||||
<div className={styles.impersonationBar}>
|
||||
Включена отладочная подмена: портал работает от имени <strong>{impersonatedEmail}</strong>.
|
||||
Очистите поле в свойствах веб-части, чтобы вернуться к своей учётной записи.
|
||||
</div>
|
||||
)}
|
||||
<div className={styles.layout}>
|
||||
<div className={styles.side}>
|
||||
<SideNav
|
||||
|
||||
Reference in New Issue
Block a user