diff --git a/amplify/data/project-schema.ts b/amplify/data/project-schema.ts index 73e342746..4d23865bd 100644 --- a/amplify/data/project-schema.ts +++ b/amplify/data/project-schema.ts @@ -148,6 +148,9 @@ const projectSchema = { partnerId: a.id(), partner: a.belongsTo("Account", "partnerId"), }) + .secondaryIndexes((index) => [ + index("partnerId").queryField("listByPartnerId"), + ]) .authorization((allow) => [allow.owner()]), }; diff --git a/components/activities/activity-lean.tsx b/components/activities/activity-lean.tsx new file mode 100644 index 000000000..df73640d6 --- /dev/null +++ b/components/activities/activity-lean.tsx @@ -0,0 +1,43 @@ +import PersonNoteMeeting from "@/components/people/PersonNoteMeeting"; +import PersonNoteProject from "@/components/people/PersonNoteProject"; +import NotesEditor from "@/components/ui-elements/editors/notes-editor/NotesEditor"; +import { format } from "date-fns"; +import { ExternalLink } from "lucide-react"; +import Link from "next/link"; +import { FC } from "react"; + +interface Activity { + id: string; + finishedOn: Date; + projectIds: string[]; + meetingId?: string; +} + +type LeanActivitiyProps = { + activity: Activity; + readonly?: boolean; +}; + +const LeanActivitiy: FC = ({ activity, readonly }) => { + return ( +
+
+ {format(activity.finishedOn, "PPp")} + + + +
+ +
+ {activity.projectIds.map((pId) => ( + + ))} + +
+ + +
+ ); +}; + +export default LeanActivitiy; diff --git a/components/people/PersonNoteAccount.tsx b/components/people/PersonNoteAccount.tsx index c59847db8..1db195011 100644 --- a/components/people/PersonNoteAccount.tsx +++ b/components/people/PersonNoteAccount.tsx @@ -26,7 +26,7 @@ const PersonNoteAccount: FC = ({ return ( {account?.name} diff --git a/components/people/PersonNoteMeeting.tsx b/components/people/PersonNoteMeeting.tsx index 2fbd31694..0f388c448 100644 --- a/components/people/PersonNoteMeeting.tsx +++ b/components/people/PersonNoteMeeting.tsx @@ -18,7 +18,7 @@ const PersonNoteMeeting: FC = ({ return ( meeting && (
- + Meeting: {meeting.topic} ({format(meeting.meetingOn, "PPp")})
diff --git a/components/people/PersonNotes.tsx b/components/people/PersonNotes.tsx index 18566d805..7b5ee676f 100644 --- a/components/people/PersonNotes.tsx +++ b/components/people/PersonNotes.tsx @@ -1,15 +1,10 @@ import { useProjectsContext } from "@/api/ContextProjects"; import usePersonActivities, { PersonActivity } from "@/api/usePersonActivities"; -import { format } from "date-fns"; import { flatMap, flow } from "lodash/fp"; -import { ExternalLink } from "lucide-react"; -import Link from "next/link"; import { FC } from "react"; +import LeanActivitiy from "../activities/activity-lean"; import DefaultAccordionItem from "../ui-elements/accordion/DefaultAccordionItem"; import LoadingAccordionItem from "../ui-elements/accordion/LoadingAccordionItem"; -import NotesEditor from "../ui-elements/editors/notes-editor/NotesEditor"; -import PersonNoteMeeting from "./PersonNoteMeeting"; -import PersonNoteProject from "./PersonNoteProject"; type PersonNotesProps = { personId?: string; @@ -40,23 +35,7 @@ const PersonNotes: FC = ({ showNotes, personId }) => { >
{activities?.map((a) => ( -
-
- {format(a.finishedOn, "PPp")} - - - -
- -
- {a.projectIds.map((pId) => ( - - ))} - -
- - -
+ ))}
diff --git a/docs/releases/next.md b/docs/releases/next.md index 0e6f4c0bf..319b0f86d 100644 --- a/docs/releases/next.md +++ b/docs/releases/next.md @@ -1,10 +1,11 @@ -# Notizen verlinkter Personen zeigen (Version :VERSION) +# Partnerprojekte bei Partnerdetails zeigen (Version :VERSION) -- Auf der Person-Detailseite werden auch Notizen gezeigt, in denen die Person nur erwähnt wurde. -- Die Auflistung der Notizen wurde visuell verschlankt. +- Bei Accounts tauchen auch Projekte auf, bei denen der Account als Partner engagiert ist ## In Arbeit +- das gleiche gilt auch für die Notizen. + ## Geplant ### Meetings @@ -14,7 +15,6 @@ ### Account Details -- Bei Accounts sollten auch Projekte auftauchen, bei denen der Account als Partner engagiert ist; das gleiche gilt auch für die Notizen. - Ich möchte eine Möglichkeit haben, um zu dokumentieren, was ein Kunde mit einem Partner macht und mir dazu auch schnell eine Übersicht/Matrix erstellen können. - Chart auch auf der Account-Detailseite anzeigen. Dort dann nach Payer Accounts aufgeteilt @@ -43,7 +43,6 @@ - Bei in Notizen erwähnten Personen direkt das Schreiben einer Email oder das Anrufen (auf dem Smartphone) anbieten. - Das Datum des letzten Uploads von CRM Daten anzeigen. - Die Uploads für CRM Projekte sollen ähnlich wie bei den Finanzdaten eine Historie ermöglichen. -- Eine "Lean-Ansicht" wäre toll, zum Beispiel, wenn ich Notizen zu einem Projekt sehen möchte, dann scrolle ich einfach durch die Notizen ohne erst Akkordions aufklappen zu müssen. ### Finanzdaten @@ -61,9 +60,3 @@ ### Suche - Ich möchte über alle Objekte in der App suchen können: Meetings, Projekte, Personen, Kunden, Notizen. Ich möchte, dass die Suchergebnisse relevant sind. - -## Fehler - -### Navigation - -- Die Navigation wird langsam zu lang. Da muss ich mir was überlegen. Bei recht kurzen Suchbegriffen (z.B. ECR Tag) wird die Auswahl zu wenig eingeschränkt. diff --git a/helpers/projects.ts b/helpers/projects.ts index b34e808f6..15369e0e8 100644 --- a/helpers/projects.ts +++ b/helpers/projects.ts @@ -125,18 +125,18 @@ const searchTextInProjectName = ( const filterByProjectStatus = ({ accountId, projectFilter }: FilterProjectsProps) => - ({ accountIds, done, onHoldTill }: Project) => + ({ accountIds, done, onHoldTill, partnerId }: Project) => accountId - ? accountIds.includes(accountId) && !done + ? (accountIds.includes(accountId) || partnerId === accountId) && !done : (projectFilter === "WIP" && !done && !onHoldTill) || (projectFilter === "On Hold" && !done && !!onHoldTill) || (projectFilter === "Done" && done); const filterBySearch = ({ accountId, searchText }: FilterProjectsProps) => - ({ accountIds, done, project }: Project) => + ({ accountIds, done, project, partnerId }: Project) => accountId - ? accountIds.includes(accountId) && + ? (accountIds.includes(accountId) || partnerId === accountId) && searchTextInProjectName(project, searchText) && !done : searchTextInProjectName(project, searchText) && !done;