Add removeSource to project

This commit is contained in:
Sam Nolan 2022-09-22 15:08:57 +10:00
parent d3bc08ab9d
commit 96a0d9c489
4 changed files with 36 additions and 0 deletions

View File

@ -112,6 +112,25 @@ describe("project2", () => {
}) })
}) })
describe("removing sources", () => {
let project = Project.createProject()
Project.setContinues(project, "main", ["second"])
Project.setContinues(project, "second", ["first"])
Project.setSource(project, "first", "x=1")
Project.setSource(project, "second", "y=2")
Project.setSource(project, "main", "y")
Project.removeSource(project, "main")
test("can delete sources without dependents", () => {
expect(Project.getDependents(project, "second")) == []
})
test("project doesn't have source", () => {
expect(Project.getSource(project, "main")) == None
})
})
describe("project with include", () => { describe("project with include", () => {
let project = Project.createProject() let project = Project.createProject()
Project.setContinues(project, "main", ["second"]) Project.setContinues(project, "main", ["second"])

View File

@ -22,6 +22,10 @@ export class SqProject {
return RSProject.setSource(this._value, sourceId, value); return RSProject.setSource(this._value, sourceId, value);
} }
removeSource(sourceId: string) {
RSProject.removeSource(this._value, sourceId);
}
getSource(sourceId: string) { getSource(sourceId: string) {
return RSProject.getSource(this._value, sourceId); return RSProject.getSource(this._value, sourceId);
} }

View File

@ -50,6 +50,14 @@ Sets the source for a given source Id.
let setSource = (project: reducerProject, sourceId: string, value: string): unit => let setSource = (project: reducerProject, sourceId: string, value: string): unit =>
project->Private.setSource(sourceId, value) project->Private.setSource(sourceId, value)
/*
Removes the source for a given source Id. Only works on sources without dependents.
Returns true for success
*/
@genType
let removeSource = (project: reducerProject, sourceId: string): unit =>
project->Private.removeSource(sourceId)
/* /*
Gets the source for a given source id. Gets the source for a given source id.
*/ */

View File

@ -61,6 +61,10 @@ let setSource = (project: t, sourceId: string, value: string): unit => {
touchDependents(project, sourceId) touchDependents(project, sourceId)
} }
let removeSource = (project: t, sourceId: string): unit => {
Belt.MutableMap.String.remove(project.items, sourceId)
}
let clean = (project: t, sourceId: string): unit => { let clean = (project: t, sourceId: string): unit => {
let newItem = project->getItem(sourceId)->ProjectItem.clean let newItem = project->getItem(sourceId)->ProjectItem.clean
project->setItem(sourceId, newItem) project->setItem(sourceId, newItem)
@ -184,6 +188,7 @@ let linkDependencies = (project: t, sourceId: string): Reducer_T.namespace => {
acc->Reducer_Namespace.set( acc->Reducer_Namespace.set(
variable, variable,
project->getBindings(includeFile)->Reducer_Namespace.toRecord, project->getBindings(includeFile)->Reducer_Namespace.toRecord,
) )
) )
} }