Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz> Reviewed-on: http://git.tnsu.kz/timur.gorodetskiy/request-portal/pulls/21
This commit was merged in pull request #21.
This commit is contained in:
@@ -73,18 +73,31 @@ const RequestPortal: React.FC<IRequestPortalProps> = ({ hasTeamsContext, context
|
||||
const [mobileNavOpen, setMobileNavOpen] = React.useState<boolean>(false);
|
||||
const [navCounts, setNavCounts] = React.useState<INavCounts | undefined>(undefined);
|
||||
|
||||
// Раздел «Отчёты» — точечный список почт, пока в SharePoint нет группы HR
|
||||
// (см. reportsAccess.ts). Пересчитывается на каждый рендер намеренно: сам
|
||||
// hasReportsAccess — синхронная проверка без сети, а input (effectiveUserEmail)
|
||||
// меняется только по подмене личности в property pane, что и так вызывает
|
||||
// ререндер всей веб-части.
|
||||
const canSeeReports = hasReportsAccess(context);
|
||||
// Раздел «Отчёты» — группа «Отчеты по заявкам» + администраторы (см.
|
||||
// reportsAccess.ts). undefined — ответ ещё не пришёл. Перезапрашиваем при
|
||||
// смене подменённой личности.
|
||||
const [canSeeReports, setCanSeeReports] = React.useState<boolean | undefined>(undefined);
|
||||
React.useEffect(() => {
|
||||
let cancelled = false;
|
||||
setCanSeeReports(undefined);
|
||||
hasReportsAccess(context)
|
||||
.then((v) => {
|
||||
if (!cancelled) setCanSeeReports(v);
|
||||
})
|
||||
.catch(() => {
|
||||
if (!cancelled) setCanSeeReports(false);
|
||||
});
|
||||
return () => {
|
||||
cancelled = true;
|
||||
};
|
||||
}, [context, impersonatedEmail]);
|
||||
|
||||
// Прямой переход по ссылке (?rpnav=reports) в обход бокового меню — тот же
|
||||
// раздел, что скрыт из навигации, должен быть недоступен и так: без этого
|
||||
// редиректа он открылся бы у любого, кто угадает или сохранит такую ссылку.
|
||||
// Пока ответ не пришёл — не редиректим, иначе участника группы выкинет.
|
||||
React.useEffect(() => {
|
||||
if (route.nav === 'reports' && !canSeeReports) {
|
||||
if (route.nav === 'reports' && canSeeReports === false) {
|
||||
navigate({ mode: 'submit', nav: 'new' }, { replace: true });
|
||||
}
|
||||
}, [route.nav, canSeeReports]);
|
||||
|
||||
Reference in New Issue
Block a user