2025-04-09 09:46:30 -05:00
|
|
|
import { PATHS } from '@src/lib/paths'
|
|
|
|
import { systemIOActor } from '@src/machines/appMachine'
|
|
|
|
import { useSelector } from '@xstate/react'
|
|
|
|
import { useEffect } from 'react'
|
|
|
|
import { useNavigate } from 'react-router-dom'
|
2025-04-14 11:56:28 -06:00
|
|
|
export const useRequestedProjectName = () =>
|
|
|
|
useSelector(systemIOActor, (state) => state.context.requestedProjectName)
|
2025-04-14 12:59:20 -06:00
|
|
|
export const useRequestedFileName = () =>
|
|
|
|
useSelector(systemIOActor, (state) => state.context.requestedFileName)
|
2025-04-14 11:56:28 -06:00
|
|
|
export const useProjectDirectoryPath = () =>
|
|
|
|
useSelector(systemIOActor, (state) => state.context.projectDirectoryPath)
|
2025-04-09 09:46:30 -05:00
|
|
|
|
|
|
|
export function SystemIOMachineLogicListener() {
|
2025-04-09 14:47:54 -06:00
|
|
|
const requestedProjectName = useRequestedProjectName()
|
2025-04-14 12:59:20 -06:00
|
|
|
const requestedFileName = useRequestedFileName()
|
2025-04-09 14:47:54 -06:00
|
|
|
const projectDirectoryPath = useProjectDirectoryPath()
|
|
|
|
const navigate = useNavigate()
|
2025-04-14 12:59:20 -06:00
|
|
|
|
|
|
|
// Handle global project name navigation
|
2025-04-09 09:46:30 -05:00
|
|
|
useEffect(() => {
|
2025-04-14 11:56:28 -06:00
|
|
|
if (!requestedProjectName.name) {
|
|
|
|
return
|
|
|
|
}
|
2025-04-09 14:47:54 -06:00
|
|
|
let projectPathWithoutSpecificKCLFile =
|
2025-04-14 11:56:28 -06:00
|
|
|
projectDirectoryPath +
|
|
|
|
window.electron.path.sep +
|
|
|
|
requestedProjectName.name
|
2025-04-14 12:59:20 -06:00
|
|
|
|
2025-04-09 14:47:54 -06:00
|
|
|
const requestedPath = `${PATHS.FILE}/${encodeURIComponent(
|
2025-04-14 11:56:28 -06:00
|
|
|
projectPathWithoutSpecificKCLFile
|
|
|
|
)}`
|
2025-04-09 14:47:54 -06:00
|
|
|
navigate(requestedPath)
|
|
|
|
}, [requestedProjectName])
|
2025-04-14 12:59:20 -06:00
|
|
|
|
|
|
|
// Handle global file name navigation
|
|
|
|
useEffect(() => {
|
|
|
|
if (!requestedFileName.file || !requestedFileName.project) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
const projectPath = window.electron.join(
|
|
|
|
projectDirectoryPath,
|
|
|
|
requestedFileName.project
|
|
|
|
)
|
2025-04-14 15:04:07 -06:00
|
|
|
const filePath = window.electron.join(projectPath, requestedFileName.file)
|
2025-04-14 12:59:20 -06:00
|
|
|
const requestedPath = `${PATHS.FILE}/${encodeURIComponent(filePath)}`
|
|
|
|
navigate(requestedPath)
|
|
|
|
}, [requestedFileName])
|
|
|
|
|
2025-04-09 09:46:30 -05:00
|
|
|
return null
|
|
|
|
}
|