chore: implemented navigating to specfic KCL file
This commit is contained in:
10
src/Root.tsx
10
src/Root.tsx
@ -6,16 +6,16 @@ import { ProjectsContextProvider } from '@src/components/ProjectsContextProvider
|
||||
import { SystemIOMachineLogicListener } from '@src/components/Providers/SystemIOProviderDesktop'
|
||||
import { RouteProvider } from '@src/components/RouteProvider'
|
||||
import { KclContextProvider } from '@src/lang/KclProvider'
|
||||
import { useEffect } from 'react'
|
||||
import { Outlet } from 'react-router-dom'
|
||||
import {useEffect} from "react"
|
||||
function RootLayout() {
|
||||
useEffect(() => {
|
||||
console.log('MyComponent mounted');
|
||||
console.log('MyComponent mounted')
|
||||
|
||||
return () => {
|
||||
console.log('MyComponent unmounted');
|
||||
};
|
||||
}, []);
|
||||
console.log('MyComponent unmounted')
|
||||
}
|
||||
}, [])
|
||||
return (
|
||||
<div>
|
||||
<OpenInDesktopAppHandler>
|
||||
|
||||
@ -5,13 +5,19 @@ import { useEffect } from 'react'
|
||||
import { useNavigate } from 'react-router-dom'
|
||||
export const useRequestedProjectName = () =>
|
||||
useSelector(systemIOActor, (state) => state.context.requestedProjectName)
|
||||
export const useRequestedFileName = () =>
|
||||
useSelector(systemIOActor, (state) => state.context.requestedFileName)
|
||||
export const useProjectDirectoryPath = () =>
|
||||
useSelector(systemIOActor, (state) => state.context.projectDirectoryPath)
|
||||
|
||||
export function SystemIOMachineLogicListener() {
|
||||
const requestedProjectName = useRequestedProjectName()
|
||||
const requestedFileName = useRequestedFileName()
|
||||
console.log(requestedFileName,'okay')
|
||||
const projectDirectoryPath = useProjectDirectoryPath()
|
||||
const navigate = useNavigate()
|
||||
|
||||
// Handle global project name navigation
|
||||
useEffect(() => {
|
||||
if (!requestedProjectName.name) {
|
||||
return
|
||||
@ -20,10 +26,29 @@ export function SystemIOMachineLogicListener() {
|
||||
projectDirectoryPath +
|
||||
window.electron.path.sep +
|
||||
requestedProjectName.name
|
||||
|
||||
const requestedPath = `${PATHS.FILE}/${encodeURIComponent(
|
||||
projectPathWithoutSpecificKCLFile
|
||||
)}`
|
||||
navigate(requestedPath)
|
||||
}, [requestedProjectName])
|
||||
|
||||
// Handle global file name navigation
|
||||
useEffect(() => {
|
||||
if (!requestedFileName.file || !requestedFileName.project) {
|
||||
return
|
||||
}
|
||||
const projectPath = window.electron.join(
|
||||
projectDirectoryPath,
|
||||
requestedFileName.project
|
||||
)
|
||||
const filePath = window.electron.join(
|
||||
projectPath,
|
||||
requestedFileName.file
|
||||
)
|
||||
const requestedPath = `${PATHS.FILE}/${encodeURIComponent(filePath)}`
|
||||
navigate(requestedPath)
|
||||
}, [requestedFileName])
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
@ -34,9 +34,13 @@ export const systemIOMachine = setup({
|
||||
data: { requestedProjectDirectoryPath: string }
|
||||
}
|
||||
| {
|
||||
type: SystemIOMachineEvents.openProject
|
||||
type: SystemIOMachineEvents.navigateToProject
|
||||
data: { requestedProjectName: string }
|
||||
},
|
||||
}
|
||||
| {
|
||||
type: SystemIOMachineEvents.navigateToFile
|
||||
data: { requestedProjectName: string, requestedFileName: string }
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
[SystemIOMachineActions.setFolders]: assign({
|
||||
@ -56,10 +60,16 @@ export const systemIOMachine = setup({
|
||||
}),
|
||||
[SystemIOMachineActions.setRequestedProjectName]: assign({
|
||||
requestedProjectName: ({ event }) => {
|
||||
assertEvent(event, SystemIOMachineEvents.openProject)
|
||||
assertEvent(event, SystemIOMachineEvents.navigateToProject)
|
||||
return { name: event.data.requestedProjectName }
|
||||
},
|
||||
}),
|
||||
[SystemIOMachineActions.setRequestedFileName]: assign({
|
||||
requestedFileName: ({ event }) => {
|
||||
assertEvent(event, SystemIOMachineEvents.navigateToFile)
|
||||
return { project: event.data.requestedProjectName, file: event.data.requestedFileName }
|
||||
},
|
||||
}),
|
||||
},
|
||||
actors: {
|
||||
[SystemIOMachineActors.readFoldersFromProjectDirectory]: fromPromise(
|
||||
@ -79,6 +89,7 @@ export const systemIOMachine = setup({
|
||||
projectDirectoryPath: NO_PROJECT_DIRECTORY,
|
||||
hasListedProjects: false,
|
||||
requestedProjectName: { name: NO_PROJECT_DIRECTORY },
|
||||
requestedFileName: { name: NO_PROJECT_DIRECTORY },
|
||||
}),
|
||||
states: {
|
||||
[SystemIOMachineStates.idle]: {
|
||||
@ -90,9 +101,12 @@ export const systemIOMachine = setup({
|
||||
target: SystemIOMachineStates.readingFolders,
|
||||
actions: [SystemIOMachineActions.setProjectDirectoryPath],
|
||||
},
|
||||
[SystemIOMachineEvents.openProject]: {
|
||||
[SystemIOMachineEvents.navigateToProject]: {
|
||||
actions: [SystemIOMachineActions.setRequestedProjectName],
|
||||
},
|
||||
[SystemIOMachineEvents.navigateToFile]: {
|
||||
actions: [SystemIOMachineActions.setRequestedFileName],
|
||||
},
|
||||
},
|
||||
},
|
||||
[SystemIOMachineStates.readingFolders]: {
|
||||
@ -111,7 +125,6 @@ export const systemIOMachine = setup({
|
||||
},
|
||||
},
|
||||
},
|
||||
[SystemIOMachineStates.openingProject]: {},
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
@ -9,7 +9,6 @@ export enum SystemIOMachineStates {
|
||||
idle = 'idle',
|
||||
readingFolders = 'readingFolders',
|
||||
settingProjectDirectoryPath = 'settingProjectDirectoryPath',
|
||||
openingProject = 'openingProject',
|
||||
}
|
||||
|
||||
const donePrefix = 'xstate.done.actor.'
|
||||
@ -19,13 +18,15 @@ export enum SystemIOMachineEvents {
|
||||
done_readFoldersFromProjectDirectory = donePrefix +
|
||||
'read folders from project directory',
|
||||
setProjectDirectoryPath = 'set project directory path',
|
||||
openProject = 'open project',
|
||||
navigateToProject = 'navigate to project',
|
||||
navigateToFile = 'navigate to file'
|
||||
}
|
||||
|
||||
export enum SystemIOMachineActions {
|
||||
setFolders = 'set folders',
|
||||
setProjectDirectoryPath = 'set project directory path',
|
||||
setRequestedProjectName = 'set requested project name',
|
||||
setRequestedFileName = 'set requested file name',
|
||||
}
|
||||
|
||||
export const NO_PROJECT_DIRECTORY = ''
|
||||
@ -42,4 +43,5 @@ export type SystemIOContext = {
|
||||
// this is required to prevent chokidar from spamming invalid events during initialization.
|
||||
hasListedProjects: boolean
|
||||
requestedProjectName: { name: string }
|
||||
requestedFileName: {project: string, file: string}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user