import { Fragment } from 'react'; import { HashLink } from 'react-router-hash-link'; import { Link } from 'react-router-dom'; import type { DirectoryCommunity } from '../../hooks/use-directories'; import { SAGE_FAQ_LINK_LABEL, SAGE_FAQ_PATH, SAGE_OPTION, type PostOptionsValidationError } from '../../lib/utils/post-options-utils'; interface PostOptionsErrorMessageProps { directories?: DirectoryCommunity[]; error: PostOptionsValidationError; } const EMPTY_DIRECTORIES: DirectoryCommunity[] = []; const DIRECTORY_TITLE_CODE_PATTERN = /^\/([^/]+)\//; const DIRECTORY_TITLE_LABEL_PATTERN = /^\/[^/]+\//; const getDirectoryCode = (directory: DirectoryCommunity): string | undefined => directory.directoryCode ?? directory.title?.match(DIRECTORY_TITLE_CODE_PATTERN)?.[1]; const getDirectoryLabel = (code: string, directories: DirectoryCommunity[]): string => { const directory = directories.find((entry) => getDirectoryCode(entry) === code); return directory?.title?.match(DIRECTORY_TITLE_LABEL_PATTERN)?.[0] ?? `/${code}/`; }; const DirectoryLinks = ({ codes, directories }: { codes: string[]; directories: DirectoryCommunity[] }) => ( <> {codes.map((code, index) => { const separator = index === 0 ? '' : ', '; return ( {separator} {getDirectoryLabel(code, directories)} ); })} ); const UnsupportedOption = ({ option }: { option: string }) => ( <> {option} {option === SAGE_OPTION && ( <> {' '} [{SAGE_FAQ_LINK_LABEL}] )} ); const UnsupportedOptions = ({ options }: { options: string[] }) => ( <> {options.map((option, index) => ( {index === 0 ? '' : ', '} ))} ); const PostOptionsErrorMessage = ({ directories = EMPTY_DIRECTORIES, error }: PostOptionsErrorMessageProps) => { return ( <> Unsupported options: . {error.supportedDirectoryCodesByOption.map(({ option, directoryCodes }) => ( {' '} Option "{option}" is supported on: . ))} ); }; export default PostOptionsErrorMessage;