158 lines
4.3 KiB
TypeScript
158 lines
4.3 KiB
TypeScript
import { UnitLength_type } from '@kittycad/lib/dist/types/src/models'
|
|
import { CommandBarOverwriteWarning } from 'components/CommandBarOverwriteWarning'
|
|
import { StateMachineCommandSetConfig } from 'lib/commandTypes'
|
|
import { baseUnitLabels, baseUnitsUnion } from 'lib/settings/settingsTypes'
|
|
import { projectsMachine } from 'machines/projectsMachine'
|
|
|
|
export type ProjectsCommandSchema = {
|
|
'Read projects': {}
|
|
'Create project': {
|
|
name: string
|
|
}
|
|
'Open project': {
|
|
name: string
|
|
}
|
|
'Delete project': {
|
|
name: string
|
|
}
|
|
'Rename project': {
|
|
oldName: string
|
|
newName: string
|
|
}
|
|
'Import file from URL': {
|
|
name: string
|
|
code?: string
|
|
units: UnitLength_type
|
|
method: 'newProject' | 'existingProject'
|
|
projectName?: string
|
|
}
|
|
}
|
|
|
|
export const projectsCommandBarConfig: StateMachineCommandSetConfig<
|
|
typeof projectsMachine,
|
|
ProjectsCommandSchema
|
|
> = {
|
|
'Open project': {
|
|
icon: 'arrowRight',
|
|
description: 'Open a project',
|
|
args: {
|
|
name: {
|
|
inputType: 'options',
|
|
required: true,
|
|
options: [],
|
|
optionsFromContext: (context) =>
|
|
context.projects.map((p) => ({
|
|
name: p.name!,
|
|
value: p.name!,
|
|
})),
|
|
},
|
|
},
|
|
},
|
|
'Create project': {
|
|
icon: 'folderPlus',
|
|
description: 'Create a project',
|
|
args: {
|
|
name: {
|
|
inputType: 'string',
|
|
required: true,
|
|
defaultValueFromContext: (context) => context.defaultProjectName,
|
|
},
|
|
},
|
|
},
|
|
'Delete project': {
|
|
icon: 'close',
|
|
description: 'Delete a project',
|
|
needsReview: true,
|
|
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: [],
|
|
optionsFromContext: (context) =>
|
|
context.projects.map((p) => ({
|
|
name: p.name!,
|
|
value: p.name!,
|
|
})),
|
|
},
|
|
},
|
|
},
|
|
'Rename project': {
|
|
icon: 'folder',
|
|
description: 'Rename a project',
|
|
needsReview: true,
|
|
args: {
|
|
oldName: {
|
|
inputType: 'options',
|
|
required: true,
|
|
options: [],
|
|
optionsFromContext: (context) =>
|
|
context.projects.map((p) => ({
|
|
name: p.name!,
|
|
value: p.name!,
|
|
})),
|
|
},
|
|
newName: {
|
|
inputType: 'string',
|
|
required: true,
|
|
defaultValueFromContext: (context) => context.defaultProjectName,
|
|
},
|
|
},
|
|
},
|
|
'Import file from URL': {
|
|
icon: 'file',
|
|
description: 'Create a file',
|
|
needsReview: true,
|
|
args: {
|
|
method: {
|
|
inputType: 'options',
|
|
required: true,
|
|
skip: true,
|
|
options: [
|
|
{ name: 'New Project', value: 'newProject' },
|
|
{ name: 'Existing Project', value: 'existingProject' },
|
|
],
|
|
},
|
|
// TODO: We can't get the currently-opened project to auto-populate here because
|
|
// it's not available on projectMachine, but lower in fileMachine. Unify these.
|
|
projectName: {
|
|
inputType: 'options',
|
|
required: (commandsContext) => commandsContext.argumentsToSubmit.method === 'existingProject',
|
|
skip: true,
|
|
options: [],
|
|
optionsFromContext: (context) =>
|
|
context.projects.map((p) => ({
|
|
name: p.name!,
|
|
value: p.name!,
|
|
})),
|
|
},
|
|
name: {
|
|
inputType: 'string',
|
|
required: true,
|
|
skip: true,
|
|
},
|
|
code: {
|
|
inputType: 'text',
|
|
required: false,
|
|
skip: true,
|
|
},
|
|
units: {
|
|
inputType: 'options',
|
|
required: false,
|
|
skip: true,
|
|
options: baseUnitsUnion.map((unit) => ({
|
|
name: baseUnitLabels[unit],
|
|
value: unit,
|
|
})),
|
|
},
|
|
},
|
|
reviewMessage(commandBarContext) {
|
|
return `Will add the contents from URL to a new ${commandBarContext.argumentsToSubmit.method === 'newProject' ? 'project with file main.kcl' : `file within the project "${commandBarContext.argumentsToSubmit.projectName}"`} named "${commandBarContext.argumentsToSubmit.name}", and set default units to "${commandBarContext.argumentsToSubmit.units}".`
|
|
},
|
|
}
|
|
}
|