// Dependencies import { flagTypes } from 'plugins/plugin-annotations/src/flag.mjs' import mustache from 'mustache' import { nsMerge } from 'shared/utils.mjs' // Hooks import { useTranslation } from 'next-i18next' // Components import { ChatIcon, TipIcon, WarningIcon, ErrorIcon, WrenchIcon as FixmeIcon, ExpandIcon, FlagIcon, OptionsIcon, } from 'shared/components/icons.mjs' import Markdown from 'react-markdown' import { SubAccordion } from 'shared/components/accordion.mjs' const flagIcons = { note: ChatIcon, tip: TipIcon, warn: WarningIcon, error: ErrorIcon, fixme: FixmeIcon, // Used in content expand: ExpandIcon, options: OptionsIcon, } export const Flag = ({ type, data, t, handleUpdate }) => { const BtnIcon = data.suggest?.icon ? flagIcons[data.suggest.icon] : false const button = data.suggest?.text && data.suggest?.update ? ( ) : null const desc = data.replace ? mustache.render(t(data.desc), data.replace) : t(data.desc) return (
{Object.keys(flagList).length > 1 ? t('flag:flagMenuMany.d') : t('flag:flagMenuOne.d')}
> ) } export const FlagsAccordionEntries = ({ flags, update }) => { const [flagList, ns] = flattenFlags(flags) const { t } = useTranslation(nsMerge(ns)) if (Object.keys(flagList).length < 1) return null const handleUpdate = (config) => { if (config.settings) update.settings(...config.settings) if (config.ui) update.ui(...config.settings) } return (