Skip to content

Commit

Permalink
Merge pull request #253 from cabcookie:add-a-note-to-payer-accounts
Browse files Browse the repository at this point in the history
feat: add AWS Payer ID erhält ein zusätzliches Notizfelda note to an AWS Payer ID
  • Loading branch information
cabcookie authored Nov 27, 2024
2 parents 6e4fa48 + cf807e8 commit 2ae9f9d
Show file tree
Hide file tree
Showing 6 changed files with 74 additions and 12 deletions.
1 change: 1 addition & 0 deletions amplify/data/account-schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ const accountSchema = {
isViaReseller: a.boolean(),
resellerId: a.id(),
reseller: a.belongsTo("Account", "resellerId"),
notes: a.string(),
mainContactId: a.id(),
mainContact: a.belongsTo("Person", "mainContactId"),
financials: a.hasMany("PayerAccountMrr", "awsAccountNumber"),
Expand Down
18 changes: 18 additions & 0 deletions api/usePayer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ const selectionSet = [
"accounts.accountId",
"resellerId",
"mainContactId",
"notes",
] as const;

export type Payer = {
Expand All @@ -27,19 +28,22 @@ export type Payer = {
resellerId?: string;
accountIds: string[];
mainContactId?: string;
notes: string;
};

const mapPayer = ({
awsAccountNumber,
accounts,
resellerId,
mainContactId,
notes,
}: PayerData): Payer => ({
accountNumber: awsAccountNumber,
isReseller: !!resellerId,
resellerId: resellerId ?? undefined,
accountIds: map(({ accountId }) => accountId)(accounts) ?? [],
mainContactId: mainContactId ?? undefined,
notes: notes ?? "",
});

const fetchPayer = (payerId?: string) => async () => {
Expand Down Expand Up @@ -109,13 +113,27 @@ const usePayer = (payerId?: string) => {
return data;
};

const updateNotes = async (notes: string) => {
if (!payer) return;
const updatedPayer = { ...payer, notes } as Payer;
mutate(updatedPayer, false);
const { data, errors } = await client.models.PayerAccount.update({
awsAccountNumber: payer.accountNumber,
notes,
});
if (errors) handleApiErrors(errors, "Updating notes failed");
mutate(updatedPayer);
return data;
};

return {
payer,
isLoading,
error,
createPayerAccountLink,
deletePayerAccount,
attachReseller,
updateNotes,
};
};

Expand Down
9 changes: 8 additions & 1 deletion components/payers/details.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,33 @@ import { FC } from "react";
import AccountSelector from "../ui-elements/selectors/account-selector";
import PayerAccounts from "./accounts";
import PayerFinancials from "./financials";
import NotesInput from "./notes-input";
import PayerReseller from "./reseller";

type PayerDetailsProps = {
showLinkedAccounts?: boolean;
showFinancials?: boolean;
showNotes?: boolean;
showReseller?: boolean;
payerId: string | undefined;
};

const PayerDetails: FC<PayerDetailsProps> = ({
payerId,
showNotes,
showFinancials = true,
showLinkedAccounts = true,
showReseller = true,
}) => {
const { attachReseller } = usePayer(payerId);
const { attachReseller, payer, updateNotes } = usePayer(payerId);

return (
payerId && (
<Accordion type="single" collapsible className="w-full">
{showNotes && (
<NotesInput payer={payer} onChange={updateNotes} className="" />
)}

<div className="mt-2">
<AccountSelector
value=""
Expand Down
38 changes: 38 additions & 0 deletions components/payers/notes-input.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import { Payer } from "@/api/usePayer";
import { cn } from "@/lib/utils";
import { FC, useEffect, useState } from "react";
import { Button } from "../ui/button";
import { Input } from "../ui/input";

type NotesInputProps = {
payer: Payer | undefined;
onChange: (notes: string) => void;
className?: string;
};

const NotesInput: FC<NotesInputProps> = ({ payer, onChange, className }) => {
const [notes, setNotes] = useState("");

useEffect(() => {
setNotes(payer?.notes ?? "");
}, [payer]);

return (
<div className={cn("space-y-1", className)}>
<Input
value={notes}
onChange={(e) => setNotes(e.target.value)}
placeholder="Add notes…"
/>
<Button
disabled={notes === (payer?.notes ?? "")}
onClick={() => onChange(notes)}
size="sm"
>
Save
</Button>
</div>
);
};

export default NotesInput;
18 changes: 8 additions & 10 deletions docs/releases/next.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,16 @@
# Verarbeiten der Inbox optimieren (Version :VERSION)
# AWS Payer ID erhält ein zusätzliches Notizfeld (Version :VERSION)

- Die Inbox zeigt jetzt immer nur den ersten offenen Eintrag an, so dass die Inbox ganz konzentriert bearbeitet werden kann.
- Neue Inbox Einträge können nun mit Cmd+Enter gespeichert werden.
- Der Workflow für Inbox-Einträge ist vollständig überarbeitet und insgesamt schlüssiger und schneller. Die getroffene Entscheidung wird ausschließlich am Ende gespeichert und nicht mehr zwischendurch.
- Inbox-Einträge können nun auch als Gelerntes über Personen gespeichert werden.
- In der Wochenplanung ist nun eine kleine Checkliste eingeführt. Zunächst werden offene Inbox-Einträge verarbeitet, dann aktuelle Umsätze und Projekte der Kunden geladen und schließlich – wie zuvor auch – die Projekte überprüft.

## Kleinere Verbesserungen

- Im Dialog zum Erstellen neuer Aufgaben muss nun nicht mehr der Speichern-Button gedrückt werden; es kann nun auch mit der Tastenkombination Cmd+Enter gespeichert werden.
Damit können Bemerkungen für einen Account hinterlassen werden.

## In Arbeit

## Geplant

### Meetings

- In einem Meeting möchte ich zu einer Person schnell etwas Gelerntes erfassen können, ein Gebetsanliegen, eine Geschenkidee, die aktuelle Jobposition oder ein Kontaktdetail (z.B. Email, Telefon).
- In einem Meeting möchte ich zu jedem Teilnehmer schnell die letzten "Learnings" einsehen können sowie offene Gebetsanliegen oder den Geburtstag, so dass ich das in dem Meeting einfließen lassen oder nutzen kann.

### Account Details

- Bei Accounts sollten auch Projekte auftauchen, bei denen der Account als Partner engagiert ist; das gleiche gilt auch für die Notizen.
Expand All @@ -38,6 +35,7 @@
- In Wochenplanung persönliche Termine mit berücksichtigen (Geburtstage, Jahrestage).
- Ich möchte einfache Todos haben, die keinem Projekt zugeordnet sind.
- Eine Checkliste einführen für das tägliche Planen.
- Option anbieten, um verwaiste Aufgaben zu löschen.

### Projekte

Expand Down
2 changes: 1 addition & 1 deletion pages/payers/[id].tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ const ProjectDetailPage = () => {
resellerId={payer?.resellerId}
/>

<PayerDetails payerId={payerId} showLinkedAccounts />
<PayerDetails payerId={payerId} showLinkedAccounts showNotes />
</MainLayout>
);
};
Expand Down

0 comments on commit 2ae9f9d

Please sign in to comment.