chore: enabling toast for some machine state

This commit is contained in:
Kevin Nadro
2025-04-15 10:49:12 -06:00
parent 0a2e668ee4
commit c68718d835
5 changed files with 33 additions and 5 deletions

View File

@ -48,7 +48,7 @@ const createRouter = isDesktop() ? createHashRouter : createBrowserRouter
const router = createRouter([
{
id: PATHS.INDEX,
element: <RootLayout/>,
element: <RootLayout />,
children: [
{
path: PATHS.INDEX,

View File

@ -9,8 +9,6 @@ import {
import { SystemIOMachineEvents } from '@src/machines/systemIO/utils'
import { useEffect } from 'react'
import { useNavigate } from 'react-router-dom'
import { projectsCommandBarConfig } from '@src/lib/commandBarConfigs/projectsCommandConfig'
import useStateMachineCommands from '@src/hooks/useStateMachineCommands'
export function SystemIOMachineLogicListener() {
const requestedProjectName = useRequestedProjectName()

View File

@ -8,6 +8,7 @@ import {
SystemIOMachineEvents,
SystemIOMachineStates,
} from '@src/machines/systemIO/utils'
import toast from 'react-hot-toast'
import { assertEvent, assign, fromPromise, setup } from 'xstate'
/**
@ -101,6 +102,28 @@ export const systemIOMachine = setup({
return event.data.requestedDefaultProjectFolderName
},
}),
[SystemIOMachineActions.toastSuccess]: ({ event }) => {
toast.success(
('data' in event && typeof event.data === 'string' && event.data) ||
('output' in event &&
'message' in event.output &&
typeof event.output.message === 'string' &&
event.output.message) ||
''
)
},
[SystemIOMachineActions.toastError]: ({ event }) => {
toast.error(
('data' in event && typeof event.data === 'string' && event.data) ||
('output' in event &&
typeof event.output === 'string' &&
event.output) ||
('error' in event &&
event.error instanceof Error &&
event.error.message) ||
''
)
},
},
actors: {
[SystemIOMachineActors.readFoldersFromProjectDirectory]: fromPromise(
@ -143,8 +166,7 @@ export const systemIOMachine = setup({
requestedProjectName: string
requestedFileName: string
requestedCode: string
}
}
}) => {}
),
},
@ -227,9 +249,11 @@ export const systemIOMachine = setup({
},
onDone: {
target: SystemIOMachineStates.readingFolders,
actions: [SystemIOMachineActions.toastSuccess],
},
onError: {
target: SystemIOMachineStates.idle,
actions: [SystemIOMachineActions.toastError],
},
},
},

View File

@ -76,6 +76,10 @@ export const systemIOMachineDesktop = systemIOMachine.provide({
const requestedProjectName = input.requestedProjectName
const uniqueName = getUniqueProjectName(requestedProjectName, folders)
await createNewProjectDirectory(uniqueName)
return {
message: `Successfully created "${uniqueName}"`,
name: uniqueName,
}
}
),
[SystemIOMachineActors.renameProject]: fromPromise(

View File

@ -41,6 +41,8 @@ export enum SystemIOMachineActions {
setRequestedProjectName = 'set requested project name',
setRequestedFileName = 'set requested file name',
setDefaultProjectFolderName = 'set default project folder name',
toastSuccess = 'toastSuccess',
toastError = 'toastError',
}
export const NO_PROJECT_DIRECTORY = ''