From 10dfe804ed47a05b398afb595d750f869c18ad11 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Thu, 25 Apr 2024 06:51:58 +0000 Subject: [PATCH 1/3] chore(release): v --- docs/releases/v1.3.0.md | 31 +++++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 docs/releases/v1.3.0.md diff --git a/docs/releases/v1.3.0.md b/docs/releases/v1.3.0.md new file mode 100644 index 000000000..c479c963f --- /dev/null +++ b/docs/releases/v1.3.0.md @@ -0,0 +1,31 @@ +# Stabilität von Tagesplänen und Projekten erhöhen (Version 1.3.0) + +## Neue Funktionen und Änderungen + +Datensätze in der Datenbank wurden bisher mit einer ID erzeugt. Hier ein Beispiel: + +```typescript +const newDayPlan: DayPlan = { + id: crypto.randomUUID(), + day, + dayGoal, + done: false, +}; +const { data, errors } = await client.models.DayPlan.create({ + ...newDayPlan, + context, +}); +``` + +Das führte zu Fehlern und haben wir gefixt. + +Wir haben die Amplify Packages auf die neueste Version aktualisiert und mussten das Datenschema entsprechend aktualisieren. + +- `"@aws-amplify/backend": "^0.13.0"` +- `"@aws-amplify/backend-cli": "^0.12.0"` + +Beim Laden der Tagespläne laden wir die Aufgaben gleich mit. Dadurch sparen wir uns einige der API Aufrufe und die Anwendung wird performanter. Außerdem versuchen wir Aufgaben in der neuen Tabelle `DayPlanTodo` zu konsolidieren. Wir bieten dem Anwender dafür an, bestehende Aufgaben in `DayPlanTodo` zu migrieren. + +Die Projekte laden wir nun über einen Kontext, der der ganzen Anwendung zur Verfügung steht. Dadurch reduzieren wir API Aufrufe und Ladezeiten. + +In der Projektdetailansicht sortieren wir die Aktivitäten nun schon beim Abruf aus der Datenbank nach dem Datum absteigend. Wir können dort nun auch die eigenen nächsten Aktivitäten festhalten als auch die anderer. Wenn in einem Meeting ein Projekt selektiert wird, sind sofort auch die zuletzt vereinbarten Aktivitäten sichtbar. diff --git a/package.json b/package.json index a3ab9d01e..f9be0953f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "personal-crm", - "version": "1.2.1", + "version": "1.3.0", "private": true, "scripts": { "dev": "next dev", From ba93503e45df6e9075e4ccd37be1cf5490f1fd6d Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sat, 27 Apr 2024 10:43:13 +0000 Subject: [PATCH 2/3] chore(release): v1.4.0 --- docs/releases/v1.4.0.md | 30 ++++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 docs/releases/v1.4.0.md diff --git a/docs/releases/v1.4.0.md b/docs/releases/v1.4.0.md new file mode 100644 index 000000000..cddbf173e --- /dev/null +++ b/docs/releases/v1.4.0.md @@ -0,0 +1,30 @@ +# Projektdetails anzeigen (Version 1.4.0) + +## Neue Funktionen und Änderungen + +### Projektdetails + +Zusätzliche Projektdetails wie das Fälligkeitsdatum und bis wann es stummgeschaltet ist, werden jetzt angezeigt und sind editierbar. +Ein Projekt kann jetzt auch erledigt werden und ist anschließend nicht mehr auswählbar. Für weitere 90 Tage wird das Projekt noch angezeigt. Taucht der Projektname in Aktivitäten oder Meetings auf, wird angezeigt, wenn das Projekt als erledigt markiert ist. +Außerdem können Projekten nun Accounts zugeordnet werden. + +### Listenansichten und Detailansichten + +Ist implementiert für Accounts und Projekte. + +### Verantwortung für Accounts + +Tabelle angelegt, in der der Zeitraum gespeichert werden kann, wann ich für einen bestimmten Account verantwortlich gewesen bin. +Die Funktion ist auf der Oberfläche noch nicht implementiert. + +### Wichtigkeit der Accounts + +In der Tabelle `Account` gibt es ein Feld `Order`. Damit soll die Wichtigkeit eines Accounts definiert werden. Die Funktion ist an der Oberfläche noch nicht implementiert. + +### Kleinere Änderungen + +Habe eine Umgebungsvariable `NEXT_PUBLIC_ALLOW_FAKE_DATA_CREATION` eingeführt. Außerhalb der Produktionsumgebung soll damit an verschiedenen Stellen ein Button zur Erstellung von Dummy-Daten angeboten werden. Damit sollen potentiell leere Umgebungen schnell mit Daten befüllt werden können, um das Testen zu erleichtern. Im Moment ist die Funktion selbst noch nicht implementiert. + +Accounts werden jetzt über einen React Context geladen. Das wirkt sich positiv auf die Stabilität und Performance der Applikation aus. + +`ReactDatePicker` wird nun durchgehend für die Auswahl eines Datums und einer Uhrzeit verwendet. diff --git a/package.json b/package.json index 2f24428df..b2fd8c69a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "personal-crm", - "version": "1.3.0", + "version": "1.4.0", "private": true, "scripts": { "dev": "next dev", From 9842637be192305b7caf925abf8f2783bbe752bd Mon Sep 17 00:00:00 2001 From: Carsten Koch Date: Mon, 29 Apr 2024 19:18:32 +0200 Subject: [PATCH 3/3] fix: load all meeting --- api/ContextProjects.tsx | 2 +- api/useMeetings.ts | 35 +++++++++++++++++++++++++++++------ 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/api/ContextProjects.tsx b/api/ContextProjects.tsx index 4858036e1..d0f176449 100644 --- a/api/ContextProjects.tsx +++ b/api/ContextProjects.tsx @@ -53,7 +53,7 @@ export type Project = { onHoldTill?: Date; myNextActions: string; othersNextActions: string; - context?: Context; + context: Context; accountIds: string[]; activityIds: string[]; }; diff --git a/api/useMeetings.ts b/api/useMeetings.ts index 4e6f72ac7..2e5819007 100644 --- a/api/useMeetings.ts +++ b/api/useMeetings.ts @@ -54,15 +54,24 @@ export const mapMeeting: (data: MeetingData) => Meeting = ({ .map(({ id }) => id), }); -const fetchMeetings = (page: number, context?: Context) => async () => { +type FetchMeetingsWithTokenFunction = (props: { + page: number; + token?: string; + context: Context; +}) => Promise; + +const fetchMeetingsWithToken: FetchMeetingsWithTokenFunction = async ({ + page, + token, + context, +}) => { if (!context) return; const toDate = flow( addDaysToDate(-4 * (page - 1) * 7 + 1), getDayOfDate )(new Date()); const fromDate = flow(addDaysToDate(-4 * page * 7), getDayOfDate)(new Date()); - const { data, errors } = await client.models.Meeting.list({ - filter: { + const filter = { and: [ { or: [ @@ -93,12 +102,26 @@ const fetchMeetings = (page: number, context?: Context) => async () => { ], }, ], - }, + }; + + const { data, errors, nextToken } = await client.models.Meeting.list({ + filter, selectionSet: meetingSelectionSet, + nextToken: token, }); if (errors) throw errors; - return data - .map(mapMeeting) + if (!nextToken) return data; + return [ + ...data, + ...((await fetchMeetingsWithToken({ page, token: nextToken, context })) || + []), + ]; +}; + +const fetchMeetings = (page: number, context?: Context) => async () => { + if (!context) return; + return (await fetchMeetingsWithToken({ page, context })) + ?.map(mapMeeting) .sort((a, b) => b.meetingOn.getTime() - a.meetingOn.getTime()); };