From 4d36ec8d0276fb20dc801bb167a8a9e2cfb1f9b4 Mon Sep 17 00:00:00 2001 From: Bram Kreulen Date: Mon, 18 Nov 2024 22:11:39 +0100 Subject: [PATCH 1/5] better graph row + SimpleModal + bugfixes --- src/lib/components/ListRow.svelte | 35 ----- .../scripts/controllers/CourseController.ts | 4 +- .../scripts/controllers/DomainController.ts | 1 - .../scripts/controllers/LectureController.ts | 1 - src/lib/scripts/modals.ts | 35 ++++- .../course/[course]/overview/GraphCard.svelte | 4 +- .../course/[course]/overview/GraphRow.svelte | 132 ++++++++++-------- .../course/[course]/overview/LinkRow.svelte | 25 ++-- .../course/[course]/overview/LinkURL.svelte | 4 +- .../[course]/settings/GeneralCard.svelte | 23 ++- .../[course]/settings/MemberCard.svelte | 10 +- .../[course]/settings/ProgramCard.svelte | 6 +- .../[course]/settings/ProgramRow.svelte | 64 ++++++--- .../graph/[graph]/editor/DomainHeader.svelte | 4 +- .../app/graph/[graph]/editor/DomainRow.svelte | 29 ++-- .../app/graph/[graph]/editor/DomainTab.svelte | 4 +- .../graph/[graph]/editor/LectureHeader.svelte | 4 +- .../graph/[graph]/editor/LectureRow.svelte | 37 +++-- .../graph/[graph]/editor/LectureTab.svelte | 4 +- .../graph/[graph]/editor/RelationRow.svelte | 29 ++-- .../graph/[graph]/editor/SubjectHeader.svelte | 4 +- .../graph/[graph]/editor/SubjectRow.svelte | 29 ++-- .../graph/[graph]/editor/SubjectTab.svelte | 4 +- src/routes/app/home/+page.svelte | 8 +- .../[program]/settings/CourseRow.svelte | 70 ++++++---- .../[program]/settings/CoursesCard.svelte | 10 +- .../[program]/settings/MemberCard.svelte | 8 +- 27 files changed, 361 insertions(+), 227 deletions(-) delete mode 100644 src/lib/components/ListRow.svelte diff --git a/src/lib/components/ListRow.svelte b/src/lib/components/ListRow.svelte deleted file mode 100644 index 364399df..00000000 --- a/src/lib/components/ListRow.svelte +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/src/lib/scripts/controllers/CourseController.ts b/src/lib/scripts/controllers/CourseController.ts index 11870127..beefd444 100644 --- a/src/lib/scripts/controllers/CourseController.ts +++ b/src/lib/scripts/controllers/CourseController.ts @@ -526,8 +526,8 @@ class CourseController { const course = CourseController.revive(cache, data) if (program !== undefined) { - course.assignToProgram(program) - } + program.assignCourse(course, false) + } return course } diff --git a/src/lib/scripts/controllers/DomainController.ts b/src/lib/scripts/controllers/DomainController.ts index 6ca4d162..66160aa4 100644 --- a/src/lib/scripts/controllers/DomainController.ts +++ b/src/lib/scripts/controllers/DomainController.ts @@ -64,7 +64,6 @@ class DomainController extends NodeController { set order(value: number) { this._order = value - this._unchanged = false this._unsaved = true } diff --git a/src/lib/scripts/controllers/LectureController.ts b/src/lib/scripts/controllers/LectureController.ts index c1173091..4149e4d1 100644 --- a/src/lib/scripts/controllers/LectureController.ts +++ b/src/lib/scripts/controllers/LectureController.ts @@ -75,7 +75,6 @@ class LectureController { set order(value: number) { this._order = value - this._unchanged = false this._unsaved = true } diff --git a/src/lib/scripts/modals.ts b/src/lib/scripts/modals.ts index 69cfc095..12f3d4a3 100644 --- a/src/lib/scripts/modals.ts +++ b/src/lib/scripts/modals.ts @@ -2,15 +2,42 @@ // External imports import type Modal from '$components/Modal.svelte' +// Internal imports +import { Validation, Severity } from './validation' + // --------------------> Classes +export abstract class SimpleModal { + disabled: boolean = false + modal?: Modal + + show() { + this.modal?.show() + } + + hide() { + this.modal?.hide() + this.disabled = false + } + + abstract submit(): Promise +} export abstract class FormModal { private defaults: { [key: string]: any } = {} private changed: { [key: string]: boolean } = {} + private _disabled: boolean = false private _modal?: Modal + get disabled() { + return this._disabled || this.validate().severity === Severity.error + } + + set disabled(disabled: boolean) { + this._disabled = disabled + } + get modal() { return this._modal } @@ -30,6 +57,7 @@ export abstract class FormModal { } protected reset() { + this.disabled = false for (const property in this) { if (this.isField(property)) { this[property] = this.defaults[property] @@ -54,7 +82,10 @@ export abstract class FormModal { } private isField(property: string): boolean { - return property !== '_modal' && property !== 'modal' && property !== 'defaults' && property !== 'changed' + return property !== '_modal' && property !== 'modal' + && property !== '_disabled' && property !== 'disabled' + && property !== 'defaults' + && property !== 'changed' } show() { @@ -64,4 +95,6 @@ export abstract class FormModal { hide() { this.modal?.hide() } + + abstract validate(): Validation } \ No newline at end of file diff --git a/src/routes/app/course/[course]/overview/GraphCard.svelte b/src/routes/app/course/[course]/overview/GraphCard.svelte index 42124d13..4172ecb5 100644 --- a/src/routes/app/course/[course]/overview/GraphCard.svelte +++ b/src/routes/app/course/[course]/overview/GraphCard.svelte @@ -71,6 +71,8 @@ } // Create graph + this.disabled = true + graph_modal = graph_modal // Trigger reactivity await GraphController.create($course.cache, $course, this.trimmed_name) $course = $course // Trigger reactivity graph_modal.hide() @@ -94,7 +96,7 @@