chore: implementing more project commands
This commit is contained in:
@ -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,
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user