import * as React from 'react'; import { useState } from 'react'; import styles from './RequestPortal.module.scss'; import type { IRequestPortalProps } from './IRequestPortalProps'; import { IconSprite } from '../shared/ui/Icon/IconSprite'; import { Icon } from '../shared/ui/Icon/Icon'; import { CategoryTabs } from './CategoryTabs/CategoryTabs'; import { RequestGrid } from './RequestGrid/RequestGrid'; import { CATEGORIES, DEFAULT_CATEGORY_ID } from '../data/categories'; import { getRequestsByCategory } from '../data/requests'; import { getFormComponent } from '../forms/registry'; import { IRequestType } from '../models/types'; const RequestPortal: React.FC = ({ hasTeamsContext, context }) => { const [activeCategoryId, setActiveCategoryId] = useState(DEFAULT_CATEGORY_ID); const [selectedRequest, setSelectedRequest] = useState(null); const rootClasses = [styles.requestPortal, hasTeamsContext ? styles.teams : ''] .filter(Boolean) .join(' '); const requests = getRequestsByCategory(activeCategoryId); const handleCategoryChange = (categoryId: string): void => { setActiveCategoryId(categoryId); setSelectedRequest(null); // при смене категории возвращаемся к списку плиток }; const handleBack = (): void => setSelectedRequest(null); const renderSelected = (request: IRequestType): React.ReactNode => { const FormComponent = getFormComponent(request.id); // Форма ещё не реализована — показываем заглушку. if (!FormComponent) { return (

Форма «{request.title}» ещё в разработке.

); } // Ленивый рендер формы: её код подтягивается только сейчас, при открытии. return ( Загрузка формы…}> ); }; return (
{selectedRequest ? ( renderSelected(selectedRequest) ) : ( )}
); }; export default RequestPortal;