import * as React from 'react'; import { useState } from 'react'; import type { WebPartContext } from '@microsoft/sp-webpart-base'; import styles from './SubmitFeature.module.scss'; import { Icon } from '../../shared/ui/Icon/Icon'; import { CategoryTabs } from '../../components/CategoryTabs/CategoryTabs'; import { RequestGrid } from '../../components/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'; export interface ISubmitFeatureProps { context: WebPartContext; } // Фича «Подать заявку»: категории → плитки → беспоук-форма. // Владелец: автор портала. Живёт целиком в features/submit/**. const SubmitFeature: React.FC = ({ context }) => { const [activeCategoryId, setActiveCategoryId] = useState(DEFAULT_CATEGORY_ID); const [selectedRequest, setSelectedRequest] = useState(null); 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 SubmitFeature;