Skip to content

Commit b0489a0

Browse files
committed
feat: implement bookmark account list
1 parent c73a382 commit b0489a0

32 files changed

+430
-194
lines changed

bun.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,7 @@
317317
"@tanstack/react-query": "catalog:",
318318
"@workspace/db": "workspace:*",
319319
"@workspace/db-react": "workspace:*",
320+
"@workspace/i18n": "workspace:*",
320321
"@workspace/solana-client": "workspace:*",
321322
"@workspace/solana-client-react": "workspace:*",
322323
"@workspace/ui": "workspace:*",

packages/db-react/src/options-bookmark-account.tsx

Lines changed: 9 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,21 @@
11
import type { Address } from '@solana/kit'
22
import { type MutateOptions, mutationOptions, queryOptions } from '@tanstack/react-query'
3-
import { bookmarkAccountCreate } from '@workspace/db/bookmark-account/bookmark-account-create'
4-
import type { BookmarkAccountCreateInput } from '@workspace/db/bookmark-account/bookmark-account-create-input'
5-
import { bookmarkAccountDelete } from '@workspace/db/bookmark-account/bookmark-account-delete'
63
import { bookmarkAccountFindByAddress } from '@workspace/db/bookmark-account/bookmark-account-find-by-address'
74
import { bookmarkAccountFindMany } from '@workspace/db/bookmark-account/bookmark-account-find-many'
85
import type { BookmarkAccountFindManyInput } from '@workspace/db/bookmark-account/bookmark-account-find-many-input'
9-
import { bookmarkAccountFindUnique } from '@workspace/db/bookmark-account/bookmark-account-find-unique'
6+
import { bookmarkAccountToggle } from '@workspace/db/bookmark-account/bookmark-account-toggle'
107
import { bookmarkAccountUpdate } from '@workspace/db/bookmark-account/bookmark-account-update'
118
import type { BookmarkAccountUpdateInput } from '@workspace/db/bookmark-account/bookmark-account-update-input'
129
import { db } from '@workspace/db/db'
1310
import { queryClient } from './query-client.tsx'
1411

15-
export type BookmarkAccountCreateMutateOptions = MutateOptions<
16-
string,
17-
Error,
18-
{ input: Omit<BookmarkAccountCreateInput, 'address'> }
19-
> & {
20-
address: Address
21-
}
22-
export type BookmarkAccountDeleteMutateOptions = MutateOptions<void, Error, { id: string }> & {
23-
address: Address
24-
}
12+
export type BookmarkAccountToggleMutateOptions = MutateOptions<'created' | 'deleted', Error, { address: Address }>
2513
export type BookmarkAccountUpdateMutateOptions = MutateOptions<
2614
number,
2715
Error,
2816
{ address: Address; input: BookmarkAccountUpdateInput }
2917
>
30-
3118
export const optionsBookmarkAccount = {
32-
create: (props: BookmarkAccountCreateMutateOptions) =>
33-
mutationOptions({
34-
mutationFn: ({ input }: { input: Omit<BookmarkAccountCreateInput, 'address'> }) =>
35-
bookmarkAccountCreate(db, { ...input, address: props.address }),
36-
onSuccess: () => {
37-
queryClient.invalidateQueries(optionsBookmarkAccount.findByAddress(props.address))
38-
},
39-
...props,
40-
}),
41-
delete: (props: BookmarkAccountDeleteMutateOptions) =>
42-
mutationOptions({
43-
mutationFn: ({ id }: { id: string }) => bookmarkAccountDelete(db, id),
44-
onSuccess: () => {
45-
queryClient.invalidateQueries(optionsBookmarkAccount.findByAddress(props.address))
46-
},
47-
...props,
48-
}),
4919
findByAddress: (address: Address) =>
5020
queryOptions({
5121
queryFn: () => bookmarkAccountFindByAddress(db, address),
@@ -56,10 +26,13 @@ export const optionsBookmarkAccount = {
5626
queryFn: () => bookmarkAccountFindMany(db, input),
5727
queryKey: ['bookmarkAccountFindMany', input],
5828
}),
59-
findUnique: (id: string) =>
60-
queryOptions({
61-
queryFn: () => bookmarkAccountFindUnique(db, id),
62-
queryKey: ['bookmarkAccountFindUnique', id],
29+
toggle: (props: BookmarkAccountToggleMutateOptions) =>
30+
mutationOptions({
31+
mutationFn: ({ address }: { address: Address }) => bookmarkAccountToggle(db, address),
32+
onSuccess: (_, { address }) => {
33+
queryClient.invalidateQueries(optionsBookmarkAccount.findByAddress(address))
34+
},
35+
...props,
6336
}),
6437
update: (props: BookmarkAccountUpdateMutateOptions = {}) =>
6538
mutationOptions({

packages/db-react/src/use-bookmark-account-create.tsx

Lines changed: 0 additions & 6 deletions
This file was deleted.

packages/db-react/src/use-bookmark-account-delete.tsx

Lines changed: 0 additions & 6 deletions
This file was deleted.

packages/db-react/src/use-bookmark-account-find-unique.tsx

Lines changed: 0 additions & 6 deletions
This file was deleted.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import type { BookmarkAccount } from '@workspace/db/bookmark-account/bookmark-account'
2+
import { bookmarkAccountFindMany } from '@workspace/db/bookmark-account/bookmark-account-find-many'
3+
import type { BookmarkAccountFindManyInput } from '@workspace/db/bookmark-account/bookmark-account-find-many-input'
4+
import { db } from '@workspace/db/db'
5+
import { useLiveQuery } from 'dexie-react-hooks'
6+
7+
export function useBookmarkAccountLive(input: BookmarkAccountFindManyInput = {}) {
8+
return useLiveQuery<BookmarkAccount[], BookmarkAccount[]>(() => bookmarkAccountFindMany(db, input), [input], [])
9+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { useMutation } from '@tanstack/react-query'
2+
import { type BookmarkAccountToggleMutateOptions, optionsBookmarkAccount } from './options-bookmark-account.tsx'
3+
4+
export function useBookmarkAccountToggle(props: BookmarkAccountToggleMutateOptions = {}) {
5+
return useMutation(optionsBookmarkAccount.toggle(props))
6+
}

packages/db/src/bookmark-account/bookmark-account-find-unique.ts

Lines changed: 0 additions & 12 deletions
This file was deleted.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import type { Address } from '@solana/kit'
2+
import type { Database } from '../database.ts'
3+
4+
import { bookmarkAccountCreate } from './bookmark-account-create.ts'
5+
import { bookmarkAccountDelete } from './bookmark-account-delete.ts'
6+
import { bookmarkAccountFindByAddress } from './bookmark-account-find-by-address.ts'
7+
8+
export async function bookmarkAccountToggle(db: Database, address: Address): Promise<'created' | 'deleted'> {
9+
return db.transaction('rw', db.bookmarkAccounts, async () => {
10+
const existing = await bookmarkAccountFindByAddress(db, address)
11+
if (existing) {
12+
await bookmarkAccountDelete(db, existing.id)
13+
return 'deleted'
14+
} else {
15+
await bookmarkAccountCreate(db, { address })
16+
return 'created'
17+
}
18+
})
19+
}

packages/db/test/bookmark-account-delete.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
44

55
import { bookmarkAccountCreate } from '../src/bookmark-account/bookmark-account-create.ts'
66
import { bookmarkAccountDelete } from '../src/bookmark-account/bookmark-account-delete.ts'
7-
import { bookmarkAccountFindUnique } from '../src/bookmark-account/bookmark-account-find-unique.ts'
7+
import { bookmarkAccountFindByAddress } from '../src/bookmark-account/bookmark-account-find-by-address.ts'
88
import { createDbTest, testBookmarkAccountCreateInput } from './test-helpers.ts'
99

1010
const db = createDbTest()
@@ -25,7 +25,7 @@ describe('bookmark-account-delete', () => {
2525
await bookmarkAccountDelete(db, id)
2626

2727
// ASSERT
28-
const deletedItem = await bookmarkAccountFindUnique(db, id)
28+
const deletedItem = await bookmarkAccountFindByAddress(db, input.address)
2929
expect(deletedItem).toBeNull()
3030
})
3131
})

0 commit comments

Comments
 (0)