import { <%= nameProperCase %>Model } from "<%= importPath %>";
import { use<%= nameProperCase %> } from "./use-<%= nameDashCase %>";

interface <%= nameProperCase %>Props {
  <%= nameCamelCase %>: <%= nameProperCase %>Model;
}

<% if (!singleton) { %>
interface Identifiable {
  id: string;
}
<% } %>

type HoC<%= nameProperCase %>Props = <%= nameProperCase %>Props<% if (!singleton) { %> & Identifiable<% } %>;
// react HOC to provide a <%= nameProperCase %> to a component
export function with<%= nameProperCase %><T extends HoC<%= nameProperCase %>Props = HoC<%= nameProperCase %>Props>(
  WrappedComponent: React.ComponentType<T>
) {
  return (props: Omit<T, keyof <%= nameProperCase %>Props>) => {
    const { model, status, KosModelLoader } = use<%= nameProperCase %>(<% if (!singleton) { %>props.id<% } %>);

    return (
      <KosModelLoader {...status}>
        <WrappedComponent {...(props as T)} <%= nameCamelCase %>={model} />
      </KosModelLoader>
    );
  };
}