chore: implementing more project commands

This commit is contained in:
Kevin Nadro
2025-04-16 12:39:45 -06:00
parent a5fd0150b8
commit 6f2e227ea7
2 changed files with 161 additions and 67 deletions

View File

@ -2,6 +2,7 @@ import { CommandBarOverwriteWarning } from '@src/components/CommandBarOverwriteW
import type { StateMachineCommandSetConfig } from '@src/lib/commandTypes'
import { isDesktop } from '@src/lib/isDesktop'
import type { projectsMachine } from '@src/machines/projectsMachine'
import type { Command, CommandArgumentOption } from '@src/lib/commandTypes'
export type ProjectsCommandSchema = {
'Read projects': Record<string, unknown>
@ -170,3 +171,160 @@ export const projectsCommandBarConfig: StateMachineCommandSetConfig<
},
},
}
import {
folderSnapshot,
defaultProjectFolderNameSnapshot,
} from '@src/machines/systemIO/snapshotContext'
import { systemIOActor } from '@src/machines/appMachine'
import { SystemIOMachineEvents } from '@src/machines/systemIO/utils'
export const openProjectCommand: Command = {
icon: 'arrowRight',
name: 'Open projecct',
displayName: `Open project`,
description: 'Open a project',
groupId: 'projects',
needsReview: false,
onSubmit: (record) => {
if (record) {
systemIOActor.send({
type: SystemIOMachineEvents.navigateToProject,
data: { requestedProjectName: record.name },
})
}
},
args: {
name: {
required: true,
inputType: 'options',
options: () => {
const folders = folderSnapshot()
const options: CommandArgumentOption<any>[] = []
folders.forEach((folder) => {
options.push({
name: folder.name,
value: folder.name,
isCurrent: false,
})
})
return options
},
},
},
}
export const createProjectCommand: Command = {
icon: 'folder',
name: 'Create project',
displayName: `Create project`,
description: 'Create a project',
groupId: 'projects',
needsReview: false,
onSubmit: (record) => {
if (record) {
systemIOActor.send({
type: SystemIOMachineEvents.createProject,
data: { requestedProjectName: record.name },
})
}
},
args: {
name: {
required: true,
inputType: 'string',
defaultValue: defaultProjectFolderNameSnapshot,
},
},
}
export const deleteProjectCommand: Command = {
icon: 'folder',
name: 'Delete project',
displayName: `Delete project`,
description: 'Delete a project',
groupId: 'projects',
needsReview: false,
onSubmit: (record) => {
if (record) {
systemIOActor.send({
type: SystemIOMachineEvents.deleteProject,
data: { requestedProjectName: record.name },
})
}
},
reviewMessage: ({ argumentsToSubmit }) =>
CommandBarOverwriteWarning({
heading: 'Are you sure you want to delete?',
message: `This will permanently delete the project "${argumentsToSubmit.name}" and all its contents.`,
}),
args: {
name: {
inputType: 'options',
required: true,
options: () => {
const folders = folderSnapshot()
const options: CommandArgumentOption<any>[] = []
folders.forEach((folder) => {
options.push({
name: folder.name,
value: folder.name,
isCurrent: false,
})
})
return options
},
},
},
}
export const renameProjectCommand: Command = {
icon: 'folder',
name: 'Rename project',
displayName: `Rename project`,
description: 'Rename a project',
groupId: 'projects',
needsReview: true,
onSubmit: (record) => {
if (record) {
systemIOActor.send({
type: SystemIOMachineEvents.renameProject,
data: {
requestedProjectName: record.newName,
projectName: record.oldName,
},
})
}
},
args: {
oldName: {
inputType: 'options',
required: true,
options: () => {
const folders = folderSnapshot()
const options: CommandArgumentOption<any>[] = []
folders.forEach((folder) => {
options.push({
name: folder.name,
value: folder.name,
isCurrent: false,
})
})
return options
},
},
newName: {
inputType: 'string',
required: true,
defaultValue: defaultProjectFolderNameSnapshot,
},
},
}
// export const importFileFromURL: Command = {}
export const projectCommands = [
openProjectCommand,
createProjectCommand,
deleteProjectCommand,
renameProjectCommand,
]