From e120b5b1df0fdfb6a289eff8985dab4011612a24 Mon Sep 17 00:00:00 2001 From: BenjaVR Date: Tue, 8 Jan 2019 20:34:58 +0100 Subject: [PATCH] Do not submit id while updating modal - Also added more error catching and id validations --- .../educations/EducationsFormModal.tsx | 1 - .../components/educations/EducationsPage.tsx | 12 ++++---- .../layouts/AuthenticatedLayout.module.scss | 8 +++++ .../layouts/AuthenticatedLayout.tsx | 2 +- web/src/components/schools/SchoolsPage.tsx | 12 ++++---- web/src/models/Education.ts | 1 - web/src/services/FirestoreServiceBase.ts | 30 ++++++++++++++++--- 7 files changed, 47 insertions(+), 19 deletions(-) diff --git a/web/src/components/educations/EducationsFormModal.tsx b/web/src/components/educations/EducationsFormModal.tsx index 692c060..cbdf9f7 100644 --- a/web/src/components/educations/EducationsFormModal.tsx +++ b/web/src/components/educations/EducationsFormModal.tsx @@ -114,5 +114,4 @@ class EducationFormModal extends React.Component()(EducationFormModal); - export default WrappedEducationFormModal; diff --git a/web/src/components/educations/EducationsPage.tsx b/web/src/components/educations/EducationsPage.tsx index 40979d8..8a463ae 100644 --- a/web/src/components/educations/EducationsPage.tsx +++ b/web/src/components/educations/EducationsPage.tsx @@ -114,11 +114,11 @@ export default class EducationsPage extends React.Component { + .catch((error) => { notification.error({ message: "Kon opleiding niet toevoegen", }); - reject(); + reject(error); }); }); } @@ -133,11 +133,11 @@ export default class EducationsPage extends React.Component { + .catch((error) => { notification.error({ message: "Kon opleiding niet bewerken", }); - reject(); + reject(error); }); }); } @@ -151,11 +151,11 @@ export default class EducationsPage extends React.Component { + .catch((error) => { notification.error({ message: `Kon opleiding "${education.name}" niet verwijderen, probeer later opnieuw`, }); - reject(); + reject(error); }); }); } diff --git a/web/src/components/layouts/AuthenticatedLayout.module.scss b/web/src/components/layouts/AuthenticatedLayout.module.scss index a8a9409..da44140 100644 --- a/web/src/components/layouts/AuthenticatedLayout.module.scss +++ b/web/src/components/layouts/AuthenticatedLayout.module.scss @@ -31,6 +31,10 @@ padding: 0 25px !important; } +.titlColumn { + max-width: 50%; +} + .title { overflow: hidden; white-space: nowrap; @@ -61,4 +65,8 @@ .avatar { margin: 4px !important; + + &:hover { + cursor: default; // Should be removed when using the avatar to go to profile settings or something like that. + } } diff --git a/web/src/components/layouts/AuthenticatedLayout.tsx b/web/src/components/layouts/AuthenticatedLayout.tsx index 5c16c4b..284d1bf 100644 --- a/web/src/components/layouts/AuthenticatedLayout.tsx +++ b/web/src/components/layouts/AuthenticatedLayout.tsx @@ -79,7 +79,7 @@ class AuthenticatedLayout extends React.Component - +

{this.state.activeMenuItem.route.title}

diff --git a/web/src/components/schools/SchoolsPage.tsx b/web/src/components/schools/SchoolsPage.tsx index d6fe014..d7c2017 100644 --- a/web/src/components/schools/SchoolsPage.tsx +++ b/web/src/components/schools/SchoolsPage.tsx @@ -114,11 +114,11 @@ export default class SchoolsPage extends React.Component { + .catch((error) => { notification.error({ message: "Kon school niet toevoegen", }); - reject(); + reject(error); }); }); } @@ -133,11 +133,11 @@ export default class SchoolsPage extends React.Component { + .catch((error) => { notification.error({ message: "Kon school niet bewerken", }); - reject(); + reject(error); }); }); } @@ -151,11 +151,11 @@ export default class SchoolsPage extends React.Component { + .catch((error) => { notification.error({ message: `Kon school "${school.name}" niet verwijderen, probeer later opnieuw`, }); - reject(); + reject(error); }); }); } diff --git a/web/src/models/Education.ts b/web/src/models/Education.ts index e1d1065..71bfb26 100644 --- a/web/src/models/Education.ts +++ b/web/src/models/Education.ts @@ -2,5 +2,4 @@ import { IFirebaseModel } from "../services/FirestoreServiceBase"; export interface IEducation extends IFirebaseModel { name: string; - enabled: boolean; } diff --git a/web/src/services/FirestoreServiceBase.ts b/web/src/services/FirestoreServiceBase.ts index 33bd26a..6f2b7ec 100644 --- a/web/src/services/FirestoreServiceBase.ts +++ b/web/src/services/FirestoreServiceBase.ts @@ -25,6 +25,10 @@ export abstract class FirestoreServiceBase { public add(obj: T): Promise { return new Promise((resolve, reject): void => { + if (obj.id !== undefined) { + reject("Cannot add a object which already has an id!"); + } + const now = Firebase.firestore.Timestamp.now(); obj.createdTimestamp = now; obj.updatedTimestamp = now; @@ -36,7 +40,10 @@ export abstract class FirestoreServiceBase { .then((doc) => { resolve(this.mapDocToObject(doc)); }) - .catch(reject); + .catch((error) => { + catchErrorDev(error); + reject(error); + }); }); } @@ -46,11 +53,16 @@ export abstract class FirestoreServiceBase { reject("Id is undefined"); } + const id = obj.id; + delete obj.id; obj.updatedTimestamp = Firebase.firestore.Timestamp.now(); - this.collectionRef.doc(obj.id).update(obj) + this.collectionRef.doc(id).update(obj) .then(() => resolve()) - .catch(reject); + .catch((error) => { + catchErrorDev(error); + reject(error); + }); }); } @@ -62,7 +74,10 @@ export abstract class FirestoreServiceBase { this.collectionRef.doc(obj.id).delete() .then(resolve) - .catch(reject); + .catch((error) => { + catchErrorDev(error); + reject(error); + }); }); } @@ -78,3 +93,10 @@ export abstract class FirestoreServiceBase { return obj as T; } } + +function catchErrorDev(error: any): void { + if (process.env.NODE_ENV === "development") { + // tslint:disable-next-line:no-console + console.log(error); + } +}