NEWONE1 / invokeai /frontend /web /src /features /gallery /components /ImageMetadataViewer /ImageMetadataWorkflowTabContent.tsx
| import { IAINoContentFallback } from 'common/components/IAIImageFallback'; | |
| import { memo, useMemo } from 'react'; | |
| import { useTranslation } from 'react-i18next'; | |
| import { useDebouncedImageWorkflow } from 'services/api/hooks/useDebouncedImageWorkflow'; | |
| import type { ImageDTO } from 'services/api/types'; | |
| import DataViewer from './DataViewer'; | |
| type Props = { | |
| image: ImageDTO; | |
| }; | |
| const ImageMetadataWorkflowTabContent = ({ image }: Props) => { | |
| const { t } = useTranslation(); | |
| const { currentData } = useDebouncedImageWorkflow(image); | |
| const workflow = useMemo(() => { | |
| if (currentData?.workflow) { | |
| try { | |
| return JSON.parse(currentData.workflow); | |
| } catch { | |
| return null; | |
| } | |
| } | |
| return null; | |
| }, [currentData]); | |
| if (!workflow) { | |
| return <IAINoContentFallback label={t('nodes.noWorkflow')} />; | |
| } | |
| return ( | |
| <DataViewer | |
| fileName={`${image.image_name.replace('.png', '')}_workflow`} | |
| data={workflow} | |
| label={t('metadata.workflow')} | |
| /> | |
| ); | |
| }; | |
| export default memo(ImageMetadataWorkflowTabContent); | |