Skip to content
This repository was archived by the owner on Jul 6, 2025. It is now read-only.

Commit 52ed72c

Browse files
author
X
authored
Merge pull request #45 from alfredosalzillo/master
feat: add withDeno HOC
2 parents 364bad1 + 5de0367 commit 52ed72c

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

hooks.ts

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useContext, useEffect, useState } from 'https://esm.sh/react'
1+
import React, { useContext, useEffect, useState } from 'https://esm.sh/react'
22
import { RouterContext } from './context.ts'
33
import { AsyncUseDenoError } from './error.ts'
44
import events from './events.ts'
@@ -52,3 +52,27 @@ export function useDeno<T = any>(callback: () => (T | Promise<T>), browser?: boo
5252

5353
return data
5454
}
55+
56+
/**
57+
* `withDeno` allows you to use `useDeno` hook with class component.
58+
*
59+
* ```javascript
60+
* class MyComponent extends React.Component {
61+
* render() {
62+
* return <p>{this.props.version.deno}</p>
63+
* }
64+
* }
65+
* export default withDeno(() => Deno.version)(MyComponent)
66+
* ```
67+
*/
68+
export function withDeno<T>(callback: () => (T | Promise<T>), browser?: boolean, deps?: ReadonlyArray<any>) {
69+
return function <P extends T>(Component: React.ComponentType<P>): React.ComponentType<Exclude<P, keyof T>> {
70+
return function WithDeno(props: Exclude<P, keyof T>) {
71+
const denoProps = useDeno(callback, browser, deps)
72+
if (typeof denoProps === 'object') {
73+
return React.createElement(Component, { ...props, ...denoProps })
74+
}
75+
return React.createElement(Component, props)
76+
}
77+
}
78+
}

0 commit comments

Comments
 (0)