All files / src/react-application react-application.tsx

100% Statements 37/37
100% Branches 5/5
100% Functions 2/2
100% Lines 37/37

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 381x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 20x 20x 20x 9x 9x 11x 11x 11x 1x 1x 9x 9x 9x 9x 9x 9x 9x 9x 9x 9x  
import type { DiContainerForInjection } from "@ogre-tools/injectable";
import { computedInjectManyInjectable } from "@ogre-tools/injectable-extension-for-mobx";
import { DiContextProvider } from "@ogre-tools/injectable-react";
import { observer } from "mobx-react";
import React from "react";
import {
  ReactApplicationHigherOrderComponent,
  reactApplicationHigherOrderComponentInjectionToken,
} from "./react-application-higher-order-component-injection-token";
 
import { ReactApplicationContent } from "./react-application-content";
 
interface ReactApplicationProps {
  di: DiContainerForInjection;
}
 
const render = (components: ReactApplicationHigherOrderComponent[]) => {
  const [Component, ...rest] = components;
 
  if (!Component) {
    return null;
  }
 
  return <Component>{render(rest)}</Component>;
};
 
export const ReactApplication = observer(({ di }: ReactApplicationProps) => {
  const computedInjectMany = di.inject(computedInjectManyInjectable);
 
  const higherOrderComponents = computedInjectMany(
    reactApplicationHigherOrderComponentInjectionToken,
  );
 
  const Components = [...higherOrderComponents.get(), ReactApplicationContent];
 
  return <DiContextProvider value={{ di }}>{render(Components)}</DiContextProvider>;
});