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 | 193x 8x 11x 11x 11x 11x 193x 3x 193x 2x 2x 2x 193x 3x 3x 1x 2x 193x 9x 9x 7x 2x 2x 1x | import type { Peer } from "~app/trpc-types";
import type { PeerId } from "~db/ids";
import type {
ControllerContext,
ControllerWith,
SnapshotFn,
UpdateFn,
} from "../../types";
import {
applyUpdateFnWithRevert,
applyWithRevert,
getUpdatedData,
withRef,
} from "../utils";
type Controller = ControllerWith<{
procedure: ControllerContext["trpc"]["peers"]["get"];
}>;
const update =
({ queryClient, procedure }: Controller, peerId: PeerId) =>
(updater: UpdateFn<Peer>) =>
withRef<Peer | undefined>((ref) => {
queryClient.setQueryData(procedure.queryKey({ id: peerId }), (peer) => {
ref.current = peer;
return getUpdatedData(peer, updater);
});
}).current;
const upsert = ({ queryClient, procedure }: Controller, peer: Peer) =>
queryClient.setQueryData(procedure.queryKey({ id: peer.id }), peer);
const remove = ({ queryClient, procedure }: Controller, peerId: PeerId) =>
withRef<Peer | undefined>((ref) => {
ref.current = queryClient.getQueryData(procedure.queryKey({ id: peerId }));
void queryClient.invalidateQueries(procedure.queryFilter({ id: peerId }));
}).current;
export const getController = ({ queryClient, trpc }: ControllerContext) => {
const controller = { queryClient, procedure: trpc.peers.get };
return {
update: (peerId: PeerId, updater: UpdateFn<Peer>) =>
update(controller, peerId)(updater),
add: (peer: Peer) => upsert(controller, peer),
remove: (peerId: PeerId) => remove(controller, peerId),
};
};
export const getRevertController = ({
queryClient,
trpc,
}: ControllerContext) => {
const controller = { queryClient, procedure: trpc.peers.get };
return {
update: (
peerId: PeerId,
updater: UpdateFn<Peer>,
revertUpdater: SnapshotFn<Peer>,
) =>
applyUpdateFnWithRevert(
update(controller, peerId),
updater,
revertUpdater,
),
add: (peer: Peer) =>
applyWithRevert(
() => upsert(controller, peer),
() => {
remove(controller, peer.id);
},
),
remove: (peerId: PeerId) =>
applyWithRevert(
() => remove(controller, peerId),
(snapshot) => {
upsert(controller, snapshot);
},
),
};
};
|