type BreadrumbsProps = {
    url: string;
    text: string;
    className?: string;
  };
  
  // This is material-ui. You can use any CSS-In-JS approach. 
  const useStyles = makeStyles(() => ({
    root: {
      display: 'block',
    },
    right: {
      float: 'right',
    },
    left: {
      float: 'left',
    },
    clear: {
      clear: 'both',
    },
    separator: {
      padding: '6px',
    },
  }));
  
  export const AppBreadcrumbs: React.FC<RouteComponentProps> = memo((props) => {
    const styles = useStyles();
    return (
      <>
        <Router primary={false}>
          <Bread path="/" url={'/'} text={'Home'} className={styles.left}>
            <Bread
              path={"/evaluation"}
              url={"/evaluation"}
              text={'Evaluation'}
            >
              <Bread
                path="instruments"
                url={'/evaluation/instruments'}
                text={'Instruments'}
              >
                <Bread
                  path=":classId/:period/:instrument/*"
                  url={'../'}
                  text={'Period'}
                ></Bread>
              </Bread>
              <Bread
                path="indicators"
                url={'/evaluation/indicators'}
                text={'Indicators'}
              ></Bread>
            </Bread>
            <Bread
              path={"/planning" + '/*'}
              url={"/planning"}
              text={'Indicators'}
            ></Bread>
            <Bread
              path={"/attendance" + '/*'}
              url={"/attendance"}
              text={'Asistencia'}
            ></Bread>
            <Bread
              path={"/scores" + '/*'}
              url={"/scores"}
              text={'Calificaciones'}
            ></Bread>
            <Bread
              path={"/content" + '/*'}
              url={"/content"}
              text={'Contenido de Clases'}
            ></Bread>
          </Bread>
        </Router>
        <div className={styles.clear} />
      </>
    );
  });
  
  export default AppBreadcrumbs;
  
  const Bread: React.FC<RouteComponentProps & BreadrumbsProps> = memo((props) => {
    const styles = useStyles();
    const shouldRenderCrumb = !props.location?.pathname.endsWith(
      props.path || '',
    );
    return (
      <div className={props.className}>
        <LinkButton size="small" variant="text" to={props.url}>
          {props.text}
        </LinkButton>
        {shouldRenderCrumb && React.Children.count(props.children) > 0 && (
          <div className={cls(styles.right)}>
            <div className={cls(styles.left, styles.separator)}>{'>'}</div>
  
            <div className={styles.left}>{props.children}</div>
          </div>
        )}
      </div>
    );
  });
  
Logo

React社区为您提供最前沿的新闻资讯和知识内容

更多推荐