Skip to content

Commit 07d617c

Browse files
committed
Add type params
1 parent 8ed6257 commit 07d617c

File tree

1 file changed

+38
-33
lines changed

1 file changed

+38
-33
lines changed

src/react/router/Types.hx

+38-33
Original file line numberDiff line numberDiff line change
@@ -4,76 +4,81 @@ import haxe.extern.EitherType;
44
import haxe.Constraints;
55
import react.ReactComponent;
66

7-
typedef HashHistory = Router;
8-
typedef BrowserHistory = Router;
9-
typedef RoutePropsOfParams<P> = RoutePropsOf<P, Dynamic>;
10-
typedef RoutePropsOfQuery<Q> = RoutePropsOf<Dynamic, Q>;
7+
#if (haxe_ver <= 3.3)
8+
typedef Any = Dynamic;
9+
#end
10+
11+
typedef HashHistory = Router<Any, Any>;
12+
typedef BrowserHistory = Router<Any, Any>;
13+
typedef RouteProps = RoutePropsOf<Any, Any>;
14+
typedef RoutePropsOfParams<P> = RoutePropsOf<P, Any>;
15+
typedef RoutePropsOfQuery<Q> = RoutePropsOf<Any, Q>;
1116

1217
typedef RoutePropsOf<P, Q> = {
13-
params:P,
14-
location:{
15-
query:Q,
16-
}
18+
route:Route<P, Q>,
19+
router:Router<P, Q>,
20+
params:Params<P>,
21+
location:Location<Q>,
1722
}
1823

19-
private typedef Object = Dynamic;
24+
private typedef Object = Any;
2025
@:enum
2126
private abstract Action(String) {
2227
var Push = 'PUSH';
2328
var Replace = 'REPLACE';
2429
var Pop = 'POP';
2530
}
2631
private typedef Component = EitherType<Class<ReactComponent>, String>;
27-
private typedef EnterHook = RouterState->RedirectFunction->?Function->Any;
32+
private typedef EnterHook<P, Q> = RouterState<P, Q>->RedirectFunction<Q>->?Function->Any;
2833
private typedef Hash = String;
29-
private typedef LeaveHook = RouterState->Any;
30-
private typedef Location = {
34+
private typedef LeaveHook<P, Q> = RouterState<P, Q>->Any;
35+
private typedef Location<Q> = {
3136
pathname:Pathname,
3237
search:QueryString,
33-
query:Query,
38+
query:Query<Q>,
3439
state:LocationState,
3540
action:Action,
3641
key:LocationKey,
3742
};
38-
private typedef LocationDescriptorObject = {
43+
private typedef LocationDescriptorObject<Q> = {
3944
pathname:Pathname,
4045
search:QueryString,
41-
query:Query,
46+
query:Query<Q>,
4247
state:LocationState,
4348
};
44-
private typedef LocationDescriptor = EitherType<LocationDescriptorObject, Path>;
49+
private typedef LocationDescriptor<Q> = EitherType<LocationDescriptorObject<Q>, Path>;
4550
private typedef LocationKey = String;
4651
private typedef LocationState = Object;
47-
private typedef Params = Object;
52+
private typedef Params<T> = T;
4853
private typedef Path = String; // Pathname + QueryString + Hash;
4954
private typedef Pathname = String;
50-
private typedef Query = Object;
55+
private typedef Query<T> = T;
5156
private typedef QueryString = String;
52-
private typedef RedirectFunction = ?LocationState->EitherType<Pathname, Path>->?Query->Void;
57+
private typedef RedirectFunction<Q> = ?LocationState->EitherType<Pathname, Path>->?Query<Q>->Void;
5358

54-
private typedef Route = {
59+
private typedef Route<P, Q> = {
5560
component:RouteComponent,
5661
?path:RoutePattern,
57-
?onEnter:EnterHook,
58-
?onLeave:LeaveHook,
62+
?onEnter:EnterHook<P, Q>,
63+
?onLeave:LeaveHook<P, Q>,
5964
}
6065

6166
private typedef RouteComponent = Component;
62-
private typedef RouteConfig = Array<Route>;
63-
private typedef RouteHook = ?Location->Any;
67+
private typedef RouteConfig<P, Q> = Array<Route<P, Q>>;
68+
private typedef RouteHook<Q> = ?Location<Q>->Any;
6469
private typedef RoutePattern = String;
65-
private typedef Router = {
66-
push:LocationDescriptor->Void,
67-
replace:LocationDescriptor->Void,
70+
private typedef Router<P, Q> = {
71+
push:LocationDescriptor<Q>->Void,
72+
replace:LocationDescriptor<Q>->Void,
6873
go:Int->Void,
6974
goBack:Void->Void,
7075
goForward:Void->Void,
71-
setRouteLeaveHook:Route->RouteHook->Function,
72-
isActive:LocationDescriptor->Bool->Void,
76+
setRouteLeaveHook:Route<P, Q>->RouteHook<Q>->Function,
77+
isActive:LocationDescriptor<Q>->Bool->Void,
7378
}
74-
private typedef RouterState = {
75-
location:Location,
76-
routes:Array<Route>,
77-
params:Params,
79+
private typedef RouterState<P, Q> = {
80+
location:Location<Q>,
81+
routes:Array<Route<P, Q>>,
82+
params:Params<P>,
7883
components:Array<Component>,
7984
}

0 commit comments

Comments
 (0)