From 7b05e692166db343ea6ed0dd074829ba72d525e1 Mon Sep 17 00:00:00 2001 From: Yan Lyra Date: Sat, 24 May 2025 23:32:19 -0300 Subject: [PATCH 1/4] fix(ts): fixs the use of @ts-ignore when passing custom hooks --- src/index.tsx | 14 ++++++++++---- src/stories/02-CustomHooks.stories.tsx | 1 - 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index abb0b83..c16ad12 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -47,16 +47,22 @@ type CoreHelpers = typeof coreHelpers; /* ----------------------------------------------------------- * * 4 ▸ default component * * ----------------------------------------------------------- */ -export default function RenderHooks< - TValue extends Record = {}, ->(props: { +type HooksMap = Record & { + length?: never; // This prevents arrays +}; + +export default function RenderHooks({ + children, + hooks = {} as TValue, +}: { hooks?: TValue; children: (helpers: CoreHelpers & TValue) => React.ReactNode; }): React.ReactElement { - const { hooks, children } = props; const helpers = React.useMemo( () => ({ ...coreHelpers, ...(hooks ?? {}) }), [hooks], ) as CoreHelpers & TValue; + return <>{children(helpers)}; } + diff --git a/src/stories/02-CustomHooks.stories.tsx b/src/stories/02-CustomHooks.stories.tsx index 99562df..11ffbe9 100644 --- a/src/stories/02-CustomHooks.stories.tsx +++ b/src/stories/02-CustomHooks.stories.tsx @@ -28,7 +28,6 @@ const useDebounce = (value: T, delay: number): T => { export function CustomHooksExample() { return ( <$ hooks={{ useToggle, useDebounce }}> - {/* @ts-ignore */} {({ useToggle, useDebounce, useState }) => { // Added useState for completeness const [open, toggle] = useToggle(false); const dOpen = useDebounce(open, 250); From cf6034243ea58bc3ab4a2ee23798f9b754b53848 Mon Sep 17 00:00:00 2001 From: Yan Lyra Date: Sat, 24 May 2025 23:37:25 -0300 Subject: [PATCH 2/4] chore: bump version to 0.2.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a51fbba..ca65bc9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "render-hooks", - "version": "0.2.0", + "version": "0.2.1", "description": "Inline render-block-stable React hooks", "main": "dist/index.js", "module": "dist/index.mjs", From c461a12ce00a7f1f6f7158e1ebee4030f6dc8fba Mon Sep 17 00:00:00 2001 From: Yan Lyra Date: Sun, 25 May 2025 14:40:08 -0300 Subject: [PATCH 3/4] chore: add jsdocs to hooks props with an example on how to use it --- src/index.tsx | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index c16ad12..2abf7e4 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -51,13 +51,35 @@ type HooksMap = Record & { length?: never; // This prevents arrays }; +type RenderHooksProps = { + /** + * Optionally pass in a map of hooks to use. + * + * @example + * + * ```tsx + * 'something', + * }}> + * {({ useSomething }) => { + * const something = useSomething(); + * return ( + * <> + *
{something}
+ * + * ); + * }} + *
+ * ``` + */ + hooks?: TValue; + children: (helpers: CoreHelpers & TValue) => React.ReactNode; +} + export default function RenderHooks({ children, hooks = {} as TValue, -}: { - hooks?: TValue; - children: (helpers: CoreHelpers & TValue) => React.ReactNode; -}): React.ReactElement { +}: RenderHooksProps): React.ReactElement { const helpers = React.useMemo( () => ({ ...coreHelpers, ...(hooks ?? {}) }), [hooks], From fdb85282a733e200f482b44f547f5acc071e8939 Mon Sep 17 00:00:00 2001 From: Yan Lyra Date: Thu, 29 May 2025 00:17:30 -0300 Subject: [PATCH 4/4] chore: update hooks to verify if value extends declared type Fn --- src/index.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 2abf7e4..d59839c 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -47,9 +47,7 @@ type CoreHelpers = typeof coreHelpers; /* ----------------------------------------------------------- * * 4 ▸ default component * * ----------------------------------------------------------- */ -type HooksMap = Record & { - length?: never; // This prevents arrays -}; +type HooksMap = Record type RenderHooksProps = { /** @@ -72,7 +70,9 @@ type RenderHooksProps = { * * ``` */ - hooks?: TValue; + hooks?: { + [K in keyof TValue]: TValue[K] extends Fn ? TValue[K] : `Please provide a valid function` + } children: (helpers: CoreHelpers & TValue) => React.ReactNode; }