Explicitly wrap in ContainerProvider when calling renderWithStore

This commit is contained in:
Alejandro Celaya
2025-11-24 09:11:06 +01:00
parent 514162964d
commit d11358af59
12 changed files with 43 additions and 65 deletions

View File

@@ -30,8 +30,11 @@ export const useDependencies = <T extends unknown[]>(...names: string[]): T => {
}) as T;
};
type Optionalize<P, K extends keyof P> = Omit<P, K> & Partial<Pick<P, K>>;
/**
* Higher Order Component used to inject services into components as props.
* All dependencies become optional props so that they can still be explicitly set in tests if desired.
*/
export function withDependencies<
Props extends Record<string, unknown>,
@@ -39,16 +42,16 @@ export function withDependencies<
>(
Component: ComponentType<Props>,
dependencyNames: DependencyName[],
): ComponentType<Omit<Props, DependencyName>> {
): ComponentType<Optionalize<Props, DependencyName>> {
function Wrapper(props: Omit<Props, DependencyName>) {
const container = useContainer('withDependencies');
const container = useContext(ContainerContext);
// Inject services, unless they have been overridden by props passed from
// the parent component.
const dependencies: Partial<Record<DependencyName, unknown>> = {};
for (const dependency of dependencyNames) {
if (!(dependency in props)) {
dependencies[dependency] = container[dependency];
dependencies[dependency] = container?.[dependency];
}
}