chore: generic create new file
This commit is contained in:
@ -100,7 +100,8 @@ export async function mkdirOrNOOP(directoryPath: string): Promise<string> {
|
|||||||
export async function createNewProjectDirectory(
|
export async function createNewProjectDirectory(
|
||||||
projectName: string,
|
projectName: string,
|
||||||
initialCode?: string,
|
initialCode?: string,
|
||||||
configuration?: DeepPartial<Configuration> | Error
|
configuration?: DeepPartial<Configuration> | Error,
|
||||||
|
initialFileName?: string
|
||||||
): Promise<Project> {
|
): Promise<Project> {
|
||||||
if (!configuration) {
|
if (!configuration) {
|
||||||
configuration = await readAppSettingsFile()
|
configuration = await readAppSettingsFile()
|
||||||
@ -126,7 +127,8 @@ export async function createNewProjectDirectory(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const projectFile = window.electron.path.join(projectDir, PROJECT_ENTRYPOINT)
|
const kclFileName = initialFileName || PROJECT_ENTRYPOINT
|
||||||
|
const projectFile = window.electron.path.join(projectDir, kclFileName)
|
||||||
// When initialCode is present, we're loading existing code. If it's not
|
// When initialCode is present, we're loading existing code. If it's not
|
||||||
// present, we're creating a new project, and we want to incorporate the
|
// present, we're creating a new project, and we want to incorporate the
|
||||||
// user's settings.
|
// user's settings.
|
||||||
|
|||||||
@ -50,6 +50,14 @@ export const systemIOMachine = setup({
|
|||||||
| {
|
| {
|
||||||
type: SystemIOMachineEvents.deleteProject
|
type: SystemIOMachineEvents.deleteProject
|
||||||
data: { requestedProjectName: string }
|
data: { requestedProjectName: string }
|
||||||
|
}
|
||||||
|
| {
|
||||||
|
type: SystemIOMachineEvents.createKCLFile
|
||||||
|
data: {
|
||||||
|
requestedProjectName: string
|
||||||
|
requestedFileName: string
|
||||||
|
requestedCode: string
|
||||||
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
@ -116,6 +124,18 @@ export const systemIOMachine = setup({
|
|||||||
}
|
}
|
||||||
}) => {}
|
}) => {}
|
||||||
),
|
),
|
||||||
|
[SystemIOMachineActors.createKCLFile]: fromPromise(
|
||||||
|
async ({
|
||||||
|
input,
|
||||||
|
}: {
|
||||||
|
input: {
|
||||||
|
context: SystemIOContext
|
||||||
|
requestedProjectName: string
|
||||||
|
requestedFileName: string
|
||||||
|
requestedCode: string
|
||||||
|
}
|
||||||
|
}) => {}
|
||||||
|
),
|
||||||
},
|
},
|
||||||
}).createMachine({
|
}).createMachine({
|
||||||
initial: SystemIOMachineStates.idle,
|
initial: SystemIOMachineStates.idle,
|
||||||
@ -158,6 +178,9 @@ export const systemIOMachine = setup({
|
|||||||
[SystemIOMachineEvents.deleteProject]: {
|
[SystemIOMachineEvents.deleteProject]: {
|
||||||
target: SystemIOMachineStates.deletingProject,
|
target: SystemIOMachineStates.deletingProject,
|
||||||
},
|
},
|
||||||
|
[SystemIOMachineEvents.createKCLFile]: {
|
||||||
|
target: SystemIOMachineStates.creatingKCLFile,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
[SystemIOMachineStates.readingFolders]: {
|
[SystemIOMachineStates.readingFolders]: {
|
||||||
@ -234,6 +257,27 @@ export const systemIOMachine = setup({
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
[SystemIOMachineStates.creatingKCLFile]: {
|
||||||
|
invoke: {
|
||||||
|
id: SystemIOMachineActors.createKCLFile,
|
||||||
|
src: SystemIOMachineActors.createKCLFile,
|
||||||
|
input: ({ context, event }) => {
|
||||||
|
assertEvent(event, SystemIOMachineEvents.createKCLFile)
|
||||||
|
return {
|
||||||
|
context,
|
||||||
|
requestedProjectName: event.data.requestedProjectName,
|
||||||
|
requestedFileName: event.data.requestedFileName,
|
||||||
|
requestedCode: event.data.requestedCode,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onDone: {
|
||||||
|
target: SystemIOMachineStates.idle,
|
||||||
|
},
|
||||||
|
onError: {
|
||||||
|
target: SystemIOMachineStates.idle,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@ -2,10 +2,12 @@ import {
|
|||||||
createNewProjectDirectory,
|
createNewProjectDirectory,
|
||||||
getProjectInfo,
|
getProjectInfo,
|
||||||
mkdirOrNOOP,
|
mkdirOrNOOP,
|
||||||
|
readAppSettingsFile,
|
||||||
renameProjectDirectory,
|
renameProjectDirectory,
|
||||||
} from '@src/lib/desktop'
|
} from '@src/lib/desktop'
|
||||||
import {
|
import {
|
||||||
doesProjectNameNeedInterpolated,
|
doesProjectNameNeedInterpolated,
|
||||||
|
getNextFileName,
|
||||||
getNextProjectIndex,
|
getNextProjectIndex,
|
||||||
getUniqueProjectName,
|
getUniqueProjectName,
|
||||||
interpolateProjectNameWithIndex,
|
interpolateProjectNameWithIndex,
|
||||||
@ -132,5 +134,52 @@ export const systemIOMachineDesktop = systemIOMachine.provide({
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
|
[SystemIOMachineActors.createKCLFile]: fromPromise(
|
||||||
|
async ({
|
||||||
|
input,
|
||||||
|
}: {
|
||||||
|
input: {
|
||||||
|
context: SystemIOContext
|
||||||
|
requestedProjectName: string
|
||||||
|
requestedFileName: string
|
||||||
|
requestedCode: string
|
||||||
|
}
|
||||||
|
}) => {
|
||||||
|
const requestedProjectName = input.requestedProjectName
|
||||||
|
const requestedFileName = input.requestedFileName
|
||||||
|
const requestedCode = input.requestedCode
|
||||||
|
const folders = input.context.folders
|
||||||
|
|
||||||
|
let newProjectName = requestedProjectName
|
||||||
|
|
||||||
|
const needsInterpolated =
|
||||||
|
doesProjectNameNeedInterpolated(newProjectName)
|
||||||
|
if (needsInterpolated) {
|
||||||
|
const nextIndex = getNextProjectIndex(newProjectName, folders)
|
||||||
|
newProjectName = interpolateProjectNameWithIndex(
|
||||||
|
newProjectName,
|
||||||
|
nextIndex
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
const baseDir = window.electron.join(
|
||||||
|
input.context.projectDirectoryPath,
|
||||||
|
newProjectName
|
||||||
|
)
|
||||||
|
const { name: newFileName } = getNextFileName({
|
||||||
|
entryName: requestedFileName,
|
||||||
|
baseDir,
|
||||||
|
})
|
||||||
|
const configuration = await readAppSettingsFile()
|
||||||
|
|
||||||
|
// Create the project around the file if newProject
|
||||||
|
await createNewProjectDirectory(
|
||||||
|
newProjectName,
|
||||||
|
requestedCode,
|
||||||
|
configuration,
|
||||||
|
newFileName
|
||||||
|
)
|
||||||
|
}
|
||||||
|
),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|||||||
@ -6,6 +6,7 @@ export enum SystemIOMachineActors {
|
|||||||
createProject = 'create project',
|
createProject = 'create project',
|
||||||
renameProject = 'rename project',
|
renameProject = 'rename project',
|
||||||
deleteProject = 'delete project',
|
deleteProject = 'delete project',
|
||||||
|
createKCLFile = 'create kcl file',
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum SystemIOMachineStates {
|
export enum SystemIOMachineStates {
|
||||||
@ -15,6 +16,7 @@ export enum SystemIOMachineStates {
|
|||||||
creatingProject = 'creatingProject',
|
creatingProject = 'creatingProject',
|
||||||
renamingProject = 'renamingProject',
|
renamingProject = 'renamingProject',
|
||||||
deletingProject = 'deletingProject',
|
deletingProject = 'deletingProject',
|
||||||
|
creatingKCLFile = 'creatingKCLFile',
|
||||||
}
|
}
|
||||||
|
|
||||||
const donePrefix = 'xstate.done.actor.'
|
const donePrefix = 'xstate.done.actor.'
|
||||||
@ -29,6 +31,7 @@ export enum SystemIOMachineEvents {
|
|||||||
createProject = 'create project',
|
createProject = 'create project',
|
||||||
renameProject = 'rename project',
|
renameProject = 'rename project',
|
||||||
deleteProject = 'delete project',
|
deleteProject = 'delete project',
|
||||||
|
createKCLFile = 'create kcl file',
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum SystemIOMachineActions {
|
export enum SystemIOMachineActions {
|
||||||
|
|||||||
Reference in New Issue
Block a user