diff --git a/src/app/teacher/authoring-tool.module.ts b/src/app/teacher/authoring-tool.module.ts index c94de390cd..cd07a5b2fd 100644 --- a/src/app/teacher/authoring-tool.module.ts +++ b/src/app/teacher/authoring-tool.module.ts @@ -29,6 +29,7 @@ import { NotebookAuthoringComponent } from '../../assets/wise5/authoringTool/not import { StructureAuthoringModule } from '../../assets/wise5/authoringTool/structure/structure-authoring.module'; import { MilestonesAuthoringComponent } from '../../assets/wise5/authoringTool/milestones-authoring/milestones-authoring.component'; import { ChooseComponentLocationComponent } from '../../assets/wise5/authoringTool/node/chooseComponentLocation/choose-component-location.component'; +import { ChooseSimulationComponent } from '../../assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component'; @NgModule({ declarations: [ @@ -43,6 +44,7 @@ import { ChooseComponentLocationComponent } from '../../assets/wise5/authoringTo ChooseNewComponent, ChooseNewNodeLocation, ChooseNewNodeTemplate, + ChooseSimulationComponent, ConcurrentAuthorsMessageComponent, MilestonesAuthoringComponent, NodeAuthoringComponent, diff --git a/src/assets/wise5/authoringTool/addNode/addNodeModule.ts b/src/assets/wise5/authoringTool/addNode/addNodeModule.ts index 9079c80c53..de69d2b3fd 100644 --- a/src/assets/wise5/authoringTool/addNode/addNodeModule.ts +++ b/src/assets/wise5/authoringTool/addNode/addNodeModule.ts @@ -5,14 +5,14 @@ import { ChooseNewNodeLocation } from './choose-new-node-location/choose-new-nod import { ChooseNewNodeTemplate } from './choose-new-node-template/choose-new-node-template.component'; import AutomatedAssessmentChooseItemController from './automatedAssessment/automatedAssessmentChooseItemController'; import AutomatedAssessmentConfigureController from './automatedAssessment/automatedAssessmentConfigureController'; -import SimulationChooseItemController from './simulation/simulationChooseItemController'; import { CardSelectorComponent } from '../components/card-selector/card-selector.component'; +import { ChooseSimulationComponent } from './choose-simulation/choose-simulation.component'; export default angular .module('addNodeModule', ['ui.router']) .controller('AutomatedAssessmentChooseItemController', AutomatedAssessmentChooseItemController) .controller('AutomatedAssessmentConfigureController', AutomatedAssessmentConfigureController) - .controller('SimulationChooseItemController', SimulationChooseItemController) + .directive('chooseSimulation', downgradeComponent({ component: ChooseSimulationComponent })) .directive( 'addYourOwnNode', downgradeComponent({ component: AddYourOwnNode }) as angular.IDirectiveFactory @@ -90,9 +90,7 @@ export default angular }) .state('root.at.project.add-node.simulation.choose-item', { url: '/choose-item', - templateUrl: 'assets/wise5/authoringTool/addNode/simulation/choose-item.html', - controller: 'SimulationChooseItemController', - controllerAs: '$ctrl' + component: 'chooseSimulation' }); } ]); diff --git a/src/assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component.html b/src/assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component.html new file mode 100644 index 0000000000..1d3f13e81a --- /dev/null +++ b/src/assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component.html @@ -0,0 +1,64 @@ +
Interactive Simulation
+

+ Select from a curated library of interactive simulations addressing various science topics. +

+
+ + Filter by Topic + + {{ subject }} + + + + Search + + + + {{ getNumItemsFound() }} Item(s) Found +
+ + +
+
+ + + + +
diff --git a/src/assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component.scss b/src/assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component.scss new file mode 100644 index 0000000000..adb8b2d8cb --- /dev/null +++ b/src/assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component.scss @@ -0,0 +1,3 @@ +.num-items-found-message { + margin-top: 14px; +} \ No newline at end of file diff --git a/src/assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component.spec.ts b/src/assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component.spec.ts new file mode 100644 index 0000000000..e323ce423d --- /dev/null +++ b/src/assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component.spec.ts @@ -0,0 +1,49 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ChooseSimulationComponent } from './choose-simulation.component'; +import { HttpClientTestingModule } from '@angular/common/http/testing'; +import { UpgradeModule } from '@angular/upgrade/static'; +import { TeacherProjectService } from '../../../services/teacherProjectService'; +import { StudentTeacherCommonServicesModule } from '../../../../../app/student-teacher-common-services.module'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatSelectModule } from '@angular/material/select'; +import { FormsModule } from '@angular/forms'; +import { MatInputModule } from '@angular/material/input'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; + +describe('ChooseSimulationComponent', () => { + let component: ChooseSimulationComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ChooseSimulationComponent], + imports: [ + BrowserAnimationsModule, + FormsModule, + HttpClientTestingModule, + MatFormFieldModule, + MatInputModule, + MatSelectModule, + StudentTeacherCommonServicesModule, + UpgradeModule + ], + providers: [TeacherProjectService] + }).compileComponents(); + + TestBed.inject(UpgradeModule).$injector = { + get: () => { + return { + go: (route: string, params: any) => {} + }; + } + }; + TestBed.inject(TeacherProjectService); + fixture = TestBed.createComponent(ChooseSimulationComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component.ts b/src/assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component.ts new file mode 100644 index 0000000000..637cee2f09 --- /dev/null +++ b/src/assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component.ts @@ -0,0 +1,122 @@ +import { Component } from '@angular/core'; +import { ConfigureStructureComponent } from '../../structure/configure-structure.component'; +import { TeacherProjectService } from '../../../services/teacherProjectService'; +import { HttpClient } from '@angular/common/http'; +import { UpgradeModule } from '@angular/upgrade/static'; + +class SimulationNode { + metadata = { + subjects: [] + }; + type: string; + constructor(node: any) { + Object.assign(this, node); + } +} + +@Component({ + selector: 'choose-simulation', + templateUrl: './choose-simulation.component.html', + styleUrls: ['./choose-simulation.component.scss'] +}) +export class ChooseSimulationComponent extends ConfigureStructureComponent { + allNodes: SimulationNode[] = []; + filteredNodes: SimulationNode[] = []; + project: any; + projectItems: any; + searchText: string = ''; + selectedNode: string; + selectedSubjects: string[] = []; + simulationProjectId: number; + subjects: string[] = []; + + constructor( + http: HttpClient, + private projectService: TeacherProjectService, + protected upgrade: UpgradeModule + ) { + super(http, upgrade); + } + + ngOnInit(): void { + this.$state = this.upgrade.$injector.get('$state'); + this.simulationProjectId = this.projectService.getSimulationProjectId(); + this.showSimulationProject(); + } + + private showSimulationProject(): void { + this.projectService.retrieveProjectById(this.simulationProjectId).then((projectJSON) => { + this.project = projectJSON; + const nodeOrderOfProject = this.projectService.getNodeOrderOfProject(this.project); + this.projectItems = nodeOrderOfProject.nodes.slice(1); // remove root node from consideration + const allSubjects: string[] = []; + this.projectItems.forEach((item) => { + if (item.node.type !== 'group') { + const simulationNode = new SimulationNode(item.node); + this.allNodes.push(simulationNode); + allSubjects.push(...simulationNode.metadata.subjects); + } + }); + this.filteredNodes = this.allNodes; + this.subjects = Array.from(new Set(allSubjects)).sort(); + }); + } + + protected filter(): void { + this.filteredNodes = this.allNodes.filter((node: SimulationNode) => { + const isSearchTextFound = this.isSearchTextFound(this.searchText, JSON.stringify(node)); + if (this.isAnySubjectChosen()) { + return isSearchTextFound && this.isSubjectFound(this.selectedSubjects, node); + } + return isSearchTextFound; + }); + } + + private isSearchTextFound(searchText: string, testText: string): boolean { + return testText.toLowerCase().includes(searchText.toLowerCase()); + } + + private isAnySubjectChosen(): boolean { + return this.selectedSubjects.length > 0; + } + + private isSubjectFound(selectedSubjects: any[], resource: any): boolean { + for (const subject of selectedSubjects) { + if (resource.metadata.subjects.includes(subject)) { + return true; + } + } + return false; + } + + protected clearFilters(): void { + this.searchText = ''; + this.selectedSubjects = []; + this.filter(); + } + + protected getNumItemsFound(): number { + return this.filteredNodes.filter((node: SimulationNode) => { + return node.type != 'group'; + }).length; + } + + protected previewNode(node: any): void { + window.open(`${this.project.previewProjectURL}/${node.id}`); + } + + protected back(): void { + this.$state.go('root.at.project.add-node.choose-template'); + } + + protected next(): void { + this.$state.go('root.at.project.import-step.choose-location', { + importFromProjectId: this.simulationProjectId, + selectedNodes: [this.selectedNode] + }); + } + + protected itemSelected(item: any): void { + this.selectedNode = item; + } +} diff --git a/src/assets/wise5/authoringTool/components/card-selector/card-selector.component.html b/src/assets/wise5/authoringTool/components/card-selector/card-selector.component.html index 3cbdd60d74..8d330f06aa 100644 --- a/src/assets/wise5/authoringTool/components/card-selector/card-selector.component.html +++ b/src/assets/wise5/authoringTool/components/card-selector/card-selector.component.html @@ -1,11 +1,20 @@
- + {{ item.title }}
- + Are you sure you want to delete this default feedback? src/app/authoring-tool/edit-advanced-component/edit-component-default-feedback/edit-component-default-feedback.component.ts - 51 + 50 @@ -1474,6 +1474,10 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.src/app/teacher/share-run-dialog/share-run-dialog.component.html 153,154 + + src/assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component.html + 50,52 + src/assets/wise5/authoringTool/node/chooseComponentLocation/choose-component-location.component.html 49,51 @@ -1505,6 +1509,10 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.src/app/authoring-tool/import-step/choose-import-step/choose-import-step.component.html 91 + + src/assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component.html + 58 + src/assets/wise5/authoringTool/structure/jigsaw/jigsaw.component.html 38 @@ -1528,6 +1536,10 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.src/app/authoring-tool/import-step/choose-import-step/choose-import-step.component.html 96,98 + + src/assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component.html + 61,63 + src/assets/wise5/authoringTool/structure/jigsaw/jigsaw.component.html 41,43 @@ -2866,6 +2878,10 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.src/app/teacher/teacher-run-list/teacher-run-list.component.html 17 + + src/assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component.html + 13 + src/assets/wise5/components/outsideURL/outside-url-authoring/outside-url-authoring.component.html 29 @@ -5460,7 +5476,7 @@ Click "Cancel" to keep the invalid JSON open so you can fix it. src/assets/wise5/authoringTool/components/card-selector/card-selector.component.html - 18 + 27 src/assets/wise5/classroomMonitor/dataExport/data-export/data-export.component.html @@ -8749,6 +8765,10 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.src/assets/wise5/authoringTool/addNode/add-your-own-node/add-your-own-node.component.html 65 + + src/assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component.html + 39 + src/assets/wise5/authoringTool/node/advanced/node-advanced-authoring/node-advanced-authoring.component.html 6 @@ -8812,7 +8832,7 @@ Click "Cancel" to keep the invalid JSON open so you can fix it. src/assets/wise5/authoringTool/components/card-selector/card-selector.component.html - 26,28 + 35,37 @@ -8857,6 +8877,81 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.25 + + Interactive Simulation + + src/assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component.html + 1 + + + + Select from a curated library of interactive simulations addressing various science topics. + + + src/assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component.html + 2,4 + + + + Filter by Topic + + src/assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component.html + 7 + + + src/assets/wise5/components/outsideURL/outside-url-authoring/outside-url-authoring.component.html + 12 + + + + Clear All + + src/assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component.html + 20 + + + src/assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component.html + 22 + + + src/assets/wise5/components/outsideURL/outside-url-authoring/outside-url-authoring.component.html + 38 + + + src/assets/wise5/components/outsideURL/outside-url-authoring/outside-url-authoring.component.html + 40 + + + + Item(s) Found + + src/assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component.html + 28 + + + + Back + + src/assets/wise5/authoringTool/addNode/choose-simulation/choose-simulation.component.html + 39,41 + + + src/assets/wise5/authoringTool/structure/jigsaw/jigsaw.component.html + 27,29 + + + src/assets/wise5/authoringTool/structure/ki-cycle-using-oer/ki-cycle-using-oer.component.html + 18,20 + + + src/assets/wise5/authoringTool/structure/peer-review-and-revision/peer-review-and-revision.component.html + 16,18 + + + src/assets/wise5/authoringTool/structure/self-directed-investigation/self-directed-investigation.component.html + 17,19 + + Back to Unit Plan @@ -8921,7 +9016,7 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.Selected src/assets/wise5/authoringTool/components/card-selector/card-selector.component.html - 11 + 20 src/assets/wise5/components/dialogGuidance/edit-dialog-guidance-computer-avatar/edit-dialog-guidance-computer-avatar.component.html @@ -8936,7 +9031,7 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.No results found src/assets/wise5/authoringTool/components/card-selector/card-selector.component.html - 38 + 47 src/assets/wise5/components/outsideURL/outside-url-authoring/outside-url-authoring.component.html @@ -11299,25 +11394,6 @@ Click "Cancel" to keep the invalid JSON open so you can fix it.16 - - Back - - src/assets/wise5/authoringTool/structure/jigsaw/jigsaw.component.html - 27,29 - - - src/assets/wise5/authoringTool/structure/ki-cycle-using-oer/ki-cycle-using-oer.component.html - 18,20 - - - src/assets/wise5/authoringTool/structure/peer-review-and-revision/peer-review-and-revision.component.html - 16,18 - - - src/assets/wise5/authoringTool/structure/self-directed-investigation/self-directed-investigation.component.html - 17,19 - - KI Lesson with OER @@ -18404,13 +18480,6 @@ If this problem continues, let your teacher know and move on to the next activit 5,8 - - Filter by Topic - - src/assets/wise5/components/outsideURL/outside-url-authoring/outside-url-authoring.component.html - 12 - - @@ -18418,17 +18487,6 @@ If this problem continues, let your teacher know and move on to the next activit 18,20 - - Clear All - - src/assets/wise5/components/outsideURL/outside-url-authoring/outside-url-authoring.component.html - 38 - - - src/assets/wise5/components/outsideURL/outside-url-authoring/outside-url-authoring.component.html - 40 - - Item(s) Found