///
import * as React from "react";
import { coreLogger } from "@applicaster/zapp-react-native-utils/logger";
import { findComponentByType } from "@applicaster/zapp-react-native-utils/pluginUtils";
import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks";
type Decorator = (component: React.Component) => React.Component;
type Watcher = Array;
type Props = {
componentType: string;
decorators?: Decorator | Array;
};
export function useComponentResolver(
{ componentType, decorators }: Props,
watchers?: Watcher
): React.ComponentType {
const { plugins, components } = usePickFromState(["plugins", "components"]);
const component = React.useMemo(
() =>
findComponentByType({
components,
componentType,
decorators,
plugins,
}),
watchers
);
if (!component) {
coreLogger.warn({
message: `useComponentResolver: Component of type ${componentType} not found`,
});
}
return component;
}