heartwood every commit a ring
1.3 KB raw
import React, { createRef } from "react";
import App from "next/app";
import "../styles/globals.css";
import { TransitionGroup, CSSTransition } from "react-transition-group";

import Grid from "../components/grid";
import Sidebar from "../components/sidebar";
import Menu from "../components/menu";
import Loader from "../components/loader";
import Mouse from "../components/mouse";

class MyApp extends App {
  constructor(props) {
    super(props);
    this.transitionNodeRefs = new Map();
  }

  getNodeRef(route) {
    if (!this.transitionNodeRefs.has(route)) {
      this.transitionNodeRefs.set(route, createRef());
    }
    return this.transitionNodeRefs.get(route);
  }

  render() {
    const { Component, pageProps, router } = this.props;
    const nodeRef = this.getNodeRef(router.route);

    return (
      <>
        <Mouse />
        <Loader />
        <Sidebar />
        <Menu />
        <TransitionGroup component={null}>
          <CSSTransition
            key={router.route}
            appear
            timeout={250}
            classNames="transition"
            nodeRef={nodeRef}
          >
            <div className="transition" ref={nodeRef}>
              <Grid>
                <Component {...pageProps} />
              </Grid>
            </div>
          </CSSTransition>
        </TransitionGroup>
      </>
    );
  }
}

export default MyApp;