初始化模版工程
This commit is contained in:
40
components/nova-sdk/hooks/usePanelState.ts
Normal file
40
components/nova-sdk/hooks/usePanelState.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
import { useState, useCallback } from 'react'
|
||||
import type { TaskArtifact } from '../types'
|
||||
|
||||
/**
|
||||
* 面板状态管理 Hook
|
||||
*/
|
||||
export function usePanelState() {
|
||||
const [panelVisible, setPanelVisible] = useState(false)
|
||||
const [selectedAttachment, setSelectedAttachment] = useState<TaskArtifact | null>(null)
|
||||
|
||||
const togglePanel = useCallback(() => {
|
||||
setPanelVisible((prev) => !prev)
|
||||
}, [])
|
||||
|
||||
const openPanel = useCallback((attachment?: TaskArtifact) => {
|
||||
setPanelVisible(true)
|
||||
if (attachment) {
|
||||
setSelectedAttachment(attachment)
|
||||
}
|
||||
}, [])
|
||||
|
||||
const closePanel = useCallback(() => {
|
||||
setPanelVisible(false)
|
||||
setSelectedAttachment(null)
|
||||
}, [])
|
||||
|
||||
const selectAttachment = useCallback((attachment: TaskArtifact) => {
|
||||
setSelectedAttachment(attachment)
|
||||
setPanelVisible(true)
|
||||
}, [])
|
||||
|
||||
return {
|
||||
panelVisible,
|
||||
selectedAttachment,
|
||||
togglePanel,
|
||||
openPanel,
|
||||
closePanel,
|
||||
selectAttachment,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user