feat: add settings and last run tab

pull/21369/head
Joel 1 year ago
parent c2e9056705
commit 17a908fac1

@ -14,12 +14,14 @@ type Item = {
export type ITabHeaderProps = { export type ITabHeaderProps = {
items: Item[] items: Item[]
value: string value: string
itemClassName?: string
onChange: (value: string) => void onChange: (value: string) => void
} }
const TabHeader: FC<ITabHeaderProps> = ({ const TabHeader: FC<ITabHeaderProps> = ({
items, items,
value, value,
itemClassName,
onChange, onChange,
}) => { }) => {
const renderItem = ({ id, name, icon, extra }: Item) => ( const renderItem = ({ id, name, icon, extra }: Item) => (
@ -32,7 +34,7 @@ const TabHeader: FC<ITabHeaderProps> = ({
onClick={() => onChange(id)} onClick={() => onChange(id)}
> >
{icon || ''} {icon || ''}
<div className='ml-2'>{name}</div> <div className={cn('ml-2', itemClassName)}>{name}</div>
{extra || ''} {extra || ''}
</div> </div>
) )

@ -6,6 +6,7 @@ import {
cloneElement, cloneElement,
memo, memo,
useCallback, useCallback,
useState,
} from 'react' } from 'react'
import { import {
RiCloseLine, RiCloseLine,
@ -13,16 +14,16 @@ import {
} from '@remixicon/react' } from '@remixicon/react'
import { useShallow } from 'zustand/react/shallow' import { useShallow } from 'zustand/react/shallow'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import NextStep from './components/next-step' import NextStep from '../next-step'
import PanelOperator from './components/panel-operator' import PanelOperator from '../panel-operator'
import HelpLink from './components/help-link' import HelpLink from '../help-link'
import { import {
DescriptionInput, DescriptionInput,
TitleInput, TitleInput,
} from './components/title-description-input' } from '../title-description-input'
import ErrorHandleOnPanel from './components/error-handle/error-handle-on-panel' import ErrorHandleOnPanel from '../error-handle/error-handle-on-panel'
import RetryOnPanel from './components/retry/retry-on-panel' import RetryOnPanel from '../retry/retry-on-panel'
import { useResizePanel } from './hooks/use-resize-panel' import { useResizePanel } from '../../hooks/use-resize-panel'
import cn from '@/utils/classnames' import cn from '@/utils/classnames'
import BlockIcon from '@/app/components/workflow/block-icon' import BlockIcon from '@/app/components/workflow/block-icon'
import Split from '@/app/components/workflow/nodes/_base/components/split' import Split from '@/app/components/workflow/nodes/_base/components/split'
@ -46,6 +47,7 @@ import Tooltip from '@/app/components/base/tooltip'
import type { Node } from '@/app/components/workflow/types' import type { Node } from '@/app/components/workflow/types'
import { useStore as useAppStore } from '@/app/components/app/store' import { useStore as useAppStore } from '@/app/components/app/store'
import { useStore } from '@/app/components/workflow/store' import { useStore } from '@/app/components/workflow/store'
import Tab, { TabType } from './tab'
type BasePanelProps = { type BasePanelProps = {
children: ReactNode children: ReactNode
@ -102,6 +104,7 @@ const BasePanel: FC<BasePanelProps> = ({
saveStateToHistory(WorkflowHistoryEvent.NodeDescriptionChange) saveStateToHistory(WorkflowHistoryEvent.NodeDescriptionChange)
}, [handleNodeDataUpdateWithSyncDraft, id, saveStateToHistory]) }, [handleNodeDataUpdateWithSyncDraft, id, saveStateToHistory])
const [tabType, setTabType] = useState<TabType>(TabType.settings)
return ( return (
<div className={cn( <div className={cn(
'relative mr-2 h-full', 'relative mr-2 h-full',
@ -167,7 +170,17 @@ const BasePanel: FC<BasePanelProps> = ({
onChange={handleDescriptionChange} onChange={handleDescriptionChange}
/> />
</div> </div>
<div className='pl-4'>
<Tab
value={tabType}
onChange={setTabType}
/>
</div>
<Split />
</div> </div>
{tabType === TabType.settings && (
<>
<div> <div>
{cloneElement(children as any, { id, data })} {cloneElement(children as any, { id, data })}
</div> </div>
@ -201,6 +214,12 @@ const BasePanel: FC<BasePanelProps> = ({
</div> </div>
) )
} }
</>
)}
{tabType === TabType.lastRun && (
<div>last run content</div>
)}
</div> </div>
</div> </div>
) )

@ -0,0 +1,34 @@
'use client'
import TabHeader from '@/app/components/base/tab-header'
import type { FC } from 'react'
import React from 'react'
import { useTranslation } from 'react-i18next'
export enum TabType {
settings = 'settings',
lastRun = 'lastRun',
}
type Props = {
value: TabType,
onChange: (value: TabType) => void
}
const Tab: FC<Props> = ({
value,
onChange,
}) => {
const { t } = useTranslation()
return (
<TabHeader
items={[
{ id: TabType.settings, name: t('workflow.debug.settingsTab').toLocaleUpperCase() },
{ id: TabType.lastRun, name: t('workflow.debug.lastRunTab').toLocaleUpperCase() },
]}
itemClassName='ml-0'
value={value}
onChange={onChange as any}
/>
)
}
export default React.memo(Tab)

@ -10,7 +10,7 @@ import {
PanelComponentMap, PanelComponentMap,
} from './constants' } from './constants'
import BaseNode from './_base/node' import BaseNode from './_base/node'
import BasePanel from './_base/panel' import BasePanel from './_base/components/workflow-panel'
const CustomNode = (props: NodeProps) => { const CustomNode = (props: NodeProps) => {
const nodeData = props.data const nodeData = props.data
@ -18,7 +18,7 @@ const CustomNode = (props: NodeProps) => {
return ( return (
<> <>
<BaseNode { ...props }> <BaseNode {...props}>
<NodeComponent /> <NodeComponent />
</BaseNode> </BaseNode>
</> </>

@ -879,6 +879,10 @@ const translation = {
updateFailure: 'Failed to update version', updateFailure: 'Failed to update version',
}, },
}, },
debug: {
settingsTab: 'Settings',
lastRunTab: 'Last Run',
},
} }
export default translation export default translation

@ -880,6 +880,10 @@ const translation = {
updateFailure: '更新失败', updateFailure: '更新失败',
}, },
}, },
debug: {
settingsTab: '设置',
lastRunTab: '上次运行',
},
} }
export default translation export default translation

Loading…
Cancel
Save