@furystack/shades-common-components 13.0.0 → 13.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +35 -0
- package/esm/components/cache-view.d.ts +19 -27
- package/esm/components/cache-view.d.ts.map +1 -1
- package/esm/components/cache-view.js +2 -20
- package/esm/components/cache-view.js.map +1 -1
- package/esm/components/cache-view.spec.js +44 -0
- package/esm/components/cache-view.spec.js.map +1 -1
- package/package.json +3 -3
- package/src/components/cache-view.spec.tsx +63 -0
- package/src/components/cache-view.tsx +41 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,40 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [13.1.0] - 2026-02-28
|
|
4
|
+
|
|
5
|
+
### ✨ Features
|
|
6
|
+
|
|
7
|
+
### `contentProps` support for `CacheView`
|
|
8
|
+
|
|
9
|
+
`CacheView` now accepts a `contentProps` prop to forward additional type-safe props to the content component beyond `data`. The `CacheViewProps` type gained a third generic parameter `TContentProps` that constrains the content component's full props shape. When the content component requires extra props (excluding `data` and HTML element attributes), `contentProps` becomes required; otherwise it can be omitted.
|
|
10
|
+
|
|
11
|
+
**Usage:**
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
const MyContent = Shade<{ data: CacheWithValue<User>; label: string }>({
|
|
15
|
+
shadowDomName: 'my-content',
|
|
16
|
+
render: ({ props }) => <div>{props.label}: {props.data.value.name}</div>,
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
<CacheView
|
|
20
|
+
cache={userCache}
|
|
21
|
+
args={[userId]}
|
|
22
|
+
content={MyContent}
|
|
23
|
+
contentProps={{ label: 'User' }}
|
|
24
|
+
/>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### 🧪 Tests
|
|
28
|
+
|
|
29
|
+
- Added tests for `contentProps` forwarding to the content component
|
|
30
|
+
|
|
31
|
+
## [13.0.1] - 2026-02-26
|
|
32
|
+
|
|
33
|
+
### ⬆️ Dependencies
|
|
34
|
+
|
|
35
|
+
- Updated internal `@furystack/*` dependencies
|
|
36
|
+
- Bumped due to updated workspace dependencies
|
|
37
|
+
|
|
3
38
|
## [13.0.0] - 2026-02-26
|
|
4
39
|
|
|
5
40
|
### 💥 Breaking Changes
|
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
import type { Cache, CacheWithValue } from '@furystack/cache';
|
|
2
|
-
import type { ShadeComponent } from '@furystack/shades';
|
|
2
|
+
import type { PartialElement, ShadeComponent } from '@furystack/shades';
|
|
3
3
|
/**
|
|
4
4
|
* Props for the CacheView component.
|
|
5
5
|
* @typeParam TData - The type of data stored in the cache
|
|
6
6
|
* @typeParam TArgs - The tuple type of arguments used to identify the cache entry
|
|
7
|
+
* @typeParam TContentProps - The full props type of the content component (must include `data`)
|
|
7
8
|
*/
|
|
8
|
-
export type CacheViewProps<TData, TArgs extends any[]
|
|
9
|
+
export type CacheViewProps<TData, TArgs extends any[], TContentProps extends {
|
|
10
|
+
data: CacheWithValue<TData>;
|
|
11
|
+
} = {
|
|
12
|
+
data: CacheWithValue<TData>;
|
|
13
|
+
}> = {
|
|
9
14
|
/** The cache instance to observe and control */
|
|
10
15
|
cache: Cache<TData, TArgs>;
|
|
11
16
|
/** The arguments identifying which cache entry to display */
|
|
12
17
|
args: TArgs;
|
|
13
|
-
/** Shades component rendered when a value is available (loaded or obsolete).
|
|
14
|
-
content: ShadeComponent<
|
|
15
|
-
data: CacheWithValue<TData>;
|
|
16
|
-
}>;
|
|
18
|
+
/** Shades component rendered when a value is available (loaded or obsolete). */
|
|
19
|
+
content: ShadeComponent<TContentProps>;
|
|
17
20
|
/** Optional custom loader element. Default: null (nothing shown when loading). */
|
|
18
21
|
loader?: JSX.Element;
|
|
19
22
|
/**
|
|
@@ -22,25 +25,14 @@ export type CacheViewProps<TData, TArgs extends any[]> = {
|
|
|
22
25
|
* If not provided, a default Result + retry Button is shown.
|
|
23
26
|
*/
|
|
24
27
|
error?: (error: unknown, retry: () => void) => JSX.Element;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
* @example
|
|
36
|
-
* ```tsx
|
|
37
|
-
* const MyContent = Shade<{ data: CacheWithValue<User> }>({
|
|
38
|
-
* shadowDomName: 'my-content',
|
|
39
|
-
* render: ({ props }) => <div>{props.data.value.name}</div>,
|
|
40
|
-
* })
|
|
41
|
-
*
|
|
42
|
-
* <CacheView cache={userCache} args={[userId]} content={MyContent} />
|
|
43
|
-
* ```
|
|
44
|
-
*/
|
|
45
|
-
export declare const CacheView: <TData, TArgs extends any[]>(props: CacheViewProps<TData, TArgs>) => JSX.Element;
|
|
28
|
+
} & (keyof Omit<TContentProps, 'data' | keyof PartialElement<HTMLElement>> extends never ? {
|
|
29
|
+
contentProps?: never;
|
|
30
|
+
} : {
|
|
31
|
+
contentProps: Omit<TContentProps, 'data' | keyof PartialElement<HTMLElement>>;
|
|
32
|
+
});
|
|
33
|
+
export declare const CacheView: <TData, TArgs extends any[], TContentProps extends {
|
|
34
|
+
data: CacheWithValue<TData>;
|
|
35
|
+
} = {
|
|
36
|
+
data: CacheWithValue<TData>;
|
|
37
|
+
}>(props: CacheViewProps<TData, TArgs, TContentProps>) => JSX.Element;
|
|
46
38
|
//# sourceMappingURL=cache-view.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-view.d.ts","sourceRoot":"","sources":["../../src/components/cache-view.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"cache-view.d.ts","sourceRoot":"","sources":["../../src/components/cache-view.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAOvE;;;;;GAKG;AACH,MAAM,MAAM,cAAc,CACxB,KAAK,EACL,KAAK,SAAS,GAAG,EAAE,EACnB,aAAa,SAAS;IAAE,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,CAAA;CAAE,IACrF;IACF,gDAAgD;IAChD,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC1B,6DAA6D;IAC7D,IAAI,EAAE,KAAK,CAAA;IACX,gFAAgF;IAChF,OAAO,EAAE,cAAc,CAAC,aAAa,CAAC,CAAA;IACtC,kFAAkF;IAClF,MAAM,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;IACpB;;;;OAIG;IACH,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,KAAK,GAAG,CAAC,OAAO,CAAA;CAC3D,GAAG,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC,SAAS,KAAK,GACpF;IAAE,YAAY,CAAC,EAAE,KAAK,CAAA;CAAE,GACxB;IAAE,YAAY,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC,CAAA;CAAE,CAAC,CAAA;AAgDtF,eAAO,MAAM,SAAS,EAgDL,CACf,KAAK,EACL,KAAK,SAAS,GAAG,EAAE,EACnB,aAAa,SAAS;IAAE,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,CAAA;CAAE,EAEvF,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,KAC/C,GAAG,CAAC,OAAO,CAAA"}
|
|
@@ -5,32 +5,13 @@ import { Button } from './button.js';
|
|
|
5
5
|
import { Result } from './result.js';
|
|
6
6
|
const getDefaultErrorUi = (error, retry) => (createComponent(Result, { status: "error", title: "Something went wrong", subtitle: String(error) },
|
|
7
7
|
createComponent(Button, { variant: "outlined", onclick: retry }, "Retry")));
|
|
8
|
-
/**
|
|
9
|
-
* CacheView renders the state of a cache entry for the given cache + args.
|
|
10
|
-
*
|
|
11
|
-
* It subscribes to the cache observable and handles all states:
|
|
12
|
-
* 1. **Error first** - If the cache entry has failed, shows the error UI with a retry button.
|
|
13
|
-
* 2. **Value next** - If the entry has a value (loaded or obsolete), renders the content component.
|
|
14
|
-
* When obsolete, it also triggers a reload automatically.
|
|
15
|
-
* 3. **Loading last** - If there is no value and no error, shows the loader (or null by default).
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* ```tsx
|
|
19
|
-
* const MyContent = Shade<{ data: CacheWithValue<User> }>({
|
|
20
|
-
* shadowDomName: 'my-content',
|
|
21
|
-
* render: ({ props }) => <div>{props.data.value.name}</div>,
|
|
22
|
-
* })
|
|
23
|
-
*
|
|
24
|
-
* <CacheView cache={userCache} args={[userId]} content={MyContent} />
|
|
25
|
-
* ```
|
|
26
|
-
*/
|
|
27
8
|
export const CacheView = Shade({
|
|
28
9
|
shadowDomName: 'shade-cache-view',
|
|
29
10
|
css: {
|
|
30
11
|
fontFamily: cssVariableTheme.typography.fontFamily,
|
|
31
12
|
},
|
|
32
13
|
render: ({ props, useObservable, useState }) => {
|
|
33
|
-
const { cache, args, content, loader, error } = props;
|
|
14
|
+
const { cache, args, content, loader, error, contentProps } = props;
|
|
34
15
|
const argsKey = JSON.stringify(args);
|
|
35
16
|
const observable = cache.getObservable(...args);
|
|
36
17
|
const [result] = useObservable(`cache-${argsKey}`, observable);
|
|
@@ -60,6 +41,7 @@ export const CacheView = Shade({
|
|
|
60
41
|
}
|
|
61
42
|
return createComponent(content, {
|
|
62
43
|
data: result,
|
|
44
|
+
...(contentProps ?? {}),
|
|
63
45
|
});
|
|
64
46
|
}
|
|
65
47
|
// 3. Loading last
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-view.js","sourceRoot":"","sources":["../../src/components/cache-view.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAE5F,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"cache-view.js","sourceRoot":"","sources":["../../src/components/cache-view.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAE5F,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AA+BpC,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAAE,KAAiB,EAAe,EAAE,CAC3E,CACE,gBAAC,MAAM,IAAC,MAAM,EAAC,OAAO,EAAC,KAAK,EAAC,sBAAsB,EAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC;IACzE,gBAAC,MAAM,IAAC,OAAO,EAAC,UAAU,EAAC,OAAO,EAAE,KAAK,YAEhC,CACF,CACgB,CAAA;AAuC7B,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAyB;IACrD,aAAa,EAAE,kBAAkB;IACjC,GAAG,EAAE;QACH,UAAU,EAAE,gBAAgB,CAAC,UAAU,CAAC,UAAU;KACnD;IACD,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAsB,EAAE;QACjE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,KAAK,CAAA;QAEnE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QACpC,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,CAAA;QAE/C,MAAM,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,SAAS,OAAO,EAAE,EAAE,UAAU,CAAC,CAAA;QAE9D,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,CAAgB,qBAAqB,EAAE,IAAI,CAAC,CAAA;QAE1G,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBAC/B,sCAAsC;YACxC,CAAC,CAAC,CAAA;QACJ,CAAC,CAAA;QAED,iBAAiB;QACjB,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,MAAM,aAAa,GAAG,KAAK,IAAI,iBAAiB,CAAA;YAChD,OAAO,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAC3C,CAAC;QAED,gBAAgB;QAChB,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,IAAI,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClC,IAAI,mBAAmB,KAAK,OAAO,EAAE,CAAC;oBACpC,sBAAsB,CAAC,OAAO,CAAC,CAAA;oBAC/B,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;wBAC/B,sCAAsC;oBACxC,CAAC,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;iBAAM,IAAI,mBAAmB,KAAK,IAAI,EAAE,CAAC;gBACxC,sBAAsB,CAAC,IAAI,CAAC,CAAA;YAC9B,CAAC;YACD,OAAO,eAAe,CAAC,OAAO,EAAE;gBAC9B,IAAI,EAAE,MAAM;gBACZ,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;aACxB,CAA2B,CAAA;QAC9B,CAAC;QAED,kBAAkB;QAClB,OAAO,MAAM,IAAI,IAAI,CAAA;IACvB,CAAC;CACF,CAMe,CAAA"}
|
|
@@ -6,6 +6,13 @@ const TestContent = Shade({
|
|
|
6
6
|
shadowDomName: 'test-cache-content',
|
|
7
7
|
render: ({ props }) => createComponent("span", { className: "content-value" }, props.data.value),
|
|
8
8
|
});
|
|
9
|
+
const TestContentWithLabel = Shade({
|
|
10
|
+
shadowDomName: 'test-cache-content-with-label',
|
|
11
|
+
render: ({ props }) => (createComponent("span", { className: "content-value" },
|
|
12
|
+
props.label,
|
|
13
|
+
": ",
|
|
14
|
+
props.data.value)),
|
|
15
|
+
});
|
|
9
16
|
const renderCacheView = async (cache, args, options) => {
|
|
10
17
|
const el = (createComponent("div", null,
|
|
11
18
|
createComponent(CacheView, { cache: cache, args: args, content: TestContent, loader: options?.loader, error: options?.error })));
|
|
@@ -181,5 +188,42 @@ describe('CacheView', () => {
|
|
|
181
188
|
cache[Symbol.dispose]();
|
|
182
189
|
});
|
|
183
190
|
});
|
|
191
|
+
describe('contentProps', () => {
|
|
192
|
+
it('should forward contentProps to the content component', async () => {
|
|
193
|
+
const cache = new Cache({ load: async (key) => `Hello ${key}` });
|
|
194
|
+
await cache.get('world');
|
|
195
|
+
const el = (createComponent("div", null,
|
|
196
|
+
createComponent(CacheView, { cache: cache, args: ['world'], content: TestContentWithLabel, contentProps: { label: 'Greeting' } })));
|
|
197
|
+
const cacheView = el.firstElementChild;
|
|
198
|
+
cacheView.updateComponent();
|
|
199
|
+
await flushUpdates();
|
|
200
|
+
const contentEl = cacheView.querySelector('test-cache-content-with-label');
|
|
201
|
+
expect(contentEl).not.toBeNull();
|
|
202
|
+
contentEl.updateComponent();
|
|
203
|
+
await flushUpdates();
|
|
204
|
+
const valueEl = contentEl.querySelector('.content-value');
|
|
205
|
+
expect(valueEl?.textContent).toBe('Greeting: Hello world');
|
|
206
|
+
cache[Symbol.dispose]();
|
|
207
|
+
});
|
|
208
|
+
it('should forward contentProps when cache entry is obsolete', async () => {
|
|
209
|
+
const loadFn = vi.fn(async (key) => `Hello ${key}`);
|
|
210
|
+
const cache = new Cache({ load: loadFn });
|
|
211
|
+
await cache.get('world');
|
|
212
|
+
cache.setObsolete('world');
|
|
213
|
+
const el = (createComponent("div", null,
|
|
214
|
+
createComponent(CacheView, { cache: cache, args: ['world'], content: TestContentWithLabel, contentProps: { label: 'Stale' } })));
|
|
215
|
+
const cacheView = el.firstElementChild;
|
|
216
|
+
cacheView.updateComponent();
|
|
217
|
+
await flushUpdates();
|
|
218
|
+
const contentEl = cacheView.querySelector('test-cache-content-with-label');
|
|
219
|
+
expect(contentEl).not.toBeNull();
|
|
220
|
+
contentEl.updateComponent();
|
|
221
|
+
await flushUpdates();
|
|
222
|
+
const valueEl = contentEl.querySelector('.content-value');
|
|
223
|
+
expect(valueEl?.textContent).toBe('Stale: Hello world');
|
|
224
|
+
expect(loadFn).toHaveBeenCalledTimes(2);
|
|
225
|
+
cache[Symbol.dispose]();
|
|
226
|
+
});
|
|
227
|
+
});
|
|
184
228
|
});
|
|
185
229
|
//# sourceMappingURL=cache-view.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-view.spec.js","sourceRoot":"","sources":["../../src/components/cache-view.spec.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cache-view.spec.js","sourceRoot":"","sources":["../../src/components/cache-view.spec.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@furystack/shades-common-components",
|
|
3
|
-
"version": "13.
|
|
3
|
+
"version": "13.1.0",
|
|
4
4
|
"description": "Common UI components for FuryStack Shades",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
@@ -49,9 +49,9 @@
|
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"@furystack/cache": "^6.0.0",
|
|
52
|
-
"@furystack/core": "^15.2.
|
|
52
|
+
"@furystack/core": "^15.2.2",
|
|
53
53
|
"@furystack/inject": "^12.0.30",
|
|
54
|
-
"@furystack/shades": "^12.2.
|
|
54
|
+
"@furystack/shades": "^12.2.4",
|
|
55
55
|
"@furystack/utils": "^8.1.10",
|
|
56
56
|
"path-to-regexp": "^8.3.0"
|
|
57
57
|
},
|
|
@@ -10,6 +10,15 @@ const TestContent = Shade<{ data: CacheWithValue<string> }>({
|
|
|
10
10
|
render: ({ props }) => <span className="content-value">{props.data.value}</span>,
|
|
11
11
|
})
|
|
12
12
|
|
|
13
|
+
const TestContentWithLabel = Shade<{ data: CacheWithValue<string>; label: string }>({
|
|
14
|
+
shadowDomName: 'test-cache-content-with-label',
|
|
15
|
+
render: ({ props }) => (
|
|
16
|
+
<span className="content-value">
|
|
17
|
+
{props.label}: {props.data.value}
|
|
18
|
+
</span>
|
|
19
|
+
),
|
|
20
|
+
})
|
|
21
|
+
|
|
13
22
|
const renderCacheView = async (
|
|
14
23
|
cache: Cache<string, [string]>,
|
|
15
24
|
args: [string],
|
|
@@ -210,4 +219,58 @@ describe('CacheView', () => {
|
|
|
210
219
|
cache[Symbol.dispose]()
|
|
211
220
|
})
|
|
212
221
|
})
|
|
222
|
+
|
|
223
|
+
describe('contentProps', () => {
|
|
224
|
+
it('should forward contentProps to the content component', async () => {
|
|
225
|
+
const cache = new Cache<string, [string]>({ load: async (key) => `Hello ${key}` })
|
|
226
|
+
await cache.get('world')
|
|
227
|
+
|
|
228
|
+
const el = (
|
|
229
|
+
<div>
|
|
230
|
+
<CacheView
|
|
231
|
+
cache={cache}
|
|
232
|
+
args={['world']}
|
|
233
|
+
content={TestContentWithLabel}
|
|
234
|
+
contentProps={{ label: 'Greeting' }}
|
|
235
|
+
/>
|
|
236
|
+
</div>
|
|
237
|
+
)
|
|
238
|
+
const cacheView = el.firstElementChild as JSX.Element
|
|
239
|
+
cacheView.updateComponent()
|
|
240
|
+
await flushUpdates()
|
|
241
|
+
|
|
242
|
+
const contentEl = cacheView.querySelector('test-cache-content-with-label') as JSX.Element
|
|
243
|
+
expect(contentEl).not.toBeNull()
|
|
244
|
+
contentEl.updateComponent()
|
|
245
|
+
await flushUpdates()
|
|
246
|
+
const valueEl = contentEl.querySelector('.content-value')
|
|
247
|
+
expect(valueEl?.textContent).toBe('Greeting: Hello world')
|
|
248
|
+
cache[Symbol.dispose]()
|
|
249
|
+
})
|
|
250
|
+
|
|
251
|
+
it('should forward contentProps when cache entry is obsolete', async () => {
|
|
252
|
+
const loadFn = vi.fn(async (key: string) => `Hello ${key}`)
|
|
253
|
+
const cache = new Cache<string, [string]>({ load: loadFn })
|
|
254
|
+
await cache.get('world')
|
|
255
|
+
cache.setObsolete('world')
|
|
256
|
+
|
|
257
|
+
const el = (
|
|
258
|
+
<div>
|
|
259
|
+
<CacheView cache={cache} args={['world']} content={TestContentWithLabel} contentProps={{ label: 'Stale' }} />
|
|
260
|
+
</div>
|
|
261
|
+
)
|
|
262
|
+
const cacheView = el.firstElementChild as JSX.Element
|
|
263
|
+
cacheView.updateComponent()
|
|
264
|
+
await flushUpdates()
|
|
265
|
+
|
|
266
|
+
const contentEl = cacheView.querySelector('test-cache-content-with-label') as JSX.Element
|
|
267
|
+
expect(contentEl).not.toBeNull()
|
|
268
|
+
contentEl.updateComponent()
|
|
269
|
+
await flushUpdates()
|
|
270
|
+
const valueEl = contentEl.querySelector('.content-value')
|
|
271
|
+
expect(valueEl?.textContent).toBe('Stale: Hello world')
|
|
272
|
+
expect(loadFn).toHaveBeenCalledTimes(2)
|
|
273
|
+
cache[Symbol.dispose]()
|
|
274
|
+
})
|
|
275
|
+
})
|
|
213
276
|
})
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Cache, CacheWithValue } from '@furystack/cache'
|
|
2
2
|
import { hasCacheValue, isFailedCacheResult, isObsoleteCacheResult } from '@furystack/cache'
|
|
3
|
-
import type { ShadeComponent } from '@furystack/shades'
|
|
3
|
+
import type { PartialElement, ShadeComponent } from '@furystack/shades'
|
|
4
4
|
import { Shade, createComponent } from '@furystack/shades'
|
|
5
5
|
|
|
6
6
|
import { cssVariableTheme } from '../services/css-variable-theme.js'
|
|
@@ -11,14 +11,19 @@ import { Result } from './result.js'
|
|
|
11
11
|
* Props for the CacheView component.
|
|
12
12
|
* @typeParam TData - The type of data stored in the cache
|
|
13
13
|
* @typeParam TArgs - The tuple type of arguments used to identify the cache entry
|
|
14
|
+
* @typeParam TContentProps - The full props type of the content component (must include `data`)
|
|
14
15
|
*/
|
|
15
|
-
export type CacheViewProps<
|
|
16
|
+
export type CacheViewProps<
|
|
17
|
+
TData,
|
|
18
|
+
TArgs extends any[],
|
|
19
|
+
TContentProps extends { data: CacheWithValue<TData> } = { data: CacheWithValue<TData> },
|
|
20
|
+
> = {
|
|
16
21
|
/** The cache instance to observe and control */
|
|
17
22
|
cache: Cache<TData, TArgs>
|
|
18
23
|
/** The arguments identifying which cache entry to display */
|
|
19
24
|
args: TArgs
|
|
20
|
-
/** Shades component rendered when a value is available (loaded or obsolete).
|
|
21
|
-
content: ShadeComponent<
|
|
25
|
+
/** Shades component rendered when a value is available (loaded or obsolete). */
|
|
26
|
+
content: ShadeComponent<TContentProps>
|
|
22
27
|
/** Optional custom loader element. Default: null (nothing shown when loading). */
|
|
23
28
|
loader?: JSX.Element
|
|
24
29
|
/**
|
|
@@ -27,7 +32,9 @@ export type CacheViewProps<TData, TArgs extends any[]> = {
|
|
|
27
32
|
* If not provided, a default Result + retry Button is shown.
|
|
28
33
|
*/
|
|
29
34
|
error?: (error: unknown, retry: () => void) => JSX.Element
|
|
30
|
-
}
|
|
35
|
+
} & (keyof Omit<TContentProps, 'data' | keyof PartialElement<HTMLElement>> extends never
|
|
36
|
+
? { contentProps?: never }
|
|
37
|
+
: { contentProps: Omit<TContentProps, 'data' | keyof PartialElement<HTMLElement>> })
|
|
31
38
|
|
|
32
39
|
const getDefaultErrorUi = (error: unknown, retry: () => void): JSX.Element =>
|
|
33
40
|
(
|
|
@@ -55,15 +62,33 @@ const getDefaultErrorUi = (error: unknown, retry: () => void): JSX.Element =>
|
|
|
55
62
|
* })
|
|
56
63
|
*
|
|
57
64
|
* <CacheView cache={userCache} args={[userId]} content={MyContent} />
|
|
65
|
+
*
|
|
66
|
+
* // With custom content props
|
|
67
|
+
* const MyContentWithLabel = Shade<{ data: CacheWithValue<User>; label: string }>({
|
|
68
|
+
* shadowDomName: 'my-content-with-label',
|
|
69
|
+
* render: ({ props }) => <div>{props.label}: {props.data.value.name}</div>,
|
|
70
|
+
* })
|
|
71
|
+
*
|
|
72
|
+
* <CacheView cache={userCache} args={[userId]} content={MyContentWithLabel} contentProps={{ label: 'User' }} />
|
|
58
73
|
* ```
|
|
59
74
|
*/
|
|
60
|
-
|
|
75
|
+
/** @internal Ungeneric props used by the Shade runtime; the public generic signature is applied via the export cast. */
|
|
76
|
+
type InternalCacheViewProps = {
|
|
77
|
+
cache: Cache<unknown, unknown[]>
|
|
78
|
+
args: unknown[]
|
|
79
|
+
content: ShadeComponent<{ data: CacheWithValue<unknown> }>
|
|
80
|
+
contentProps?: Record<string, unknown>
|
|
81
|
+
loader?: JSX.Element
|
|
82
|
+
error?: (error: unknown, retry: () => void) => JSX.Element
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export const CacheView = Shade<InternalCacheViewProps>({
|
|
61
86
|
shadowDomName: 'shade-cache-view',
|
|
62
87
|
css: {
|
|
63
88
|
fontFamily: cssVariableTheme.typography.fontFamily,
|
|
64
89
|
},
|
|
65
90
|
render: ({ props, useObservable, useState }): JSX.Element | null => {
|
|
66
|
-
const { cache, args, content, loader, error } = props
|
|
91
|
+
const { cache, args, content, loader, error, contentProps } = props
|
|
67
92
|
|
|
68
93
|
const argsKey = JSON.stringify(args)
|
|
69
94
|
const observable = cache.getObservable(...args)
|
|
@@ -96,12 +121,19 @@ export const CacheView: <TData, TArgs extends any[]>(props: CacheViewProps<TData
|
|
|
96
121
|
} else if (lastReloadedArgsKey !== null) {
|
|
97
122
|
setLastReloadedArgsKey(null)
|
|
98
123
|
}
|
|
99
|
-
return createComponent(content
|
|
124
|
+
return createComponent(content, {
|
|
100
125
|
data: result,
|
|
126
|
+
...(contentProps ?? {}),
|
|
101
127
|
}) as unknown as JSX.Element
|
|
102
128
|
}
|
|
103
129
|
|
|
104
130
|
// 3. Loading last
|
|
105
131
|
return loader ?? null
|
|
106
132
|
},
|
|
107
|
-
})
|
|
133
|
+
}) as unknown as <
|
|
134
|
+
TData,
|
|
135
|
+
TArgs extends any[],
|
|
136
|
+
TContentProps extends { data: CacheWithValue<TData> } = { data: CacheWithValue<TData> },
|
|
137
|
+
>(
|
|
138
|
+
props: CacheViewProps<TData, TArgs, TContentProps>,
|
|
139
|
+
) => JSX.Element
|