import { FC, MouseEvent, ReactNode } from 'react'; import { Box, IconButton } from '@mui/material'; import { ApiDocumentationEndpointAction } from '../../core/documentation/types'; import InsertLinkIcon from '@mui/icons-material/InsertLink'; import UnfoldMoreIcon from '@mui/icons-material/UnfoldMore'; import UnfoldLessIcon from '@mui/icons-material/UnfoldLess'; type ApiDocumentationBoxHeaderProps = { route: string; action: ApiDocumentationEndpointAction; actions?: ReactNode[]; open: boolean; setOpen: (open: boolean) => void; }; const variantByAction = [ { code: 'GET', variant: '#3F51B5' }, { code: 'POST', variant: '#4CAF50' }, { code: 'CREATE', variant: '#4CAF50' }, { code: 'PUT', variant: '#FF9800' }, { code: 'PATCH', variant: '#FF9800' }, { code: 'DELETE', variant: '#fd3131' }, ]; export const ApiDocumentationBoxHeader: FC = ({ route, action, actions, open, setOpen, }) => { const handleEndpointLink = (e: MouseEvent) => { e.stopPropagation(); window.location.href = `${window.location.href.replace(/^(.+)#(.*)$/, '$1')}#${route}`; }; return ( setOpen(!open)} > httpVariant.code === action.httpMethod)?.variant ?? '#007bff', fontSize: '10pt', paddingRight: '.6em', paddingLeft: '.6em', borderRadius: '10rem', alignItems: 'center', }} > {action.httpMethod} handleEndpointLink(e)} sx={{ marginRight: '.25em' }}> api/v1/{route} {open ? : } {(actions ?? []).map((actionItem) => actionItem)} ); };