import type { IContainer } from 'bottlejs'; import type { FC } from 'react'; import { useRef } from 'react'; export type FCWithDeps = FC & Partial; export function useDependencies(obj: Deps): Omit, keyof FC> { const depsRef = useRef(obj as Omit, keyof FC>); return depsRef.current; } export function componentFactory, keyof FC>>( Component: CompType, deps: ReadonlyArray, ) { return (container: IContainer, console = globalThis.console) => { deps.forEach((dep) => { const resolvedDependency = container[dep as string]; if (!resolvedDependency && process.env.NODE_ENV !== 'production') { console.error(`[Debug] Could not find "${dep as string}" dependency in container`); } // eslint-disable-next-line no-param-reassign Component[dep] = resolvedDependency; }); return Component; }; }