Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | 137x 11x 11x 137x 11x 11x 11x 3x 3x 5x 11x 11x 11x 5x 11x 11x 11x 11x 3x 4x | import type { TRPCMutationInput, TRPCMutationOutput } from "~app/trpc";
import type { Debt } from "~app/trpc-types";
import { round } from "~utils/math";
import { update as updateDebts } from "../cache/debts";
import { update as updateReceipts } from "../cache/receipts";
import type { UseContextedMutationOptions } from "../context";
type AddResult = TRPCMutationOutput<"debts.add">;
const createDebt = (
{ id, updatedAt, reverseAccepted }: AddResult,
updateObject: TRPCMutationInput<"debts.add">,
): Debt => {
const timestamp = updateObject.timestamp || Temporal.Now.plainDateISO();
return {
id,
amount: updateObject.amount,
currencyCode: updateObject.currencyCode,
peerId: updateObject.peerId,
timestamp,
note: updateObject.note,
updatedAt,
their: reverseAccepted
? {
timestamp,
amount: updateObject.amount,
currencyCode: updateObject.currencyCode,
updatedAt,
}
: undefined,
receiptId: updateObject.receiptId,
};
};
export const options: UseContextedMutationOptions<"debts.add"> = {
mutationKey: "debts.add",
onSuccess: (controllerContext) => (result, updateObject) => {
const { receiptId } = updateObject;
if (receiptId) {
updateReceipts(controllerContext, {
get: (controller) => {
controller.update(receiptId, (receipt) => ({
...receipt,
debts: {
direction: "outcoming",
debts:
receipt.debts.direction === "outcoming"
? receipt.debts.debts.some((debt) => debt.id === result.id)
? receipt.debts.debts
: [
...receipt.debts.debts,
{ id: result.id, peerId: updateObject.peerId },
]
: [{ id: result.id, peerId: updateObject.peerId }],
},
}));
},
getPaged: undefined,
});
}
updateDebts(controllerContext, {
getAll: (controller) => {
controller.update(updateObject.currencyCode, (sum) =>
round(sum + updateObject.amount),
);
},
getAllPeer: (controller) => {
controller.update(
updateObject.peerId,
updateObject.currencyCode,
(sum) => round(sum + updateObject.amount),
);
},
getPeersPaged: (controller) => {
controller.update(updateObject.peerId);
},
getByPeerPaged: (controller) =>
controller.invalidate(updateObject.peerId),
get: (controller) => {
controller.add(createDebt(result, updateObject));
},
getIntentions: undefined,
});
},
mutateToastOptions:
({ t }) =>
(variablesSet) => ({
text: t("toasts.addDebt.mutate", {
ns: "debts",
debtsAmount: variablesSet.length,
}),
}),
successToastOptions:
({ t }) =>
(resultSet) => ({
text: t("toasts.addDebt.success", {
ns: "debts",
debtsAmount: resultSet.length,
}),
}),
errorToastOptions:
({ t }) =>
(errors) => ({
text: t("toasts.addDebt.error", {
ns: "debts",
debtsAmount: errors.length,
errors,
}),
}),
};
|