переделка компании и департамента

This commit is contained in:
gorbenko.pavel
2026-07-29 15:50:53 +05:00
parent 8ef7acd93f
commit 3ed399becc
11 changed files with 446 additions and 20 deletions
@@ -4,6 +4,7 @@ import type { IApprovalAdminProps } from './IApprovalAdminProps';
import { AdminApp } from './app/AdminApp';
import { ApprovalRouteApi } from '../services/api';
import { AadApiHttpClient, DevApiHttpClient, IHttpClient } from '../services/httpClient';
import { PortalDictionaryClient } from '../services/portalDictionary';
const FONTS_LINK_ID = 'tnsu-approval-admin-fonts';
@@ -26,6 +27,7 @@ async function createHttpClient(props: IApprovalAdminProps): Promise<IHttpClient
const ApprovalAdmin: React.FC<IApprovalAdminProps> = props => {
const [api, setApi] = React.useState<ApprovalRouteApi | undefined>();
const [dictionary, setDictionary] = React.useState<PortalDictionaryClient | undefined>();
const [error, setError] = React.useState<string | undefined>();
React.useEffect(() => {
@@ -45,6 +47,24 @@ const ApprovalAdmin: React.FC<IApprovalAdminProps> = props => {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [props.useDevAuth, props.apiBaseUrl, props.devUserEmail, props.aadResourceId]);
// Справочники всегда идут через AAD, независимо от Dev-режима нашего API:
// api.tnsu.kz принимает только настоящий токен, заголовок X-Dev-User-Email
// ему ничего не говорит.
React.useEffect(() => {
let cancelled = false;
setDictionary(undefined);
props.context.aadHttpClientFactory
.getClient(props.aadResourceId)
.then(client => {
if (!cancelled) setDictionary(new PortalDictionaryClient(client, props.portalBaseUrl));
})
.catch(() => { /* экран маршрутов покажет ошибку загрузки справочника */ });
return () => { cancelled = true; };
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [props.aadResourceId, props.portalBaseUrl]);
return (
<section className={styles.approvalAdmin}>
{error && (
@@ -55,7 +75,13 @@ const ApprovalAdmin: React.FC<IApprovalAdminProps> = props => {
</div>
)}
{!error && !api && <div className={styles.stateBox}>Подключение к API...</div>}
{api && <AdminApp api={api} currentUserEmail={props.context.pageContext.user.email} />}
{api && (
<AdminApp
api={api}
dictionary={dictionary}
currentUserEmail={props.context.pageContext.user.email}
/>
)}
</section>
);
};