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 | 22x 22x 22x 2x 3x 3x 3x 3x 22x 22x 2x 2x 2x | import type { UserSettings } from "~app/trpc-types";
import type {
ControllerContext,
ControllerWith,
SnapshotFn,
UpdateFn,
} from "../../types";
import {
applyUpdateFnWithRevert,
applyWithRevert,
getUpdatedData,
withRef,
} from "../utils";
type Controller = ControllerWith<{
procedure: ControllerContext["trpc"]["userSettings"]["get"];
}>;
const invalidateUserSettings =
({ queryClient, procedure }: Controller) =>
() =>
queryClient.invalidateQueries(procedure.queryFilter());
const upsert = (
{ queryClient, procedure }: Controller,
userSettings: UserSettings,
) => queryClient.setQueryData(procedure.queryKey(), userSettings);
const update =
({ queryClient, procedure }: Controller) =>
(updater: UpdateFn<UserSettings>) =>
withRef<UserSettings | undefined>((ref) => {
queryClient.setQueryData(procedure.queryKey(), (userSettings) => {
ref.current = userSettings;
return getUpdatedData(userSettings, updater);
});
}).current;
export const getController = ({ queryClient, trpc }: ControllerContext) => {
const controller = { queryClient, procedure: trpc.userSettings.get };
return {
update: (updater: UpdateFn<UserSettings>) => update(controller)(updater),
upsert: (user: UserSettings) => upsert(controller, user),
};
};
export const getRevertController = ({
queryClient,
trpc,
}: ControllerContext) => {
const controller = { queryClient, procedure: trpc.userSettings.get };
return {
update: (
updater: UpdateFn<UserSettings>,
revertUpdater: SnapshotFn<UserSettings>,
) => applyUpdateFnWithRevert(update(controller), updater, revertUpdater),
upsert: (userSettings: UserSettings) =>
applyWithRevert(
() => upsert(controller, userSettings),
() => {
invalidateUserSettings(controller);
},
),
};
};
|