balibabu
Feat: When saving the canvas, other dls parameters passed from the backend are spliced into the dsl parameters #3355 (#3558)
76468f0
| import { useFetchFlow } from '@/hooks/flow-hooks'; | |
| import get from 'lodash/get'; | |
| import React, { MouseEventHandler, useCallback, useMemo } from 'react'; | |
| import JsonView from 'react18-json-view'; | |
| import 'react18-json-view/src/style.css'; | |
| import { useGetComponentLabelByValue, useReplaceIdWithText } from '../../hooks'; | |
| import { | |
| Popover, | |
| PopoverContent, | |
| PopoverTrigger, | |
| } from '@/components/ui/popover'; | |
| import { | |
| Table, | |
| TableBody, | |
| TableCell, | |
| TableHead, | |
| TableHeader, | |
| TableRow, | |
| } from '@/components/ui/table'; | |
| import { useTranslate } from '@/hooks/common-hooks'; | |
| interface IProps extends React.PropsWithChildren { | |
| nodeId: string; | |
| name?: string; | |
| } | |
| export function NextNodePopover({ children, nodeId, name }: IProps) { | |
| const { t } = useTranslate('flow'); | |
| const { data } = useFetchFlow(); | |
| const component = useMemo(() => { | |
| return get(data, ['dsl', 'components', nodeId], {}); | |
| }, [nodeId, data]); | |
| const inputs: Array<{ component_id: string; content: string }> = get( | |
| component, | |
| ['obj', 'inputs'], | |
| [], | |
| ); | |
| const output = get(component, ['obj', 'output'], {}); | |
| const { replacedOutput } = useReplaceIdWithText(output); | |
| const stopPropagation: MouseEventHandler = useCallback((e) => { | |
| e.stopPropagation(); | |
| }, []); | |
| const getLabel = useGetComponentLabelByValue(nodeId); | |
| return ( | |
| <Popover> | |
| <PopoverTrigger onClick={stopPropagation} asChild> | |
| {children} | |
| </PopoverTrigger> | |
| <PopoverContent | |
| align={'start'} | |
| side={'right'} | |
| sideOffset={20} | |
| onClick={stopPropagation} | |
| className="w-[400px]" | |
| > | |
| <div className="mb-3 font-semibold text-[16px]"> | |
| {name} {t('operationResults')} | |
| </div> | |
| <div className="flex w-full gap-4 flex-col"> | |
| <div className="flex flex-col space-y-1.5"> | |
| <span className="font-semibold text-[14px]">{t('input')}</span> | |
| <div className="bg-gray-100 p-1 rounded"> | |
| <Table> | |
| <TableHeader> | |
| <TableRow> | |
| <TableHead>{t('componentId')}</TableHead> | |
| <TableHead className="w-[60px]">{t('content')}</TableHead> | |
| </TableRow> | |
| </TableHeader> | |
| <TableBody> | |
| {inputs.map((x, idx) => ( | |
| <TableRow key={idx}> | |
| <TableCell>{getLabel(x.component_id)}</TableCell> | |
| <TableCell className="truncate">{x.content}</TableCell> | |
| </TableRow> | |
| ))} | |
| </TableBody> | |
| </Table> | |
| </div> | |
| </div> | |
| <div className="flex flex-col space-y-1.5"> | |
| <span className="font-semibold text-[14px]">{t('output')}</span> | |
| <div className="bg-gray-100 p-1 rounded"> | |
| <JsonView | |
| src={replacedOutput} | |
| displaySize={30} | |
| className="w-full max-h-[300px] break-words overflow-auto" | |
| /> | |
| </div> | |
| </div> | |
| </div> | |
| </PopoverContent> | |
| </Popover> | |
| ); | |
| } | |