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 | 205x 36x 41x 41x 41x 41x 205x 23x 205x 6x 6x 6x 205x 34x 34x 20x 11x 3x 205x 28x 28x 16x 12x 12x 3x | import type { Debt } from "~app/trpc-types";
import type { DebtId } from "~db/ids";
import type {
ControllerContext,
ControllerWith,
SnapshotFn,
UpdateFn,
} from "../../types";
import {
applyUpdateFnWithRevert,
applyWithRevert,
getUpdatedData,
withRef,
} from "../utils";
type Controller = ControllerWith<{
procedure: ControllerContext["trpc"]["debts"]["get"];
}>;
const update =
({ queryClient, procedure }: Controller, debtId: DebtId) =>
(updater: UpdateFn<Debt>) =>
withRef<Debt | undefined>((ref) => {
queryClient.setQueryData(procedure.queryKey({ id: debtId }), (debt) => {
ref.current = debt;
return getUpdatedData(debt, updater);
});
}).current;
const upsert = ({ queryClient, procedure }: Controller, debt: Debt) =>
queryClient.setQueryData(procedure.queryKey({ id: debt.id }), debt);
const remove = ({ queryClient, procedure }: Controller, debtId: DebtId) =>
withRef<Debt | undefined>((ref) => {
ref.current = queryClient.getQueryData(procedure.queryKey({ id: debtId }));
void queryClient.invalidateQueries(procedure.queryFilter({ id: debtId }));
}).current;
export const getController = ({ queryClient, trpc }: ControllerContext) => {
const controller = { queryClient, procedure: trpc.debts.get };
return {
update: (debtId: DebtId, updater: UpdateFn<Debt>) =>
update(controller, debtId)(updater),
add: (debt: Debt) => upsert(controller, debt),
remove: (debtId: DebtId) => {
remove(controller, debtId);
},
};
};
export const getRevertController = ({
queryClient,
trpc,
}: ControllerContext) => {
const controller = { queryClient, procedure: trpc.debts.get };
return {
update: (
debtId: DebtId,
updater: UpdateFn<Debt>,
revertUpdater: SnapshotFn<Debt>,
) =>
applyUpdateFnWithRevert(
update(controller, debtId),
updater,
revertUpdater,
),
add: (debt: Debt) =>
applyWithRevert(
() => upsert(controller, debt),
() => {
remove(controller, debt.id);
},
),
remove: (debtId: DebtId) =>
applyWithRevert(
() => remove(controller, debtId),
(snapshot) => {
upsert(controller, snapshot);
},
),
};
};
|