import { useRef, createElement, Component } from '@wordpress/element'
import DashboardContext, { Provider, getDefaultValue } from './context'
import Heading from './Heading'
import {
Router,
Link,
Match,
Location,
LocationProvider,
navigate,
createHistory,
} from '@reach/router'
import ctEvents from 'ct-events'
import { Transition, animated } from 'react-spring/renderprops'
window.ctDashboardLocalizations.DashboardContext = DashboardContext
import Navigation from './Navigation'
import Home from './screens/Home'
import RecommendedPlugins from './screens/RecommendedPlugins'
import Changelog from './screens/Changelog'
import windowHashSource from './window-hash-source'
let history = createHistory(windowHashSource())
/*
ctEvents.on('ct:dashboard:routes', r =>
r.push({
Component: () =>
hello
,
path: '/test'
})
)
*/
const SpringRouter = ({ children }) => {
const transitionRef = useRef()
return (
{({ location, navigate, history, ...rest }) => {
const nonAnimatedChildren = (location) => (
{children}
)
return (
{
transitionRef.current = r
}}
items={location}
initial={null}
immediate={(location.state || {}).hasNoChange}
keys={(location) => location.pathname}
from={{ opacity: 0 }}
enter={[{ opacity: 1 }]}
leave={[{ opacity: 0 }]}
config={(key, phase) => {
return phase === 'leave'
? {
duration: 300,
}
: {
delay: 300,
duration: 300,
}
}}>
{(location, state, i) => {
if (
(location.state || {}).hasNoChange &&
transitionRef.current.state.transitions
.length === 2 &&
transitionRef.current.state.transitions.every(
(t) =>
t.item.pathname.indexOf('extensions') >
-1
)
) {
return () => nonAnimatedChildren(location)
}
return (props) => {
return (
{nonAnimatedChildren(location)}
)
}
}}
)
}}
)
}
const FadeTransitionRouter = (props) => (
{({ location }) => (
{/* the only difference between a router animation and
any other animation is that you have to pass the
location to the router so the old screen renders
the "old location" */}
{props.children}
)}
)
export default class Dashboard extends Component {
render() {
const userRoutes = []
ctEvents.trigger('ct:dashboard:routes', userRoutes)
return (
{userRoutes.map(
({ Component, key, path, ...props }) => (
)
)}
)
}
}