Skip to content

Commit e415134

Browse files
authored
Merge pull request #201 from atomic-state/enhancements/global-cache
Enhancements/global cache
2 parents 51d55f1 + 3119808 commit e415134

File tree

5 files changed

+236
-244
lines changed

5 files changed

+236
-244
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "http-react",
3-
"version": "3.7.2",
3+
"version": "3.7.3",
44
"description": "React hooks for data fetching",
55
"main": "dist/index.js",
66
"scripts": {

src/components/FetchConfigAsync.tsx

Lines changed: 13 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,47 @@
1-
import { isDefined, serialize } from '../client'
2-
import {
3-
defaultCache,
4-
fetcherDefaults,
5-
valuesMemory,
6-
willSuspend
7-
} from '../internal'
1+
import { isDefined } from '../client'
82
import { $context } from '../internal/shared'
93
import { FetchContextType } from '../types'
4+
import { FetchConfigSync } from './server'
105

116
export async function FetchConfigAsync(props: FetchContextType) {
12-
const { children, defaults = {}, value = {}, suspense = [] } = props
7+
const { children, defaults = {}, value = {} } = props
8+
9+
let $values = new Map()
1310

1411
const previousConfig = $context.value as any
15-
const { cacheProvider = defaultCache } = previousConfig
1612

1713
for (let valueKey in value) {
18-
const resolvedKey = serialize({
19-
idString: serialize(valueKey)
20-
})
21-
2214
const $value = await value[valueKey]
2315

2416
const $data = $value.data ?? $value
2517

26-
valuesMemory.set(resolvedKey, $data)
18+
$values.set(valueKey, $data)
2719

28-
fetcherDefaults.set(resolvedKey, $data)
20+
// fetcherDefaults.set(resolvedKey, $data)
2921

30-
cacheProvider.set(resolvedKey, $data)
22+
// cacheProvider.set(resolvedKey, $data)
3123
}
3224

3325
for (let defaultKey in defaults) {
3426
const { id = defaultKey } = defaults[defaultKey]
35-
const resolvedKey = serialize({
36-
idString: serialize(id)
37-
})
3827

3928
if (isDefined(id)) {
40-
valuesMemory.set(resolvedKey, await defaults[defaultKey]?.value)
41-
fetcherDefaults.set(resolvedKey, await defaults[defaultKey]?.value)
42-
cacheProvider.set(resolvedKey, await defaults[defaultKey]?.value)
29+
$values.set(defaultKey, await defaults[defaultKey]?.value)
30+
// fetcherDefaults.set(resolvedKey, await defaults[defaultKey]?.value)
31+
// cacheProvider.set(resolvedKey, await defaults[defaultKey]?.value)
4332
}
4433
}
4534

46-
for (let suspenseKey of suspense) {
47-
const key = serialize({
48-
idString: serialize(suspenseKey)
49-
})
50-
willSuspend.set(key, true)
51-
}
52-
5335
let mergedConfig = {
5436
...previousConfig,
5537
...props,
5638
headers: {
5739
...previousConfig.headers,
5840
...props.headers
5941
},
42+
value: Object.fromEntries($values.entries()),
6043
children: undefined
6144
}
6245

63-
$context.value = mergedConfig
64-
65-
return children
46+
return <FetchConfigSync value={mergedConfig}>{children}</FetchConfigSync>
6647
}

src/components/index.tsx

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212

1313
import { FetchContextType } from '../types'
1414

15-
import { isDefined, serialize } from '../utils/shared'
15+
import { isDefined, serialize, windowExists } from '../utils/shared'
1616

1717
let isServer: boolean = true
1818
/**
@@ -39,18 +39,16 @@ export function SSRSuspense({
3939
}
4040

4141
export function FetchConfig(props: FetchContextType) {
42-
const {
43-
children,
44-
defaults = {},
45-
value = {},
46-
suspense = [],
47-
clientOnly
48-
} = props
42+
const { children, defaults = {}, value: $val = {}, suspense = [] } = props
43+
44+
const value = (windowExists ? $val : $val.value) ?? {}
4945

5046
const previousConfig = useHRFContext()
5147

5248
const { cacheProvider = defaultCache } = previousConfig
5349

50+
const $values = new Map()
51+
5452
for (let valueKey in value) {
5553
const resolvedKey = serialize({
5654
idString: serialize(valueKey)
@@ -77,11 +75,15 @@ export function FetchConfig(props: FetchContextType) {
7775
parsedChunk = dataChunk
7876
}
7977

80-
valuesMemory.set(resolvedKey, parsedChunk)
78+
$values.set(resolvedKey, parsedChunk)
79+
80+
if (windowExists) {
81+
valuesMemory.set(resolvedKey, parsedChunk)
8182

82-
fetcherDefaults.set(resolvedKey, parsedChunk)
83+
fetcherDefaults.set(resolvedKey, parsedChunk)
8384

84-
cacheProvider.set(resolvedKey, parsedChunk)
85+
cacheProvider.set(resolvedKey, parsedChunk)
86+
}
8587
}
8688

8789
for (let defaultKey in defaults) {
@@ -91,9 +93,12 @@ export function FetchConfig(props: FetchContextType) {
9193
})
9294

9395
if (isDefined(id)) {
94-
valuesMemory.set(resolvedKey, defaults[defaultKey]?.value)
95-
fetcherDefaults.set(resolvedKey, defaults[defaultKey]?.value)
96-
cacheProvider.set(resolvedKey, defaults[defaultKey]?.value)
96+
$values.set(resolvedKey, defaults[defaultKey]?.value)
97+
if (windowExists) {
98+
valuesMemory.set(resolvedKey, defaults[defaultKey]?.value)
99+
fetcherDefaults.set(resolvedKey, defaults[defaultKey]?.value)
100+
cacheProvider.set(resolvedKey, defaults[defaultKey]?.value)
101+
}
97102
}
98103
}
99104

@@ -111,6 +116,7 @@ export function FetchConfig(props: FetchContextType) {
111116
...previousConfig.headers,
112117
...props.headers
113118
},
119+
value: Object.fromEntries($values.entries()),
114120
children: undefined
115121
}
116122

src/components/server/index.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
'use client'
1+
"use client"
22

3-
import { FetchConfigAsync } from '../FetchConfigAsync'
3+
import { FetchConfigAsync } from "../FetchConfigAsync"
44

5-
import { FetchConfig as FConfig, SSRSuspense } from '../index'
5+
import { FetchConfig as FConfig, SSRSuspense } from "../index"
66

7-
const FetchConfig = typeof window === 'undefined' ? FetchConfigAsync : FConfig
7+
const FetchConfig = typeof window === "undefined" ? FetchConfigAsync : FConfig
88

9-
export { FetchConfig, SSRSuspense }
9+
export { FetchConfig, SSRSuspense, FConfig as FetchConfigSync }

0 commit comments

Comments
 (0)