mirror of
https://github.com/langgenius/dify.git
synced 2026-04-05 16:36:28 +08:00
feat(web): snippet version panel
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
import type { PanelProps } from '@/app/components/workflow/panel'
|
||||
import type { SnippetInputField } from '@/models/snippet'
|
||||
import { render, waitFor } from '@testing-library/react'
|
||||
import SnippetWorkflowPanel from '../workflow-panel'
|
||||
|
||||
let capturedPanelProps: PanelProps | null = null
|
||||
|
||||
vi.mock('@/app/components/workflow/panel', () => ({
|
||||
default: (props: PanelProps) => {
|
||||
capturedPanelProps = props
|
||||
return <div data-testid="workflow-panel">{props.components?.left}</div>
|
||||
},
|
||||
}))
|
||||
|
||||
const defaultFields: SnippetInputField[] = []
|
||||
|
||||
describe('SnippetWorkflowPanel', () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks()
|
||||
capturedPanelProps = null
|
||||
})
|
||||
|
||||
// Verifies snippet panel wires version history support into the shared workflow panel.
|
||||
describe('Rendering', () => {
|
||||
it('should pass snippet version history panel props to the shared workflow panel', async () => {
|
||||
render(
|
||||
<SnippetWorkflowPanel
|
||||
snippetId="snippet-1"
|
||||
fields={defaultFields}
|
||||
editingField={null}
|
||||
isEditorOpen={false}
|
||||
isInputPanelOpen={false}
|
||||
onCloseInputPanel={vi.fn()}
|
||||
onOpenEditor={vi.fn()}
|
||||
onCloseEditor={vi.fn()}
|
||||
onSubmitField={vi.fn()}
|
||||
onRemoveField={vi.fn()}
|
||||
onPrimarySortChange={vi.fn()}
|
||||
onSecondarySortChange={vi.fn()}
|
||||
/>,
|
||||
)
|
||||
|
||||
await waitFor(() => {
|
||||
expect(capturedPanelProps?.versionHistoryPanelProps?.getVersionListUrl).toBe('/snippets/snippet-1/workflows')
|
||||
expect(capturedPanelProps?.versionHistoryPanelProps?.deleteVersionUrl?.('version-1')).toBe('/snippets/snippet-1/workflows/version-1')
|
||||
expect(capturedPanelProps?.versionHistoryPanelProps?.restoreVersionUrl('version-1')).toBe('/snippets/snippet-1/workflows/version-1/restore')
|
||||
expect(capturedPanelProps?.versionHistoryPanelProps?.updateVersionUrl?.('version-1')).toBe('/snippets/snippet-1/workflows/version-1')
|
||||
expect(capturedPanelProps?.versionHistoryPanelProps?.latestVersionId).toBe('')
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -56,6 +56,7 @@ const SnippetChildren = ({
|
||||
/>
|
||||
|
||||
<SnippetWorkflowPanel
|
||||
snippetId={snippetId}
|
||||
fields={fields}
|
||||
editingField={editingField}
|
||||
isEditorOpen={isEditorOpen}
|
||||
|
||||
@@ -8,6 +8,7 @@ import SnippetInputFieldEditor from './input-field-editor'
|
||||
import SnippetInputFieldPanel from './panel'
|
||||
|
||||
type SnippetWorkflowPanelProps = {
|
||||
snippetId: string
|
||||
fields: SnippetInputField[]
|
||||
editingField: SnippetInputField | null
|
||||
isEditorOpen: boolean
|
||||
@@ -59,6 +60,7 @@ const SnippetPanelOnLeft = ({
|
||||
}
|
||||
|
||||
const SnippetWorkflowPanel = ({
|
||||
snippetId,
|
||||
fields,
|
||||
editingField,
|
||||
isEditorOpen,
|
||||
@@ -71,11 +73,22 @@ const SnippetWorkflowPanel = ({
|
||||
onPrimarySortChange,
|
||||
onSecondarySortChange,
|
||||
}: SnippetWorkflowPanelProps) => {
|
||||
const versionHistoryPanelProps = useMemo(() => {
|
||||
return {
|
||||
getVersionListUrl: `/snippets/${snippetId}/workflows`,
|
||||
deleteVersionUrl: (versionId: string) => `/snippets/${snippetId}/workflows/${versionId}`,
|
||||
restoreVersionUrl: (versionId: string) => `/snippets/${snippetId}/workflows/${versionId}/restore`,
|
||||
updateVersionUrl: (versionId: string) => `/snippets/${snippetId}/workflows/${versionId}`,
|
||||
latestVersionId: '',
|
||||
}
|
||||
}, [snippetId])
|
||||
|
||||
const panelProps: PanelProps = useMemo(() => {
|
||||
return {
|
||||
components: {
|
||||
left: (
|
||||
<SnippetPanelOnLeft
|
||||
snippetId={snippetId}
|
||||
fields={fields}
|
||||
editingField={editingField}
|
||||
isEditorOpen={isEditorOpen}
|
||||
@@ -90,6 +103,7 @@ const SnippetWorkflowPanel = ({
|
||||
/>
|
||||
),
|
||||
},
|
||||
versionHistoryPanelProps,
|
||||
}
|
||||
}, [
|
||||
editingField,
|
||||
@@ -103,6 +117,7 @@ const SnippetWorkflowPanel = ({
|
||||
onRemoveField,
|
||||
onSecondarySortChange,
|
||||
onSubmitField,
|
||||
versionHistoryPanelProps,
|
||||
])
|
||||
|
||||
return <Panel {...panelProps} />
|
||||
|
||||
Reference in New Issue
Block a user