Skip to content

Commit 6b4913f

Browse files
committed
fix(saves): update types for saves call
1 parent afd5190 commit 6b4913f

File tree

4 files changed

+35
-16
lines changed

4 files changed

+35
-16
lines changed

clients/pocket/app/[locale]/saves/page.tsx

+1-3
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,7 @@ export function generateStaticParams() {
1111
return SUPPORTED_LOCALES.map((locale) => ({ locale }))
1212
}
1313

14-
export default async function Saves({ params }: { params: Promise<{ locale: string }> }) {
15-
const { locale } = await params
16-
14+
export default async function Saves() {
1715
const sortBy = 'CREATED_AT' as SavedItemsSortBy.CreatedAt
1816
const sortOrder = 'DESC' as SavedItemsSortOrder.Desc
1917
const statuses = ['UNREAD' as SavedItemStatusFilter.Unread]

common/state/page-saves/server.ts

+32-13
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { FRAGMENT_ITEM_PREVIEW } from '../_fragments/preview'
77
import { FRAGMENT_ITEM_SAVED_INFO } from '../_fragments/saved-info'
88

99
// Types
10-
import type { ResponseError } from '@common/types'
10+
import type { ResponseError, ExcludesFalse } from '@common/types'
1111
import type {
1212
Item,
1313
PageInfo,
@@ -37,6 +37,12 @@ interface UserSavesArguments {
3737
filter?: SavedItemsFilter
3838
}
3939

40+
type SavedData = Omit<SavedItem, 'item'>
41+
type ConvertedEdge = {
42+
preview: PocketMetadata & { itemId: string }
43+
savedData: SavedData
44+
}
45+
4046
const getUserSavesQuery = gql`
4147
query UserSaves($pagination: PaginationInput, $sort: SavedItemsSort, $filter: SavedItemsFilter) {
4248
user {
@@ -96,32 +102,45 @@ export async function getUserSaves(
96102

97103
const { edges, pageInfo, totalCount } = savedItems
98104

99-
const convertedEdges = edges
100-
?.map((edge) => {
105+
// If there are no edges for some reason, let's just assume no items
106+
if (!edges) {
107+
return {
108+
itemsById: {},
109+
saveDataById: {},
110+
savePageIds: [],
111+
savePageInfo: { ...pageInfo, totalCount: 0 }
112+
}
113+
}
114+
115+
// Let's run a quick consolidation so it's easier to normalize the data
116+
const convertedEdges: ConvertedEdge[] = edges
117+
.map((edge) => {
101118
const { item, ...savedData } = edge?.node || {}
102119

103120
// We are gonna filter pending items out
104-
// ?? NOTE: Pending item was a future pattern to separate parser response
105-
// ?? from metadata. As it stands, this is not fully implemented, but we
106-
// ?? will still handle this case for type safety
107121
if (item?.__typename === 'PendingItem') return false
108122

109-
const { preview, itemId, shareId } = item as Item
110-
return { preview: { ...preview, itemId }, savedData }
123+
const { preview, itemId } = item as Item
124+
return { preview: { ...preview, itemId }, savedData } as ConvertedEdge
111125
})
112-
.filter(Boolean)
126+
.filter(Boolean as unknown as ExcludesFalse)
127+
128+
// If something went wrong, let's abandon ship
129+
if (!convertedEdges?.length) throw new PageSavesError('Malformed Edges')
113130

114131
const itemsById = convertedEdges.reduce((previous, current) => {
115-
const { preview, saveData } = current
132+
const { preview } = current as ConvertedEdge
116133
return { ...previous, [preview.itemId]: preview }
117134
}, {})
118135

119136
const saveDataById = convertedEdges.reduce((previous, current) => {
120-
const { preview, saveData } = current
121-
return { ...previous, [preview.itemId]: saveData }
137+
const { preview, savedData } = current
138+
return { ...previous, [preview.itemId]: savedData }
122139
}, {})
123140

124-
const savePageIds = edges.map((edge) => edge?.node?.item?.itemId)
141+
const savePageIds = edges
142+
.map((edge) => edge?.node?.item?.itemId ?? false)
143+
.filter(Boolean as unknown as ExcludesFalse)
125144

126145
return {
127146
itemsById,

common/types/client/utilities.ts

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export type ExcludesFalse = <T>(x: T | false) => x is T

common/types/index.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ export * from './client/gql'
44
export * from './client/item'
55
export * from './client/slate'
66
export * from './client/user-display'
7+
export * from './client/utilities'

0 commit comments

Comments
 (0)