From 744cc29346758d17c7879421fd681d3e18cf59a1 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Fri, 13 May 2022 23:58:49 +0200 Subject: [PATCH] Separate create inputs, add fulfillment mode creation on course page --- .../src/graphql-resolvers/course.resolver.ts | 4 +- .../fulfillment-mode.resolver.ts | 4 +- .../graphql-resolvers/requirement.resolver.ts | 4 +- .../src/graphql-resolvers/subject.resolver.ts | 4 +- backend/src/graphql-types/course.ts | 10 ++-- backend/src/graphql-types/fulfillment-mode.ts | 14 +++-- backend/src/graphql-types/requirement.ts | 10 ++-- backend/src/graphql-types/subject.ts | 10 ++-- frontend/src/app/graphql/course.graphql | 2 +- .../src/app/graphql/fulfillment-mode.graphql | 31 +++++++++++ frontend/src/app/graphql/requirement.graphql | 2 +- frontend/src/app/graphql/subject.graphql | 2 +- .../requirement-list.component.css | 0 .../requirement-list.component.html | 1 - .../requirement-list.component.spec.ts | 25 --------- .../requirement-list.component.ts | 17 ------ .../app/requirements/requirements.module.ts | 15 ------ .../shared-components/edit/edit.component.ts | 23 +++++--- .../list/list.component.html | 4 +- .../shared-components/list/list.component.ts | 3 +- .../course-edit/course-edit.component.html | 29 +++++++++- .../course-edit/course-edit.component.ts | 53 ++++++++++++++++++- .../subject-edit/subject-edit.component.html | 2 +- .../subject-edit/subject-edit.component.ts | 4 +- .../subject-list/subject-list.component.html | 1 + frontend/src/app/subjects/subjects.module.ts | 10 +++- 26 files changed, 184 insertions(+), 100 deletions(-) create mode 100644 frontend/src/app/graphql/fulfillment-mode.graphql delete mode 100644 frontend/src/app/requirements/requirement-list/requirement-list.component.css delete mode 100644 frontend/src/app/requirements/requirement-list/requirement-list.component.html delete mode 100644 frontend/src/app/requirements/requirement-list/requirement-list.component.spec.ts delete mode 100644 frontend/src/app/requirements/requirement-list/requirement-list.component.ts delete mode 100644 frontend/src/app/requirements/requirements.module.ts diff --git a/backend/src/graphql-resolvers/course.resolver.ts b/backend/src/graphql-resolvers/course.resolver.ts index c082558..44e10ea 100644 --- a/backend/src/graphql-resolvers/course.resolver.ts +++ b/backend/src/graphql-resolvers/course.resolver.ts @@ -3,7 +3,7 @@ import { CourseRepository, SubjectRepository, UserRepository } from '../reposito import { arg, ID, Int, mutation, query, resolver } from '@loopback/graphql'; import { Course } from '../models'; import { listResponse, ListResponse } from '../graphql-types/list'; -import { CourseList, CourseUpdateInput } from '../graphql-types/course'; +import { CourseCreateInput, CourseList, CourseUpdateInput } from '../graphql-types/course'; @resolver(of => Course) export class CourseResolver { @@ -36,7 +36,7 @@ export class CourseResolver { } @mutation(returns => Boolean) - async courseCreate(@arg('course') input: CourseUpdateInput): Promise { + async courseCreate(@arg('course') input: CourseCreateInput): Promise { await this.courseRepo.create(input); return true; } diff --git a/backend/src/graphql-resolvers/fulfillment-mode.resolver.ts b/backend/src/graphql-resolvers/fulfillment-mode.resolver.ts index 78a1974..2da3cb3 100644 --- a/backend/src/graphql-resolvers/fulfillment-mode.resolver.ts +++ b/backend/src/graphql-resolvers/fulfillment-mode.resolver.ts @@ -3,7 +3,7 @@ import { CourseRepository, FulfillmentModeRepository, UserRepository } from '../ import { arg, ID, Int, mutation, query, resolver } from '@loopback/graphql'; import { FulfillmentMode } from '../models'; import { listResponse, ListResponse } from '../graphql-types/list'; -import { FulfillmentModeList, FulfillmentModeUpdateInput } from '../graphql-types/fulfillment-mode'; +import { FulfillmentModeCreateInput, FulfillmentModeList, FulfillmentModeUpdateInput } from '../graphql-types/fulfillment-mode'; @resolver(of => FulfillmentMode) export class FulfillmentModeResolver { @@ -31,7 +31,7 @@ export class FulfillmentModeResolver { } @mutation(returns => Boolean) - async fulfillmentModeCreate(@arg('input') input: FulfillmentModeUpdateInput): Promise { + async fulfillmentModeCreate(@arg('input') input: FulfillmentModeCreateInput): Promise { await this.fulfillmentModeRepo.create(input); return true; } diff --git a/backend/src/graphql-resolvers/requirement.resolver.ts b/backend/src/graphql-resolvers/requirement.resolver.ts index b729550..2332c7e 100644 --- a/backend/src/graphql-resolvers/requirement.resolver.ts +++ b/backend/src/graphql-resolvers/requirement.resolver.ts @@ -3,7 +3,7 @@ import { FulfillmentModeRepository, RequirementRepository, UserRepository } from import { arg, ID, Int, mutation, query, resolver } from '@loopback/graphql'; import { Requirement } from '../models'; import { listResponse, ListResponse } from '../graphql-types/list'; -import { RequirementList, RequirementUpdateInput } from '../graphql-types/requirement'; +import { RequirementCreateInput, RequirementList, RequirementUpdateInput } from '../graphql-types/requirement'; @resolver(of => Requirement) export class RequirementResolver { @@ -31,7 +31,7 @@ export class RequirementResolver { } @mutation(returns => Boolean) - async requirementCreate(@arg('requirement') input: RequirementUpdateInput): Promise { + async requirementCreate(@arg('requirement') input: RequirementCreateInput): Promise { await this.requirementRepo.create(input); return true; } diff --git a/backend/src/graphql-resolvers/subject.resolver.ts b/backend/src/graphql-resolvers/subject.resolver.ts index 2e98e20..4d56f02 100644 --- a/backend/src/graphql-resolvers/subject.resolver.ts +++ b/backend/src/graphql-resolvers/subject.resolver.ts @@ -3,7 +3,7 @@ import { Subject } from '../models'; import { SubjectRepository } from '../repositories'; import { repository } from '@loopback/repository'; import { listResponse, ListResponse } from '../graphql-types/list'; -import { SubjectList, SubjectUpdateInput } from '../graphql-types/subject'; +import { SubjectCreateInput, SubjectList, SubjectUpdateInput } from '../graphql-types/subject'; @resolver(of => Subject) export class SubjectResolver { @@ -27,7 +27,7 @@ export class SubjectResolver { } @mutation(returns => Boolean) - async subjectCreate(@arg('subject') input: SubjectUpdateInput): Promise { + async subjectCreate(@arg('subject') input: SubjectCreateInput): Promise { await this.subjectRepo.create(input); return true; } diff --git a/backend/src/graphql-types/course.ts b/backend/src/graphql-types/course.ts index 995d411..c1d4573 100644 --- a/backend/src/graphql-types/course.ts +++ b/backend/src/graphql-types/course.ts @@ -12,9 +12,7 @@ export class CourseList implements ListResponse { } @inputType() -export class CourseUpdateInput implements Pick, 'id' | 'semester' | 'alias' | 'subjectId'> { - @field(returns => ID) - id: number; +export class CourseCreateInput implements Pick, 'semester' | 'alias' | 'subjectId'> { @field() semester?: string; @field() @@ -22,3 +20,9 @@ export class CourseUpdateInput implements Pick, 'id' | 'semes @field() subjectId?: number; } + +@inputType() +export class CourseUpdateInput extends CourseCreateInput { + @field(returns => ID) + id: number; +} diff --git a/backend/src/graphql-types/fulfillment-mode.ts b/backend/src/graphql-types/fulfillment-mode.ts index 5c433cd..8ac01e9 100644 --- a/backend/src/graphql-types/fulfillment-mode.ts +++ b/backend/src/graphql-types/fulfillment-mode.ts @@ -1,6 +1,6 @@ import { ListResponse } from './list'; import { FulfillmentMode } from '../models'; -import { field, inputType, Int, objectType } from '@loopback/graphql'; +import { field, ID, inputType, Int, objectType } from '@loopback/graphql'; import { DataObject } from '@loopback/repository'; @objectType() @@ -12,9 +12,7 @@ export class FulfillmentModeList implements ListResponse { } @inputType() -export class FulfillmentModeUpdateInput implements Omit, 'requirements' | 'courseId'> { - @field(returns => Int) - id: number; +export class FulfillmentModeCreateInput implements Omit, 'requirements' | 'courseId'> { @field() name: string; @field() @@ -25,4 +23,12 @@ export class FulfillmentModeUpdateInput implements Omit ID) + courseId: number; +} + +@inputType() +export class FulfillmentModeUpdateInput extends FulfillmentModeCreateInput { + @field(returns => ID) + id: number; } diff --git a/backend/src/graphql-types/requirement.ts b/backend/src/graphql-types/requirement.ts index 736505a..896d4c9 100644 --- a/backend/src/graphql-types/requirement.ts +++ b/backend/src/graphql-types/requirement.ts @@ -12,9 +12,7 @@ export class RequirementList implements ListResponse { } @inputType() -export class RequirementUpdateInput implements Pick, 'id' | 'name' | 'description' | 'deadline' | 'minPoints' | 'maxPoints'> { - @field(returns => Int) - id: number; +export class RequirementCreateInput implements Pick, 'name' | 'description' | 'deadline' | 'minPoints' | 'maxPoints'> { @field() deadline: Date; @field() @@ -26,3 +24,9 @@ export class RequirementUpdateInput implements Pick, 'id @field() maxPoints: number; } + +@inputType() +export class RequirementUpdateInput extends RequirementCreateInput { + @field(returns => Int) + id: number; +} diff --git a/backend/src/graphql-types/subject.ts b/backend/src/graphql-types/subject.ts index 6f350e8..cac3ef2 100644 --- a/backend/src/graphql-types/subject.ts +++ b/backend/src/graphql-types/subject.ts @@ -12,11 +12,15 @@ export class SubjectList implements ListResponse { } @inputType() -export class SubjectUpdateInput implements Pick, 'id' | 'name' | 'description'> { - @field(returns => ID) - id: number; +export class SubjectCreateInput implements Pick, 'name' | 'description'> { @field() name?: string; @field() description?: string; } + +@inputType() +export class SubjectUpdateInput extends SubjectCreateInput { + @field(returns => ID) + id: number; +} diff --git a/frontend/src/app/graphql/course.graphql b/frontend/src/app/graphql/course.graphql index 990fd4a..e2a0cc0 100644 --- a/frontend/src/app/graphql/course.graphql +++ b/frontend/src/app/graphql/course.graphql @@ -32,6 +32,6 @@ mutation EditCourse($input: CourseUpdateInput!) { courseUpdate(course: $input) } -mutation CreateCourse($input: CourseUpdateInput!) { +mutation CreateCourse($input: CourseCreateInput!) { courseCreate(course: $input) } diff --git a/frontend/src/app/graphql/fulfillment-mode.graphql b/frontend/src/app/graphql/fulfillment-mode.graphql new file mode 100644 index 0000000..bb0dd99 --- /dev/null +++ b/frontend/src/app/graphql/fulfillment-mode.graphql @@ -0,0 +1,31 @@ +query FulfillmentModeList($course: ID!, $offset: Int!, $limit: Int!) { + fulfillmentModes(course: $course, offset: $offset, limit: $limit) { + list { + id + name + threshold2 + threshold3 + threshold4 + threshold5 + } + count + } +} + +query FulfillmentMode($id: ID!) { + fulfillmentMode(id: $id) { + id + threshold2 + threshold3 + threshold4 + threshold5 + } +} + +mutation EditFulfillmentMode($input: FulfillmentModeUpdateInput!) { + fulfillmentModeUpdate(input: $input) +} + +mutation CreateFulfillmentMode($input: FulfillmentModeCreateInput!) { + fulfillmentModeCreate(input: $input) +} diff --git a/frontend/src/app/graphql/requirement.graphql b/frontend/src/app/graphql/requirement.graphql index 999aaea..4f80243 100644 --- a/frontend/src/app/graphql/requirement.graphql +++ b/frontend/src/app/graphql/requirement.graphql @@ -27,6 +27,6 @@ mutation EditRequirement($input: RequirementUpdateInput!) { requirementUpdate(requirement: $input) } -mutation CreateRequirement($input: RequirementUpdateInput!) { +mutation CreateRequirement($input: RequirementCreateInput!) { requirementCreate(requirement: $input) } diff --git a/frontend/src/app/graphql/subject.graphql b/frontend/src/app/graphql/subject.graphql index f09be05..1e6fc82 100644 --- a/frontend/src/app/graphql/subject.graphql +++ b/frontend/src/app/graphql/subject.graphql @@ -21,6 +21,6 @@ mutation EditSubject($input: SubjectUpdateInput!) { subjectUpdate(subject: $input) } -mutation CreateSubject($input: SubjectUpdateInput!) { +mutation CreateSubject($input: SubjectCreateInput!) { subjectCreate(subject: $input) } diff --git a/frontend/src/app/requirements/requirement-list/requirement-list.component.css b/frontend/src/app/requirements/requirement-list/requirement-list.component.css deleted file mode 100644 index e69de29..0000000 diff --git a/frontend/src/app/requirements/requirement-list/requirement-list.component.html b/frontend/src/app/requirements/requirement-list/requirement-list.component.html deleted file mode 100644 index fa92899..0000000 --- a/frontend/src/app/requirements/requirement-list/requirement-list.component.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/frontend/src/app/requirements/requirement-list/requirement-list.component.spec.ts b/frontend/src/app/requirements/requirement-list/requirement-list.component.spec.ts deleted file mode 100644 index 053d64f..0000000 --- a/frontend/src/app/requirements/requirement-list/requirement-list.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { RequirementListComponent } from './requirement-list.component'; - -describe('RequirementsListComponent', () => { - let component: RequirementListComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [RequirementListComponent] - }) - .compileComponents(); - }); - - beforeEach(() => { - fixture = TestBed.createComponent(RequirementListComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/frontend/src/app/requirements/requirement-list/requirement-list.component.ts b/frontend/src/app/requirements/requirement-list/requirement-list.component.ts deleted file mode 100644 index 58ad881..0000000 --- a/frontend/src/app/requirements/requirement-list/requirement-list.component.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { RequirementListGQL } from '../../services/graphql'; - -@Component({ - selector: 'app-requirement-list', - templateUrl: './requirement-list.component.html', - styleUrls: ['./requirement-list.component.css'] -}) -export class RequirementListComponent implements OnInit { - - constructor(public listGQL: RequirementListGQL) { - } - - ngOnInit(): void { - } - -} diff --git a/frontend/src/app/requirements/requirements.module.ts b/frontend/src/app/requirements/requirements.module.ts deleted file mode 100644 index 995cef1..0000000 --- a/frontend/src/app/requirements/requirements.module.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { RequirementListComponent } from './requirement-list/requirement-list.component'; -import { SharedComponentsModule } from '../shared-components/shared-components.module'; - - -@NgModule({ - declarations: [RequirementListComponent], - imports: [ - CommonModule, - SharedComponentsModule - ] -}) -export class RequirementsModule { -} diff --git a/frontend/src/app/shared-components/edit/edit.component.ts b/frontend/src/app/shared-components/edit/edit.component.ts index 0f8733f..4cb33ed 100644 --- a/frontend/src/app/shared-components/edit/edit.component.ts +++ b/frontend/src/app/shared-components/edit/edit.component.ts @@ -10,7 +10,8 @@ import { HasID, MutationInput, QueryResult } from '../../utility/types'; templateUrl: './edit.component.html', styleUrls: ['./edit.component.css'] }) -export class EditComponent, UT extends QueryResult, CT extends QueryResult, MI extends Partial> +export class EditComponent, UT extends QueryResult, CT extends QueryResult, + MIC extends Partial, MIU extends Partial> implements OnInit { item?: T; @@ -18,14 +19,16 @@ export class EditComponent, UT extend isLoading = true; @Input() gql: Query; - @Input() updateMutation: Mutation>; - @Input() createMutation: Mutation>; + @Input() updateMutation: Mutation>; + @Input() createMutation: Mutation>; @Input() fields: { title: string, name: keyof T, readonly?: (item: T) => boolean }[]; @Input() itemType: T; /** * Beküldés előtt extra adat hozzáadása */ @Input() beforeSubmit: (item: T) => Partial; + @Input() customItem: T; + @Input() itemSubmitted: (item: T) => void = this.navigateAfterSubmit; formGroup: FormGroup; private key: string; @@ -37,8 +40,9 @@ export class EditComponent, UT extend async ngOnInit(): Promise { window.localStorage.removeItem(this.router.url); const url = this.route.snapshot.url; - this.id = this.route.snapshot.url[this.route.snapshot.url.length - 1] + ''; - if (!this.item && url[url.length - 1].path !== 'new') { + this.item = this.customItem; + this.id = this.item?.id ?? this.gql ? url[url.length - 1].path : 'new'; + if (!this.item && this.id !== 'new' && this.gql) { const data = (await this.gql.fetch({id: this.id}).toPromise()).data; this.key = Object.keys(data).filter(k => k !== '__typename')[0]; this.item = data[this.key]; @@ -66,20 +70,23 @@ export class EditComponent, UT extend async submit(): Promise { this.isLoading = true; - const input = Object.assign({}, this.formGroup.value, (this.beforeSubmit ?? noop)(this.item) ?? {}, {id: this.id}) as MI; + const input = Object.assign({}, this.formGroup.value, (this.beforeSubmit ?? noop)(this.formGroup.value) ?? {}, this.id === 'new' ? {} : {id: this.id}); try { if (this.item && !this.creating) { await this.updateMutation.mutate({input}).toPromise(); } else { await this.createMutation.mutate({input}).toPromise(); } - await this.router.navigate(['..'], {relativeTo: this.route}); + this.itemSubmitted(this.item); } catch (e) { - alert(e.message); } // TODO: Clear/update cache this.isLoading = false; } + async navigateAfterSubmit(item: T): Promise { + await this.router.navigate(['..'], {relativeTo: this.route}); + } + getType(itemElement: any): typeof itemElement { return typeof itemElement; } diff --git a/frontend/src/app/shared-components/list/list.component.html b/frontend/src/app/shared-components/list/list.component.html index 625c728..71b86af 100644 --- a/frontend/src/app/shared-components/list/list.component.html +++ b/frontend/src/app/shared-components/list/list.component.html @@ -1,7 +1,7 @@
- +
diff --git a/frontend/src/app/shared-components/list/list.component.ts b/frontend/src/app/shared-components/list/list.component.ts index 1a2f5d2..305a7ba 100644 --- a/frontend/src/app/shared-components/list/list.component.ts +++ b/frontend/src/app/shared-components/list/list.component.ts @@ -20,6 +20,8 @@ export class ListComponent void }[] = []; @Input() allowEditing = true; + @Input() editFunction = this.editItem; + @Input() createFunction = this.newItem; paginationData: PaginationData = {}; items: T[] = []; @@ -52,7 +54,6 @@ export class ListComponent { - window.localStorage.setItem(this.router.url + '/' + item.id, JSON.stringify(item)); // TODO: Apollo cache await this.router.navigate([this.router.url, item.id]); } diff --git a/frontend/src/app/subjects/subject-edit/courses/course-edit/course-edit.component.html b/frontend/src/app/subjects/subject-edit/courses/course-edit/course-edit.component.html index 19e95c7..39e35e6 100644 --- a/frontend/src/app/subjects/subject-edit/courses/course-edit/course-edit.component.html +++ b/frontend/src/app/subjects/subject-edit/courses/course-edit/course-edit.component.html @@ -1,4 +1,31 @@ - + + +

Teljesitési módok

+
+ + + +
+ + + {{ editedFulMode?.name || 'Új teljesitési mód' }} + + + + + diff --git a/frontend/src/app/subjects/subject-edit/courses/course-edit/course-edit.component.ts b/frontend/src/app/subjects/subject-edit/courses/course-edit/course-edit.component.ts index 2bf7f79..e179a22 100644 --- a/frontend/src/app/subjects/subject-edit/courses/course-edit/course-edit.component.ts +++ b/frontend/src/app/subjects/subject-edit/courses/course-edit/course-edit.component.ts @@ -1,7 +1,19 @@ import { Component, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { CustomTitleComponent } from '../../../../app.component'; -import { Course, CourseGQL, EditCourseGQL, SubjectGQL } from '../../../../services/graphql'; +import { + Course, + CourseGQL, + CreateCourseGQL, + CreateFulfillmentModeGQL, + EditCourseGQL, + EditFulfillmentModeGQL, + FulfillmentMode, + FulfillmentModeGQL, + FulfillmentModeListGQL, + FulfillmentModeUpdateInput, + SubjectGQL +} from '../../../../services/graphql'; @Component({ selector: 'app-course-edit', @@ -11,10 +23,17 @@ import { Course, CourseGQL, EditCourseGQL, SubjectGQL } from '../../../../servic export class CourseEditComponent implements OnInit, CustomTitleComponent { subjectId: string; itemType: Course; + courseId: string; + editedFulMode: FulfillmentMode; + editingFulMode = false; beforeSubmit = () => ({subjectId: +this.route.snapshot.params.subjectId}); - constructor(private route: ActivatedRoute, public subjectGQL: SubjectGQL, public itemGQL: CourseGQL, public editGQL: EditCourseGQL) { + constructor(private route: ActivatedRoute, public subjectGQL: SubjectGQL, + public itemGQL: CourseGQL, public editGQL: EditCourseGQL, public createGQL: CreateCourseGQL, + public modeListGQL: FulfillmentModeListGQL, public modeItemGQL: FulfillmentModeGQL, public modeEditGQL: EditFulfillmentModeGQL, + public modeCreateGQL: CreateFulfillmentModeGQL) { this.subjectId = route.snapshot.params.subjectId; + this.courseId = route.snapshot.params.id; } ngOnInit(): void { @@ -24,4 +43,34 @@ export class CourseEditComponent implements OnInit, CustomTitleComponent { return this.subjectGQL.fetch({id: this.subjectId}).toPromise().then(subject => ({subjectName: subject.data.subject.name})); } + async editFulMode(item: FulfillmentMode): Promise { + this.editedFulMode = item; + this.editingFulMode = true; + } + + async createFulMode(): Promise { + this.editedFulMode = null; + this.editingFulMode = true; + } + + beforeFulModeSubmit(item: FulfillmentMode): Partial { + function thresh(prop: keyof typeof item): void { + let val = item[prop]; + if (val < 0) { + val = 0; + } + ((item[prop]) as number) = val > 1 ? val as number / 100 : +val; + } + + thresh('threshold2'); + thresh('threshold3'); + thresh('threshold4'); + thresh('threshold5'); + return {...item, courseId: this.courseId}; + } + + submitFulMode(): void { + this.editedFulMode = null; + this.editingFulMode = false; + } } diff --git a/frontend/src/app/subjects/subject-edit/subject-edit.component.html b/frontend/src/app/subjects/subject-edit/subject-edit.component.html index a5c1341..5cea89b 100644 --- a/frontend/src/app/subjects/subject-edit/subject-edit.component.html +++ b/frontend/src/app/subjects/subject-edit/subject-edit.component.html @@ -1,4 +1,4 @@ +]" [updateMutation]="updateGQL" [createMutation]="createGQL"> diff --git a/frontend/src/app/subjects/subject-edit/subject-edit.component.ts b/frontend/src/app/subjects/subject-edit/subject-edit.component.ts index 4cd8402..9857df1 100644 --- a/frontend/src/app/subjects/subject-edit/subject-edit.component.ts +++ b/frontend/src/app/subjects/subject-edit/subject-edit.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from '@angular/core'; -import { EditSubjectGQL, Subject, SubjectGQL } from '../../services/graphql'; +import { CreateSubjectGQL, EditSubjectGQL, Subject, SubjectGQL } from '../../services/graphql'; @Component({ selector: 'app-subject-edit', @@ -9,7 +9,7 @@ import { EditSubjectGQL, Subject, SubjectGQL } from '../../services/graphql'; export class SubjectEditComponent implements OnInit { itemType: Subject; - constructor(public itemGQL: SubjectGQL, public updateGQL: EditSubjectGQL) { + constructor(public itemGQL: SubjectGQL, public updateGQL: EditSubjectGQL, public createGQL: CreateSubjectGQL) { } ngOnInit(): void { diff --git a/frontend/src/app/subjects/subject-list/subject-list.component.html b/frontend/src/app/subjects/subject-list/subject-list.component.html index 81dfa54..8f16c5e 100644 --- a/frontend/src/app/subjects/subject-list/subject-list.component.html +++ b/frontend/src/app/subjects/subject-list/subject-list.component.html @@ -4,3 +4,4 @@ ]" [customActions]="[ {icon: 'chevron_right', label: 'Kurzusok', action: listCourses} ]"> + diff --git a/frontend/src/app/subjects/subjects.module.ts b/frontend/src/app/subjects/subjects.module.ts index 4bd1333..01ce0a7 100644 --- a/frontend/src/app/subjects/subjects.module.ts +++ b/frontend/src/app/subjects/subjects.module.ts @@ -7,6 +7,10 @@ import { RouterModule, Routes } from '@angular/router'; import { RouteData } from '../app-routing.module'; import { CourseListComponent } from './subject-edit/courses/course-list/course-list.component'; import { CourseEditComponent } from './subject-edit/courses/course-edit/course-edit.component'; +import { MatCardModule } from '@angular/material/card'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatInputModule } from '@angular/material/input'; +import { ReactiveFormsModule } from '@angular/forms'; const routes: Routes = [ {path: '', component: SubjectListComponent, data: {title: ''} as RouteData}, @@ -24,7 +28,11 @@ const routes: Routes = [ imports: [ CommonModule, SharedComponentsModule, - RouterModule.forChild(routes) + RouterModule.forChild(routes), + MatCardModule, + MatFormFieldModule, + MatInputModule, + ReactiveFormsModule ] }) export class SubjectsModule {