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()); }; 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/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 e28894d5a..b2fd8c69a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "personal-crm", - "version": "1.2.1", + "version": "1.4.0", "private": true, "scripts": { "dev": "next dev",