All files / SASQRoute SASQRoute.js

100% Statements 16/16
85.71% Branches 6/7
100% Functions 6/6
100% Lines 15/15

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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102                      27x     36x 36x             45x   45x 45x   45x         45x 4x     45x     45x   45x       45x                         10x                                   27x                                                  
import { forwardRef, useImperativeHandle, useRef } from 'react';
import PropTypes from 'prop-types';
 
import {
  Route,
  Switch
} from 'react-router-dom';
 
import { SASQLookupComponent } from '../SASQLookupComponent';
import SASQViewComponent from '../SASQViewComponent';
 
const SASQRoute = forwardRef(({
  children,
  fetchParameters,
  getPathLookup = (path) => `${path}/:id?`,
  getPathView = (path) => `${path}/:id`,
  SASQLookupComponent: RouteLookupComponent = SASQLookupComponent,
  path,
  SASQViewComponent: RouteViewComponent = SASQViewComponent,
  ...props
}, ref) => {
  // Grab the SASQ_MAP and tweak it
  const { SASQ_MAP = {} } = fetchParameters;
 
  const lookupRef = useRef();
  const viewRef = useRef();
 
  useImperativeHandle(ref, () => ({
    ...lookupRef.current,
    ...viewRef.current
  }));
 
  if (!SASQ_MAP.perPage) {
    SASQ_MAP.perPage = 25;
  }
 
  SASQ_MAP.stats = true;
 
  // Reinsert the SASQ_MAP
  fetchParameters.SASQ_MAP = SASQ_MAP;
 
  return (
    <Route
      path={getPathLookup(path)}
      render={routeProps => {
        return (
          <RouteLookupComponent
            ref={lookupRef}
            {...routeProps}
            fetchParameters={fetchParameters}
            path={path}
            {...props}
          >
            <Switch>
              {children}
              <Route
                path={getPathView(path)}
                render={innerProps => (
                  <RouteViewComponent
                    ref={viewRef}
                    {...innerProps}
                    fetchParameters={fetchParameters}
                    path={path}
                    ViewComponent={props.ViewComponent}
                    {...props}
                  />
                )}
              />
            </Switch>
          </RouteLookupComponent>
        );
      }}
    />
  );
});
 
SASQRoute.propTypes = {
  children: PropTypes.oneOfType([
    PropTypes.node,
    PropTypes.element,
    PropTypes.func
  ]),
  fetchParameters: PropTypes.object,
  getPathLookup: PropTypes.func,
  getPathView: PropTypes.func,
  path: PropTypes.string,
  SASQLookupComponent: PropTypes.oneOfType([
    PropTypes.func,
    PropTypes.node
  ]),
  SASQViewComponent: PropTypes.oneOfType([
    PropTypes.func,
    PropTypes.node
  ]),
  ViewComponent: PropTypes.oneOfType([
    PropTypes.func,
    PropTypes.node
  ])
};
 
export default SASQRoute;