fix(web): allow workbench without projects
This commit is contained in:
@@ -123,7 +123,7 @@ function App() {
|
||||
}, [session, workspaces])
|
||||
|
||||
const dark = theme === 'dark'
|
||||
const activeWorkspace = workspaces.find((workspace) => workspace.project.id === activeProjectID) ?? workspaces[0]
|
||||
const activeWorkspace = workspaces.find((workspace) => workspace.project.id === activeProjectID)
|
||||
const activeTagOptions = activeWorkspace?.tags.filter((tag) => tag !== 'all' && tag !== '全部') ?? []
|
||||
|
||||
function selectActiveProject(projectID: string) {
|
||||
@@ -142,7 +142,7 @@ function App() {
|
||||
const requestedProjectID = latestProjectID !== projectIDWhenStarted
|
||||
? latestProjectID
|
||||
: preferredProjectID ?? latestProjectID
|
||||
const nextProjectID = backendWorkspaces.find((workspace) => workspace.project.id === requestedProjectID)?.project.id ?? backendWorkspaces[0]?.project.id ?? ''
|
||||
const nextProjectID = backendWorkspaces.find((workspace) => workspace.project.id === requestedProjectID)?.project.id ?? ''
|
||||
selectActiveProject(nextProjectID)
|
||||
return backendWorkspaces
|
||||
}
|
||||
@@ -152,9 +152,9 @@ function App() {
|
||||
try {
|
||||
setApiBaseUrl(input.server)
|
||||
const nextSession = await login(input.email, input.password)
|
||||
const backendWorkspaces = await loadWorkspaces(nextSession, '')
|
||||
await loadWorkspaces(nextSession, '')
|
||||
setSession(nextSession)
|
||||
selectActiveProject(backendWorkspaces[0]?.project.id ?? '')
|
||||
selectActiveProject('')
|
||||
setActiveChannel('overview')
|
||||
setActiveView('workspace')
|
||||
setScreen('workbench')
|
||||
@@ -385,7 +385,7 @@ function App() {
|
||||
<Spin loading={loading} style={{ width: '100%' }}>
|
||||
<LoginPage onLogin={handleLogin} />
|
||||
</Spin>
|
||||
) : activeWorkspace && session ? (
|
||||
) : session ? (
|
||||
<ProjectPage
|
||||
activeView={activeView}
|
||||
activeWorkspace={activeWorkspace}
|
||||
|
||||
@@ -14,7 +14,7 @@ export function ProjectRail({
|
||||
onSelectProject,
|
||||
onCreateProject,
|
||||
}: {
|
||||
activeProject: Project
|
||||
activeProject?: Project
|
||||
projects: Project[]
|
||||
activeView: WorkbenchView
|
||||
onSelectWorkspace: () => void
|
||||
@@ -42,7 +42,7 @@ export function ProjectRail({
|
||||
{projects.map((project) => (
|
||||
<Badge key={project.id} count={project.badge} dot={false} className={project.urgent ? 'project-badge urgent' : 'project-badge'}>
|
||||
<button
|
||||
className={activeView === 'project' && activeProject.id === project.id ? 'project-button active' : 'project-button'}
|
||||
className={activeView === 'project' && activeProject?.id === project.id ? 'project-button active' : 'project-button'}
|
||||
onClick={() => onSelectProject(project)}
|
||||
style={{ '--project-color': project.color } as CSSProperties}
|
||||
title={project.name}
|
||||
|
||||
@@ -452,9 +452,11 @@ export function WorkspaceExplorePage({
|
||||
onClick={() => void updateSelected({ status: selected.status, starred: !selected.starred })}
|
||||
/>
|
||||
<Button
|
||||
aria-label={`沉淀到项目${activeProjectName}`}
|
||||
aria-label={activeProjectName ? `沉淀到项目${activeProjectName}` : '请先选择项目'}
|
||||
title={activeProjectName ? undefined : '请先选择项目'}
|
||||
type="text"
|
||||
icon={<IconBook />}
|
||||
disabled={!activeProjectID}
|
||||
loading={depositingItemID === selected.id}
|
||||
onClick={() => void depositSelected()}
|
||||
/>
|
||||
|
||||
@@ -67,7 +67,7 @@ export function ProjectPage({
|
||||
onDepositDatasetItem,
|
||||
}: {
|
||||
activeView: WorkbenchView
|
||||
activeWorkspace: ProjectWorkspace
|
||||
activeWorkspace?: ProjectWorkspace
|
||||
workspaces: ProjectWorkspace[]
|
||||
activeChannel: ChannelKey
|
||||
activeTaskID: string | null
|
||||
@@ -108,9 +108,10 @@ export function ProjectPage({
|
||||
onSyncDatasetSources: () => Promise<DatasetSyncResultDTO[]>
|
||||
onDepositDatasetItem: (itemId: string, projectId: string) => Promise<DatasetDepositDTO & { refreshFailed?: boolean }>
|
||||
}) {
|
||||
const isProject = activeView === 'project'
|
||||
const isProject = activeView === 'project' && Boolean(activeWorkspace)
|
||||
const projects = workspaces.map((workspace) => workspace.project)
|
||||
const updateActiveProjectTask = (update: ProjectTaskUpdate) => {
|
||||
if (!activeWorkspace) return
|
||||
onUpdateWorkspaceTask({
|
||||
originalProjectId: activeWorkspace.project.id,
|
||||
nextProjectId: activeWorkspace.project.id,
|
||||
@@ -138,7 +139,7 @@ export function ProjectPage({
|
||||
|
||||
<Layout className="workbench-main" hasSider>
|
||||
<ProjectRail
|
||||
activeProject={activeWorkspace.project}
|
||||
activeProject={activeWorkspace?.project}
|
||||
projects={projects}
|
||||
activeView={activeView}
|
||||
onSelectWorkspace={onSelectWorkspace}
|
||||
@@ -147,7 +148,7 @@ export function ProjectPage({
|
||||
onCreateProject={onCreateProject}
|
||||
/>
|
||||
|
||||
{isProject && (
|
||||
{isProject && activeWorkspace && (
|
||||
<ProjectSidebar
|
||||
activeView={activeView}
|
||||
activeWorkspace={activeWorkspace}
|
||||
@@ -163,8 +164,8 @@ export function ProjectPage({
|
||||
<WorkspacePage workspaces={workspaces} onOpenTask={onOpenTask} onUpdateTask={onUpdateWorkspaceTask} />
|
||||
) : activeView === 'workspace-explore' ? (
|
||||
<WorkspaceExplorePage
|
||||
activeProjectID={activeWorkspace.project.id}
|
||||
activeProjectName={activeWorkspace.project.name}
|
||||
activeProjectID={activeWorkspace?.project.id ?? ''}
|
||||
activeProjectName={activeWorkspace?.project.name ?? ''}
|
||||
onListSources={onListDatasetSources}
|
||||
onListItems={onListDatasetItems}
|
||||
onCreateSource={onCreateDatasetSource}
|
||||
@@ -174,7 +175,7 @@ export function ProjectPage({
|
||||
onSyncSources={onSyncDatasetSources}
|
||||
onDepositItem={onDepositDatasetItem}
|
||||
/>
|
||||
) : (
|
||||
) : activeWorkspace ? (
|
||||
<ProjectChannelPage
|
||||
activeChannel={activeChannel}
|
||||
activeWorkspace={activeWorkspace}
|
||||
@@ -193,6 +194,8 @@ export function ProjectPage({
|
||||
onListAIExperts={onListAIExperts}
|
||||
onCreateAISession={onCreateAISession}
|
||||
/>
|
||||
) : (
|
||||
<WorkspacePage workspaces={workspaces} onOpenTask={onOpenTask} onUpdateTask={onUpdateWorkspaceTask} />
|
||||
)}
|
||||
</Content>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user