@diskette/use-render 0.4.0 → 0.5.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/README.md +4 -4
- package/dist/types.d.ts +2 -2
- package/dist/use-render.js +3 -3
- package/dist/use-render.test.jsx +3 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -69,7 +69,7 @@ function Button(props: ButtonProps) {
|
|
|
69
69
|
|
|
70
70
|
```tsx
|
|
71
71
|
<Button
|
|
72
|
-
render={(
|
|
72
|
+
render={(props, state) => (
|
|
73
73
|
<a {...props} href="/path" data-pressed={state.isPressed} />
|
|
74
74
|
)}
|
|
75
75
|
>
|
|
@@ -184,12 +184,12 @@ type StyleResolver<S> =
|
|
|
184
184
|
| undefined
|
|
185
185
|
```
|
|
186
186
|
|
|
187
|
-
### `Renderer<
|
|
187
|
+
### `Renderer<S>`
|
|
188
188
|
|
|
189
189
|
```ts
|
|
190
|
-
type Renderer<
|
|
191
|
-
state: S,
|
|
190
|
+
type Renderer<S> = (
|
|
192
191
|
props: ComponentPropsWithRef<T>,
|
|
192
|
+
state: S,
|
|
193
193
|
) => ReactNode
|
|
194
194
|
```
|
|
195
195
|
|
package/dist/types.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { ComponentPropsWithRef, CSSProperties, ElementType, ReactNode } from 'react';
|
|
2
2
|
export type ClassNameResolver<State> = ((state: State, baseClassName?: string) => string | undefined) | string | undefined;
|
|
3
3
|
export type StyleResolver<State> = ((state: State, baseStyle?: CSSProperties) => CSSProperties | undefined) | CSSProperties | undefined;
|
|
4
|
-
export type Renderer<S> = (
|
|
4
|
+
export type Renderer<S> = (props: React.HTMLAttributes<any> & {
|
|
5
5
|
ref?: React.Ref<any> | undefined;
|
|
6
|
-
}) => ReactNode;
|
|
6
|
+
}, state: S) => ReactNode;
|
|
7
7
|
export type DataAttributes = Record<`data-${string}`, string | number | boolean>;
|
|
8
8
|
export type BaseComponentProps<T extends ElementType> = Omit<ComponentPropsWithRef<T>, 'children' | 'className' | 'style'>;
|
package/dist/use-render.js
CHANGED
|
@@ -49,12 +49,12 @@ export function useRender(tag, state, options) {
|
|
|
49
49
|
if (isValidElement(render)) {
|
|
50
50
|
return cloneElement(render, resolvedProps, resolvedChildren);
|
|
51
51
|
}
|
|
52
|
-
// For `<Component render={(
|
|
52
|
+
// For `<Component render={(props) => <a {...props} />)} />`
|
|
53
53
|
if (isFunction(render)) {
|
|
54
|
-
return render(
|
|
54
|
+
return render({
|
|
55
55
|
...resolvedProps,
|
|
56
56
|
children: resolvedChildren,
|
|
57
|
-
});
|
|
57
|
+
}, state);
|
|
58
58
|
}
|
|
59
59
|
return createElement(tag, resolvedProps, resolvedChildren ?? baseChildren);
|
|
60
60
|
}
|
package/dist/use-render.test.jsx
CHANGED
|
@@ -126,9 +126,9 @@ describe('useRender', () => {
|
|
|
126
126
|
await expect.element(link).toHaveTextContent('Link');
|
|
127
127
|
await expect.element(link).toHaveAttribute('href', '/path');
|
|
128
128
|
});
|
|
129
|
-
test('render function receives
|
|
129
|
+
test('render function receives props and state', async () => {
|
|
130
130
|
const Button = createBtn();
|
|
131
|
-
const { getByRole } = await render(<Button className="custom" render={(
|
|
131
|
+
const { getByRole } = await render(<Button className="custom" render={(props, state) => (<a {...props} href="/path" data-active={state.isActive} onClick={(e) => {
|
|
132
132
|
e.preventDefault();
|
|
133
133
|
props.onClick?.(e);
|
|
134
134
|
}}/>)}>
|
|
@@ -153,7 +153,7 @@ describe('useRender', () => {
|
|
|
153
153
|
});
|
|
154
154
|
test('function render prop with children as function', async () => {
|
|
155
155
|
const Button = createBtn();
|
|
156
|
-
const { getByRole } = await render(<Button render={(
|
|
156
|
+
const { getByRole } = await render(<Button render={(props, state) => (<a {...props} href="/path" data-active={state.isActive} onClick={(e) => {
|
|
157
157
|
e.preventDefault();
|
|
158
158
|
props.onClick?.(e);
|
|
159
159
|
}}/>)}>
|