blob: 2101f0e4337ba3d680b493e5f674840843e83f4d [file] [log] [blame]
import React, {useEffect, useState} from 'react';
import {
PageSection,
} from '@patternfly/react-core';
import '../designer/karavan.css';
import {ProjectToolbar} from "./ProjectToolbar";
import {ProjectLogPanel} from "./log/ProjectLogPanel";
import {Project, ProjectFileTypes} from "../api/ProjectModels";
import {useFileStore, useProjectsStore, useProjectStore} from "../api/ProjectStore";
import {MainToolbar} from "../designer/MainToolbar";
import {ProjectTitle} from "./ProjectTitle";
import {ProjectPanel} from "./ProjectPanel";
import {FileEditor} from "./file/FileEditor";
import {shallow} from "zustand/shallow";
import {useParams} from "react-router-dom";
import {KaravanApi} from "../api/KaravanApi";
import {ProjectDataPoller} from "./ProjectDataPoller";
export function ProjectPage () {
const {file, operation} = useFileStore();
const [mode, setMode] = useState<"design" | "code">("design");
const [key, setKey] = useState<string>('');
const [projects] = useProjectsStore((state) => [state.projects], shallow)
const [project, setProject] = useProjectStore((state) => [state.project, state.setProject], shallow )
let { projectId } = useParams();
useEffect(() => {
const p = projects.filter(project => project.projectId === projectId).at(0);
if (p) {
setProject(p, "select");
} else if (projectId){
KaravanApi.getProject(projectId, project1 => setProject(project1, "select"));
}
return () => {
setProject(new Project(), "none");
}
}, []);
const showFilePanel = file !== undefined && operation === 'select';
return (
<PageSection className="designer-page project-page" padding={{default: 'noPadding'}}>
<div className="tools-section">
<MainToolbar title={<ProjectTitle/>} tools={<ProjectToolbar/>}/>
</div>
{showFilePanel && <FileEditor projectId={project.projectId}/>}
{!showFilePanel && <ProjectPanel/>}
<ProjectLogPanel/>
<ProjectDataPoller/>
</PageSection>
)
}