-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathTypes.hx
85 lines (76 loc) · 2.35 KB
/
Types.hx
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
package react.router;
import haxe.extern.EitherType;
import haxe.Constraints;
import react.ReactComponent;
#if (haxe_ver <= 3.3)
typedef Any = Dynamic;
#end
typedef HashHistory = Router<Any, Any>;
typedef BrowserHistory = Router<Any, Any>;
typedef RouteProps = RoutePropsOf<Any, Any>;
typedef RoutePropsOfParams<P> = RoutePropsOf<P, Any>;
typedef RoutePropsOfQuery<Q> = RoutePropsOf<Any, Q>;
typedef Location<Q> = {
pathname:Pathname,
search:QueryString,
query:Query<Q>,
state:LocationState,
action:Action,
key:LocationKey,
};
typedef RoutePropsOf<P, Q> = {
route:Route<P, Q>,
router:Router<P, Q>,
params:Params<P>,
location:Location<Q>,
}
private typedef Object = Any;
#if haxe4 private enum #else @:enum private #end abstract Action(String) {
var Push = 'PUSH';
var Replace = 'REPLACE';
var Pop = 'POP';
}
private typedef Component = EitherType<Class<ReactComponent>, String>;
private typedef EnterHook<P, Q> = RouterState<P, Q>->RedirectFunction<Q>->?Function->Any;
private typedef Hash = String;
private typedef LeaveHook<P, Q> = RouterState<P, Q>->Any;
private typedef LocationDescriptorObject<Q> = {
pathname:Pathname,
search:QueryString,
query:Query<Q>,
state:LocationState,
};
private typedef LocationDescriptor<Q> = EitherType<LocationDescriptorObject<Q>, Path>;
private typedef LocationKey = String;
private typedef LocationState = Object;
private typedef Params<T> = T;
private typedef Path = String; // Pathname + QueryString + Hash;
private typedef Pathname = String;
private typedef Query<T> = T;
private typedef QueryString = String;
private typedef RedirectFunction<Q> = ?LocationState->EitherType<Pathname, Path>->?Query<Q>->Void;
private typedef Route<P, Q> = {
component:RouteComponent,
?path:RoutePattern,
?onEnter:EnterHook<P, Q>,
?onLeave:LeaveHook<P, Q>,
}
private typedef RouteComponent = Component;
private typedef RouteConfig<P, Q> = Array<Route<P, Q>>;
private typedef RouteHook<Q> = ?Location<Q>->Any;
private typedef RoutePattern = String;
private typedef Router<P, Q> = {
push:LocationDescriptor<Q>->Void,
replace:LocationDescriptor<Q>->Void,
go:Int->Void,
goBack:Void->Void,
goForward:Void->Void,
setRouteLeaveHook:Route<P, Q>->RouteHook<Q>->Function,
isActive:LocationDescriptor<Q>->Bool->Void,
}
private typedef RouterState<P, Q> = {
location:Location<Q>,
routes:Array<Route<P, Q>>,
params:Params<P>,
components:Array<Component>,
}