mirror of
https://github.com/johndoe6345789/low-code-react-app-b.git
synced 2026-05-05 02:54:51 +00:00
148 lines
3.5 KiB
TypeScript
148 lines
3.5 KiB
TypeScript
import { useMemo } from 'react'
|
|
import { toast } from 'sonner'
|
|
import appStrings from '@/data/app-shortcuts.json'
|
|
import { useFileOperations } from '@/hooks/use-file-operations'
|
|
import { useProjectState } from '@/hooks/use-project-state'
|
|
import type { Project } from '@/types/project'
|
|
export default function useAppProject() {
|
|
const projectState = useProjectState()
|
|
const {
|
|
files,
|
|
models,
|
|
components,
|
|
componentTrees,
|
|
workflows,
|
|
lambdas,
|
|
theme,
|
|
playwrightTests,
|
|
storybookStories,
|
|
unitTests,
|
|
flaskConfig,
|
|
nextjsConfig,
|
|
npmSettings,
|
|
featureToggles,
|
|
setFiles,
|
|
setModels,
|
|
setComponents,
|
|
setComponentTrees,
|
|
setWorkflows,
|
|
setLambdas,
|
|
setTheme,
|
|
setPlaywrightTests,
|
|
setStorybookStories,
|
|
setUnitTests,
|
|
setFlaskConfig,
|
|
setNextjsConfig,
|
|
setNpmSettings,
|
|
setFeatureToggles,
|
|
} = projectState
|
|
|
|
const fileOps = useFileOperations(files, setFiles)
|
|
const currentProject = useMemo<Project>(
|
|
() => ({
|
|
name: nextjsConfig.appName,
|
|
files,
|
|
models,
|
|
components,
|
|
componentTrees,
|
|
workflows,
|
|
lambdas,
|
|
theme,
|
|
playwrightTests,
|
|
storybookStories,
|
|
unitTests,
|
|
flaskConfig,
|
|
nextjsConfig,
|
|
npmSettings,
|
|
featureToggles,
|
|
}),
|
|
[
|
|
componentTrees,
|
|
components,
|
|
featureToggles,
|
|
files,
|
|
flaskConfig,
|
|
lambdas,
|
|
models,
|
|
nextjsConfig,
|
|
npmSettings,
|
|
playwrightTests,
|
|
storybookStories,
|
|
theme,
|
|
unitTests,
|
|
workflows,
|
|
]
|
|
)
|
|
const handleProjectLoad = (project: Project) => {
|
|
if (project.files) setFiles(project.files)
|
|
if (project.models) setModels(project.models)
|
|
if (project.components) setComponents(project.components)
|
|
if (project.componentTrees) setComponentTrees(project.componentTrees)
|
|
if (project.workflows) setWorkflows(project.workflows)
|
|
if (project.lambdas) setLambdas(project.lambdas)
|
|
if (project.theme) setTheme(project.theme)
|
|
if (project.playwrightTests) setPlaywrightTests(project.playwrightTests)
|
|
if (project.storybookStories) setStorybookStories(project.storybookStories)
|
|
if (project.unitTests) setUnitTests(project.unitTests)
|
|
if (project.flaskConfig) setFlaskConfig(project.flaskConfig)
|
|
if (project.nextjsConfig) setNextjsConfig(project.nextjsConfig)
|
|
if (project.npmSettings) setNpmSettings(project.npmSettings)
|
|
if (project.featureToggles) setFeatureToggles(project.featureToggles)
|
|
toast.success(appStrings.messages.projectLoaded)
|
|
}
|
|
const stateContext = {
|
|
files,
|
|
models,
|
|
components,
|
|
componentTrees,
|
|
workflows,
|
|
lambdas,
|
|
theme,
|
|
playwrightTests,
|
|
storybookStories,
|
|
unitTests,
|
|
flaskConfig,
|
|
nextjsConfig,
|
|
npmSettings,
|
|
featureToggles,
|
|
activeFileId: fileOps.activeFileId,
|
|
}
|
|
const actionContext = {
|
|
handleFileChange: fileOps.handleFileChange,
|
|
setActiveFileId: fileOps.setActiveFileId,
|
|
handleFileClose: fileOps.handleFileClose,
|
|
handleFileAdd: fileOps.handleFileAdd,
|
|
setModels,
|
|
setComponents,
|
|
setComponentTrees,
|
|
setWorkflows,
|
|
setLambdas,
|
|
setTheme,
|
|
setPlaywrightTests,
|
|
setStorybookStories,
|
|
setUnitTests,
|
|
setFlaskConfig,
|
|
setNextjsConfig,
|
|
setNpmSettings,
|
|
setFeatureToggles,
|
|
}
|
|
|
|
return {
|
|
files,
|
|
models,
|
|
components,
|
|
componentTrees,
|
|
workflows,
|
|
lambdas,
|
|
playwrightTests,
|
|
storybookStories,
|
|
unitTests,
|
|
featureToggles,
|
|
fileOps,
|
|
currentProject,
|
|
handleProjectLoad,
|
|
stateContext,
|
|
actionContext,
|
|
}
|
|
}
|