diff options
| author | MohamedBassem <me@mbassem.com> | 2024-04-07 18:30:00 +0100 |
|---|---|---|
| committer | MohamedBassem <me@mbassem.com> | 2024-04-07 19:00:00 +0100 |
| commit | 79d61be7e15dc5d23fb687a5f71e0097088a99ac (patch) | |
| tree | da72f19cdb74ef4ed2a75bcfddd13bdfb874f205 /packages/shared-react | |
| parent | 44918316007ed3153dc802a4b11db3ea09024a8b (diff) | |
| download | karakeep-79d61be7e15dc5d23fb687a5f71e0097088a99ac.tar.zst | |
feature: Extract hook logic into separate package and add a new action bar in bookmark preview
Diffstat (limited to 'packages/shared-react')
| -rw-r--r-- | packages/shared-react/hooks/bookmarks.ts | 43 | ||||
| -rw-r--r-- | packages/shared-react/hooks/lists.ts | 14 | ||||
| -rw-r--r-- | packages/shared-react/package.json | 41 | ||||
| -rw-r--r-- | packages/shared-react/trpc.ts | 7 | ||||
| -rw-r--r-- | packages/shared-react/tsconfig.json | 14 |
5 files changed, 119 insertions, 0 deletions
diff --git a/packages/shared-react/hooks/bookmarks.ts b/packages/shared-react/hooks/bookmarks.ts new file mode 100644 index 00000000..7349e680 --- /dev/null +++ b/packages/shared-react/hooks/bookmarks.ts @@ -0,0 +1,43 @@ +import { api } from "../trpc"; + +export function useDeleteBookmark( + ...opts: Parameters<typeof api.bookmarks.deleteBookmark.useMutation> +) { + const apiUtils = api.useUtils(); + return api.bookmarks.deleteBookmark.useMutation({ + ...opts, + onSuccess: (res, req, meta) => { + apiUtils.bookmarks.getBookmarks.invalidate(); + apiUtils.bookmarks.searchBookmarks.invalidate(); + opts[0]?.onSuccess?.(res, req, meta); + }, + }); +} + +export function useUpdateBookmark( + ...opts: Parameters<typeof api.bookmarks.updateBookmark.useMutation> +) { + const apiUtils = api.useUtils(); + return api.bookmarks.updateBookmark.useMutation({ + ...opts, + onSuccess: (res, req, meta) => { + apiUtils.bookmarks.getBookmarks.invalidate(); + apiUtils.bookmarks.searchBookmarks.invalidate(); + apiUtils.bookmarks.getBookmark.invalidate({ bookmarkId: req.bookmarkId }); + opts[0]?.onSuccess?.(res, req, meta); + }, + }); +} + +export function useRecrawlBookmark( + ...opts: Parameters<typeof api.bookmarks.recrawlBookmark.useMutation> +) { + const apiUtils = api.useUtils(); + return api.bookmarks.recrawlBookmark.useMutation({ + ...opts, + onSuccess: (res, req, meta) => { + apiUtils.bookmarks.getBookmark.invalidate({ bookmarkId: req.bookmarkId }); + opts[0]?.onSuccess?.(res, req, meta); + }, + }); +} diff --git a/packages/shared-react/hooks/lists.ts b/packages/shared-react/hooks/lists.ts new file mode 100644 index 00000000..5cfcd194 --- /dev/null +++ b/packages/shared-react/hooks/lists.ts @@ -0,0 +1,14 @@ +import { api } from "../trpc"; + +export function useRemoveBookmarkFromList( + ...opts: Parameters<typeof api.lists.removeFromList.useMutation> +) { + const apiUtils = api.useUtils(); + return api.lists.removeFromList.useMutation({ + ...opts, + onSuccess: (res, req, meta) => { + apiUtils.bookmarks.getBookmarks.invalidate({ listId: req.listId }); + opts[0]?.onSuccess?.(res, req, meta); + }, + }); +} diff --git a/packages/shared-react/package.json b/packages/shared-react/package.json new file mode 100644 index 00000000..46a2adb5 --- /dev/null +++ b/packages/shared-react/package.json @@ -0,0 +1,41 @@ +{ + "$schema": "https://json.schemastore.org/package.json", + "name": "@hoarder/shared-react", + "version": "0.1.0", + "private": true, + "dependencies": { + "@hoarder/trpc": "workspace:^0.1.0", + "@tanstack/react-query": "^5.24.8" + }, + "devDependencies": { + "@hoarder/eslint-config": "workspace:^0.2.0", + "@hoarder/prettier-config": "workspace:^0.1.0", + "@hoarder/tsconfig": "workspace:^0.1.0" + }, +"peerDependencies": { + "react": "*", + "react-native": "*", + "react-native-web": "*" + }, + "peerDependenciesMeta": { + "react-native": { + "optional": true + }, + "react-native-web": { + "optional": true + } + }, + "scripts": { + "typecheck": "tsc --noEmit", + "format": "prettier . --ignore-path ../../.prettierignore", + "lint": "eslint ." + }, + "eslintConfig": { + "root": true, + "extends": [ + "@hoarder/eslint-config/base", + "@hoarder/eslint-config/react" + ] + }, + "prettier": "@hoarder/prettier-config" +} diff --git a/packages/shared-react/trpc.ts b/packages/shared-react/trpc.ts new file mode 100644 index 00000000..99fdd8b5 --- /dev/null +++ b/packages/shared-react/trpc.ts @@ -0,0 +1,7 @@ +"use client"; + +import { createTRPCReact } from "@trpc/react-query"; + +import type { AppRouter } from "@hoarder/trpc/routers/_app"; + +export const api = createTRPCReact<AppRouter>(); diff --git a/packages/shared-react/tsconfig.json b/packages/shared-react/tsconfig.json new file mode 100644 index 00000000..8c3411bf --- /dev/null +++ b/packages/shared-react/tsconfig.json @@ -0,0 +1,14 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "@hoarder/tsconfig/base.json", + "compilerOptions": { + "baseUrl": ".", + "plugins": [], + "paths": { + "@/*": ["./*"] + }, + "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json" + }, + "include": ["**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] +} |
