PluginProbe ʕ •ᴥ•ʔ
Presto Player / trunk
Presto Player vtrunk
4.3.0 4.2.4 4.2.3 4.2.2 4.2.0 4.2.1 trunk 1.10.0 1.10.1 1.10.2 1.11.0 1.12.0 1.13.0 1.14.0 1.14.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.13 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.2.0 2.2.1 2.2.2 2.2.3 2.2.3-beta1 2.3.0 2.3.1 2.3.2 2.3.3 3.0.0 3.0.0-beta1 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.1.0 3.1.1 3.1.2 3.1.3 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4
presto-player / src / router / index.js
presto-player / src / router Last commit date
context.js 5 years ago index.js 3 years ago link.js 3 years ago route.js 5 years ago utils.js 5 years ago
index.js
79 lines
1 import { Component } from "@wordpress/element";
2 import { locationToRoute } from "./utils";
3 import { history, RouterContext } from "./context";
4 import { Route } from "./route";
5 import { Link } from "./link";
6 import { match } from "path-to-regexp";
7
8 class Router extends Component {
9 constructor(props) {
10 super(props);
11
12 // Convert our routes into an array for easy 404 checking
13 this.routes = Object.keys(props.routes).map(
14 (key) => props.routes[key].path
15 );
16
17 // Listen for path changes from the history API
18 this.unlisten = history.listen(this.handleRouteChange);
19
20 const route = locationToRoute(history.location);
21 const { search } = history.location;
22
23 // Define the initial RouterContext value
24 this.state = {
25 route,
26 defaultRoute: props?.defaultRoute
27 ? `${search}#${props?.defaultRoute}`
28 : `${search}#/`,
29 };
30 }
31
32 componentWillUnmount() {
33 // Stop listening for changes if the Router component unmounts
34 this.unlisten();
35 }
36
37 handleRouteChange = (location) => {
38 const route = locationToRoute(location?.location);
39 this.setState({ route: route });
40 };
41
42 render() {
43 // Define our variables
44 const { children, NotFound } = this.props;
45 const { route, defaultRoute } = this.state;
46
47 if (!route.hash) {
48 history.push(defaultRoute);
49 return <div></div>;
50 }
51
52 let matched = false;
53 // match route
54 (this.routes || []).forEach((name) => {
55 const checkMatch = match(route.hash.substr(1));
56 const isMatched = checkMatch(`${route.hash.substr(1)}`);
57 if (!isMatched) {
58 return;
59 }
60 matched = {
61 name,
62 data: isMatched,
63 };
64 });
65
66 const routerContextValue = { route, matched };
67
68 // Check if 404 if no route matched
69 const is404 = !matched;
70
71 return (
72 <RouterContext.Provider value={routerContextValue}>
73 {is404 ? <div>Not found</div> : children}
74 </RouterContext.Provider>
75 );
76 }
77 }
78 export { history, RouterContext, Router, Route, Link };
79