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

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

View File

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

View File

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

View File

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