import type { ChakraProps } from '@invoke-ai/ui-library'; import { Flex, FormControl, FormLabel, ListItem, OrderedList, Spinner, Text } from '@invoke-ai/ui-library'; import { useAppSelector } from 'app/store/storeHooks'; import { IAINoContentFallback } from 'common/components/IAIImageFallback'; import { InformationalPopover } from 'common/components/InformationalPopover/InformationalPopover'; import ScrollableContent from 'common/components/OverlayScrollbars/ScrollableContent'; import { selectDynamicPromptsIsError, selectDynamicPromptsIsLoading, selectDynamicPromptsParsingError, selectDynamicPromptsPrompts, } from 'features/dynamicPrompts/store/dynamicPromptsSlice'; import { memo, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { PiWarningCircleBold } from 'react-icons/pi'; const listItemStyles: ChakraProps['sx'] = { '&::marker': { color: 'base.500' }, }; const ParamDynamicPromptsPreview = () => { const { t } = useTranslation(); const parsingError = useAppSelector(selectDynamicPromptsParsingError); const isError = useAppSelector(selectDynamicPromptsIsError); const isLoading = useAppSelector(selectDynamicPromptsIsLoading); const prompts = useAppSelector(selectDynamicPromptsPrompts); const label = useMemo(() => { let _label = `${t('dynamicPrompts.promptsPreview')} (${prompts.length})`; if (parsingError) { _label += ` - ${parsingError}`; } return _label; }, [parsingError, prompts.length, t]); if (isError) { return ( ); } return ( {label} {prompts.map((prompt, i) => ( {prompt} ))} {isLoading && ( )} ); }; export default memo(ParamDynamicPromptsPreview);