mirror of
https://github.com/langgenius/dify.git
synced 2026-05-11 23:18:39 +08:00
Agent-Logs-Url: https://github.com/langgenius/dify/sessions/489dd945-dfff-462a-9c76-d29fdaa55de2 Co-authored-by: FFXN <31929997+FFXN@users.noreply.github.com>
49 lines
1.8 KiB
TypeScript
49 lines
1.8 KiB
TypeScript
'use client'
|
|
|
|
import type { SnippetInputField, SnippetSection } from '@/models/snippet'
|
|
import { create } from 'zustand'
|
|
|
|
type SnippetDetailUIState = {
|
|
activeSection: SnippetSection
|
|
fields: SnippetInputField[]
|
|
isInputPanelOpen: boolean
|
|
isPublishMenuOpen: boolean
|
|
isPreviewMode: boolean
|
|
isEditorOpen: boolean
|
|
editingField: SnippetInputField | null
|
|
setActiveSection: (section: SnippetSection) => void
|
|
setFields: (fields: SnippetInputField[]) => void
|
|
setInputPanelOpen: (value: boolean) => void
|
|
toggleInputPanel: () => void
|
|
setPublishMenuOpen: (value: boolean) => void
|
|
togglePublishMenu: () => void
|
|
setPreviewMode: (value: boolean) => void
|
|
openEditor: (field?: SnippetInputField | null) => void
|
|
closeEditor: () => void
|
|
reset: () => void
|
|
}
|
|
|
|
const initialState = {
|
|
activeSection: 'orchestrate' as SnippetSection,
|
|
fields: [] as SnippetInputField[],
|
|
isInputPanelOpen: false,
|
|
isPublishMenuOpen: false,
|
|
isPreviewMode: false,
|
|
editingField: null,
|
|
isEditorOpen: false,
|
|
}
|
|
|
|
export const useSnippetDetailStore = create<SnippetDetailUIState>(set => ({
|
|
...initialState,
|
|
setActiveSection: activeSection => set({ activeSection }),
|
|
setFields: fields => set({ fields }),
|
|
setInputPanelOpen: isInputPanelOpen => set({ isInputPanelOpen }),
|
|
toggleInputPanel: () => set(state => ({ isInputPanelOpen: !state.isInputPanelOpen, isPublishMenuOpen: false })),
|
|
setPublishMenuOpen: isPublishMenuOpen => set({ isPublishMenuOpen }),
|
|
togglePublishMenu: () => set(state => ({ isPublishMenuOpen: !state.isPublishMenuOpen })),
|
|
setPreviewMode: isPreviewMode => set({ isPreviewMode }),
|
|
openEditor: (editingField = null) => set({ editingField, isEditorOpen: true, isInputPanelOpen: true }),
|
|
closeEditor: () => set({ editingField: null, isEditorOpen: false }),
|
|
reset: () => set(initialState),
|
|
}))
|