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 113 114 115 116 117 118 119 120 121 122 123 | 51x 5x 5x 5x 5x 2x 1x 5x 3x 3x 3x 3x 3x 3x 3x 3x 5x 3x 2x | import type { Debt } from "~app/trpc-types";
import { round } from "~utils/math";
import {
update as updateDebts,
updateRevert as updateRevertDebts,
} from "../cache/debts";
import { update as updateReceipts } from "../cache/receipts";
import type { UseContextedMutationOptions } from "../context";
export const options: UseContextedMutationOptions<
"debts.remove",
{ debt: Debt }
> = {
mutationKey: "debts.remove",
onMutate:
(controllerContext, { debt: currDebt }) =>
() =>
updateRevertDebts(controllerContext, {
getAll: (controller) =>
controller.update(
currDebt.currencyCode,
(sum) => round(sum - currDebt.amount),
() => (sum) => round(sum + currDebt.amount),
),
getAllPeer: (controller) =>
controller.update(
currDebt.peerId,
currDebt.currencyCode,
(sum) => round(sum - currDebt.amount),
() => (sum) => round(sum + currDebt.amount),
),
getPeersPaged: (controller) => controller.update(currDebt.peerId),
getByPeerPaged: undefined,
// We remove the debt from everywhere else
// but it's own page
// otherwise the page will try to refetch the data immediately
get: undefined,
getIntentions: undefined,
}),
onSuccess:
(controllerContext, { debt: currDebt }) =>
(result, updateObject) => {
updateReceipts(controllerContext, {
get: (controller) =>
controller.updateAll((receipt) => {
if (receipt.debts.direction === "incoming") {
if (!receipt.debts.id) {
return receipt;
}
if (receipt.debts.id === updateObject.id) {
return {
...receipt,
debts: receipt.debts.hasForeign
? { ...receipt.debts, hasForeign: true, hasMine: false }
: {
...receipt.debts,
hasForeign: false,
hasMine: false,
id: undefined,
},
};
}
return receipt;
}
if (
receipt.debts.debts.some((debt) => debt.id === updateObject.id)
) {
const nextDebts = receipt.debts.debts.filter(
({ id }) => id !== updateObject.id,
);
return {
...receipt,
debts: { ...receipt.debts, debts: nextDebts },
};
}
return receipt;
}),
getPaged: undefined,
});
updateDebts(controllerContext, {
getAll: undefined,
getAllPeer: undefined,
getPeersPaged: undefined,
getByPeerPaged: (controller) => controller.invalidate(currDebt.peerId),
get: (controller) => controller.remove(updateObject.id),
getIntentions: (controller) => {
Iif (result.reverseRemoved) {
return;
}
// We may or may not know the parameters of counterparty debt
// Invalidating intentions might be a good idea
controller.invalidate();
},
});
},
mutateToastOptions:
({ t }) =>
(variablesSet) => ({
text: t("toasts.removeDebt.mutate", {
ns: "debts",
debtsAmount: variablesSet.length,
}),
}),
successToastOptions:
({ t }) =>
(_, variablesSet) => ({
text: t("toasts.removeDebt.success", {
ns: "debts",
debtsAmount: variablesSet.length,
}),
}),
errorToastOptions:
({ t }) =>
(errors) => ({
text: t("toasts.removeDebt.error", {
ns: "debts",
debtsAmount: errors.length,
errors,
}),
}),
};
|