import React, { useMemo } from 'react'; import classNames from 'classnames'; import { useTranslation } from 'react-i18next'; import { Button, InlineLoading } from '@carbon/react'; import { useLayoutType } from '@openmrs/esm-framework'; import { isPageContentVisible } from '../../utils/form-helper'; import { useCurrentActivePage } from './useCurrentActivePage'; import { usePageObserver } from './usePageObserver'; import type { FormPage, SessionMode } from '../../types'; import styles from './sidebar.scss'; interface SidebarProps { defaultPage: string; isFormSubmitting: boolean; sessionMode: SessionMode; onCancel: () => void; handleClose: () => void; hideFormCollapseToggle: () => void; hideControls?: boolean; } const Sidebar: React.FC = ({ defaultPage, isFormSubmitting, sessionMode, onCancel, handleClose, hideFormCollapseToggle, hideControls, }) => { const { t } = useTranslation(); const { pages, pagesWithErrors, activePages, evaluatedPagesVisibility } = usePageObserver(); const { currentActivePage, requestPage } = useCurrentActivePage({ pages, defaultPage, activePages, evaluatedPagesVisibility, }); const layout = useLayoutType(); const responsiveSize = useMemo(() => { const isTablet = layout === 'tablet'; return isTablet ? 'lg' : 'sm'; }, [layout]); return (
{pages .filter((page) => isPageContentVisible(page)) .map((page) => ( ))} {sessionMode !== 'view' && !hideControls &&
} {!hideControls && (
{sessionMode !== 'view' && ( )}
)}
); }; interface PageLinkProps { page: FormPage; currentActivePage: string; pagesWithErrors: string[]; requestPage: (page: string) => void; } function PageLink({ page, currentActivePage, pagesWithErrors, requestPage }: PageLinkProps) { const { t } = useTranslation(); const isActive = page.id === currentActivePage; const hasError = pagesWithErrors.includes(page.id); const isTablet = useLayoutType() === 'tablet'; return (
); } export default Sidebar;