-
Notifications
You must be signed in to change notification settings - Fork 225
/
routeObject.js
91 lines (71 loc) · 2.3 KB
/
routeObject.js
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
86
87
88
89
90
91
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// http:https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
import ReactDOM from "react-dom";
import Backbone from "backbone";
import _ from "lodash";
var RouteObject = function (options) {
this._options = options;
this.reactComponents = {};
this._configure(options || {});
this.initialize.apply(this, arguments);
};
/* How Route Object events work
Its now very simple. We don't want it to do much. It creates a list of routes. Then each route callback must return
a React component that will be rendered into the app
*/
// Piggy-back on Backbone's self-propagating extend function
RouteObject.extend = Backbone.Model.extend;
var routeObjectOptions = ["routes", "roles"];
_.extend(RouteObject.prototype, {
// Should these be default vals or empty funcs?
routes: {},
route: function () {},
roles: [],
initialize: function () {}
}, {
get: function (key) {
return _.isFunction(this[key]) ? this[key]() : this[key];
},
_configure: function (options) {
_.each(_.intersection(_.keys(options), routeObjectOptions), (key) => {
this[key] = options[key];
});
},
getRouteUrls: function () {
return _.keys(this.get('routes'));
},
hasRoute: function (route) {
if (this.get('routes')[route]) {
return true;
}
return false;
},
routeCallback: function (route, args) {
var routes = this.get('routes'),
routeObj = routes[route],
routeCallback;
if (typeof routeObj === 'object') {
routeCallback = this[routeObj.route];
} else {
routeCallback = this[routeObj];
}
return routeCallback.apply(this, args);
},
getRouteRoles: function (routeUrl) {
var route = this.get('routes')[routeUrl];
if ((typeof route === 'object') && route.roles) {
return route.roles;
}
return this.roles;
}
});
export default RouteObject;