Commit 90c8d9d2 authored by StyleZhang's avatar StyleZhang

service

parent a30b6acc
import { useTranslation } from 'react-i18next'
import { BLOCKS } from './constants'
export const useBlocks = () => {
const { t } = useTranslation()
return BLOCKS.map((block) => {
return {
...block,
title: t(`workflow.blocks.${block.type}`),
}
})
}
...@@ -3,13 +3,14 @@ import { ...@@ -3,13 +3,14 @@ import {
memo, memo,
useState, useState,
} from 'react' } from 'react'
import { groupBy } from 'lodash-es'
import BlockIcon from '../block-icon' import BlockIcon from '../block-icon'
import type { BlockEnum } from '../types' import type { BlockEnum } from '../types'
import { import {
BLOCK_CLASSIFICATIONS, BLOCK_CLASSIFICATIONS,
BLOCK_GROUP_BY_CLASSIFICATION,
TABS, TABS,
} from './constants' } from './constants'
import { useBlocks } from './hooks'
export type TabsProps = { export type TabsProps = {
onSelect: (type: BlockEnum) => void onSelect: (type: BlockEnum) => void
...@@ -18,6 +19,7 @@ const Tabs: FC<TabsProps> = ({ ...@@ -18,6 +19,7 @@ const Tabs: FC<TabsProps> = ({
onSelect, onSelect,
}) => { }) => {
const [activeTab, setActiveTab] = useState(TABS[0].key) const [activeTab, setActiveTab] = useState(TABS[0].key)
const blocks = useBlocks()
return ( return (
<div> <div>
...@@ -52,7 +54,7 @@ const Tabs: FC<TabsProps> = ({ ...@@ -52,7 +54,7 @@ const Tabs: FC<TabsProps> = ({
) )
} }
{ {
BLOCK_GROUP_BY_CLASSIFICATION[classification].map(block => ( groupBy(blocks, 'classification')[classification].map(block => (
<div <div
key={block.type} key={block.type}
className='flex items-center px-3 h-8 rounded-lg hover:bg-gray-50 cursor-pointer' className='flex items-center px-3 h-8 rounded-lg hover:bg-gray-50 cursor-pointer'
......
import type { FC } from 'react' import type { FC } from 'react'
import { import {
memo, memo,
useMemo,
} from 'react' } from 'react'
import { useParams } from 'next/navigation' import { useParams } from 'next/navigation'
import useSWR from 'swr' import useSWR from 'swr'
...@@ -112,21 +113,42 @@ const WorkflowWrap: FC<WorkflowProps> = ({ ...@@ -112,21 +113,42 @@ const WorkflowWrap: FC<WorkflowProps> = ({
edges, edges,
}) => { }) => {
const appId = useParams().appId const appId = useParams().appId
const { isLoading, error } = useSWR(`/apps/${appId}/workflows/draft`, fetchWorkflowDraft) const { data, isLoading, error } = useSWR(`/apps/${appId}/workflows/draft`, fetchWorkflowDraft)
const startNode = {
id: `${Date.now()}`,
data: NodeInitialData.start,
position: {
x: 100,
y: 100,
},
}
const nodesData = useMemo(() => {
if (nodes)
return nodes
if (data)
return data.graph.nodes
return [startNode]
}, [data, nodes])
const edgesData = useMemo(() => {
if (edges)
return edges
if (data)
return data.graph.edges
return []
}, [data, nodes])
if (error) { if (error) {
syncWorkflowDraft({ syncWorkflowDraft({
url: `/apps/${appId}/workflows/draft`, url: `/apps/${appId}/workflows/draft`,
params: { params: {
graph: { graph: {
nodes: [{ nodes: [startNode],
id: `${Date.now()}`,
data: NodeInitialData.start,
position: {
x: 100,
y: 100,
},
}],
edges: [], edges: [],
}, },
features: {}, features: {},
...@@ -144,8 +166,8 @@ const WorkflowWrap: FC<WorkflowProps> = ({ ...@@ -144,8 +166,8 @@ const WorkflowWrap: FC<WorkflowProps> = ({
<ReactFlowProvider> <ReactFlowProvider>
<FeaturesProvider> <FeaturesProvider>
<Workflow <Workflow
nodes={nodes} nodes={nodesData}
edges={edges} edges={edgesData}
/> />
</FeaturesProvider> </FeaturesProvider>
</ReactFlowProvider> </ReactFlowProvider>
......
const translation = { const translation = {
blocks: {
'start': 'Start',
'end': 'End',
'direct-answer': 'Direct Answer',
'llm': 'LLM',
'knowledge-retrieval': 'Knowledge Retrieval',
'question-classifier': 'Question Classifier',
'if-else': 'IF/ELSE',
'code': 'Code',
'template-transform': 'Templating Transform',
'http-request': 'HTTP Request',
'variable-assigner': 'Variable Assigner',
},
nodes: { nodes: {
common: { common: {
outputVars: 'Output Variables', outputVars: 'Output Variables',
......
const translation = { const translation = {
blocks: {
'start': '开始',
'end': '结束',
'direct-answer': '直接回答',
'llm': 'LLM',
'knowledge-retrieval': '知识检索',
'question-classifier': '问题分类器',
'if-else': '条件分支',
'code': '代码',
'template-transform': '模板转换',
'http-request': 'HTTP 请求',
'variable-assigner': '变量赋值',
},
nodes: { nodes: {
common: { common: {
outputVars: '输出变量', outputVars: '输出变量',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment