/*
Copyright (C) 2023-2026 QuantumNous
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
For commercial licensing, please contact support@quantumnous.com
*/
/* eslint-disable react-refresh/only-export-components */
import * as React from 'react'
import { type Workspace } from '../types'
type WorkspaceContextType = {
activeWorkspace: Workspace | null
setActiveWorkspace: (workspace: Workspace) => void
}
const WorkspaceContext = React.createContext(
undefined
)
/**
* 工作区上下文 Provider
* 管理当前激活的工作区状态,用于切换不同的侧边栏视图
*/
export function WorkspaceProvider({ children }: { children: React.ReactNode }) {
const [activeWorkspace, setActiveWorkspace] =
React.useState(null)
const value = React.useMemo(
() => ({ activeWorkspace, setActiveWorkspace }),
[activeWorkspace]
)
return (
{children}
)
}
/**
* 使用工作区上下文的 Hook
* @throws 如果在 WorkspaceProvider 外部使用会抛出错误
*/
export function useWorkspace() {
const context = React.useContext(WorkspaceContext)
if (!context) {
throw new Error('useWorkspace must be used within WorkspaceProvider')
}
return context
}