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;