aboutsummaryrefslogtreecommitdiffstats
path: root/packages/shared
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--packages/shared-react/hooks/users.ts14
-rw-r--r--packages/shared/types/users.ts13
2 files changed, 27 insertions, 0 deletions
diff --git a/packages/shared-react/hooks/users.ts b/packages/shared-react/hooks/users.ts
new file mode 100644
index 00000000..e896f8e4
--- /dev/null
+++ b/packages/shared-react/hooks/users.ts
@@ -0,0 +1,14 @@
+import { api } from "../trpc";
+
+export function useUpdateUserSettings(
+ ...opts: Parameters<typeof api.users.updateSettings.useMutation>
+) {
+ const apiUtils = api.useUtils();
+ return api.users.updateSettings.useMutation({
+ ...opts[0],
+ onSuccess: (res, req, meta) => {
+ apiUtils.users.settings.invalidate();
+ return opts[0]?.onSuccess?.(res, req, meta);
+ },
+ });
+}
diff --git a/packages/shared/types/users.ts b/packages/shared/types/users.ts
index 86c5a9ee..62b77e56 100644
--- a/packages/shared/types/users.ts
+++ b/packages/shared/types/users.ts
@@ -39,3 +39,16 @@ export const zUserStatsResponseSchema = z.object({
numLists: z.number(),
numHighlights: z.number(),
});
+
+export const zUserSettingsSchema = z.object({
+ bookmarkClickAction: z.enum([
+ "open_original_link",
+ "expand_bookmark_preview",
+ ]),
+});
+
+export type ZUserSettings = z.infer<typeof zUserSettingsSchema>;
+
+export const zUpdateUserSettingsSchema = zUserSettingsSchema.partial().pick({
+ bookmarkClickAction: true,
+});