Skip to content

Commit

Permalink
Made child state finder method allow recursion, added article listing…
Browse files Browse the repository at this point in the history
…s and curation pages
  • Loading branch information
zakhenry committed Aug 3, 2015
1 parent 3c46d53 commit 372bb7c
Show file tree
Hide file tree
Showing 8 changed files with 131 additions and 34 deletions.
30 changes: 6 additions & 24 deletions app/src/app/admin/articles/articles.ts
Expand Up @@ -9,18 +9,7 @@ module app.admin.articles {

let state:global.IState = {
url: '/articles',
views: {
"main@app.admin": {
controller: namespace+'.controller',
controllerAs: 'ArticlesController',
templateUrl: 'templates/app/admin/articles/articles.tpl.html'
}
},
resolve: /*@ngInject*/{
allArticles: (articleService:common.services.article.ArticleService) => {
return articleService.getAllArticles();
}
},
abstract: true,
data: {
title: "Articles",
icon: 'description',
Expand All @@ -35,17 +24,10 @@ module app.admin.articles {

}

export class ArticlesController {

static $inject = ['allArticles'];
constructor(public allArticles:common.services.article.IArticle[]) {

}

}

angular.module(namespace, [])
.config(ArticlesConfig)
.controller(namespace+'.controller', ArticlesController);
angular.module(namespace, [
'app.admin.articles.listing',
'app.admin.articles.curation',
])
.config(ArticlesConfig);

}
2 changes: 2 additions & 0 deletions app/src/app/admin/articles/curation/curation.tpl.html
@@ -0,0 +1,2 @@
<h2>Article Curation</h2>

48 changes: 48 additions & 0 deletions app/src/app/admin/articles/curation/curation.ts
@@ -0,0 +1,48 @@
module app.admin.articles.curation {

export const namespace = 'app.admin.articles.curation';

export class ArticlesCurationConfig {

static $inject = ['stateHelperServiceProvider'];
constructor(private stateHelperServiceProvider){

let state:global.IState = {
url: '/curation',
views: {
"main@app.admin": {
controller: namespace+'.controller',
controllerAs: 'CurationController',
templateUrl: 'templates/app/admin/articles/curation/curation.tpl.html'
}
},
resolve: /*@ngInject*/{
},
data: {
title: "Article Curation",
icon: 'description',
navigation: true,
sortAfter: app.admin.articles.listing.namespace,
}
};

stateHelperServiceProvider.addState(namespace, state);

}

}

export class ArticlesCurationController {

static $inject = [];
constructor() {

}

}

angular.module(namespace, [])
.config(ArticlesCurationConfig)
.controller(namespace+'.controller', ArticlesCurationController);

}
50 changes: 50 additions & 0 deletions app/src/app/admin/articles/listing/listing.ts
@@ -0,0 +1,50 @@
module app.admin.articles.listing {

export const namespace = 'app.admin.articles.listing';

export class ArticlesListingConfig {

static $inject = ['stateHelperServiceProvider'];
constructor(private stateHelperServiceProvider){

let state:global.IState = {
url: '/listing',
views: {
"main@app.admin": {
controller: namespace+'.controller',
controllerAs: 'ArticlesListingController',
templateUrl: 'templates/app/admin/articles/listing/listing.tpl.html'
}
},
resolve: /*@ngInject*/{
allArticles: (articleService:common.services.article.ArticleService) => {
return articleService.getAllArticles();
}
},
data: {
title: "Articles Listing",
icon: 'description',
navigation: true,
}
};

stateHelperServiceProvider.addState(namespace, state);

}

}

export class ArticlesListingController {

static $inject = ['allArticles'];
constructor(public allArticles:common.services.article.IArticle[]) {

}

}

angular.module(namespace, [])
.config(ArticlesListingConfig)
.controller(namespace+'.controller', ArticlesListingController);

}
4 changes: 3 additions & 1 deletion app/src/app/admin/navigation/navigation.ts
Expand Up @@ -18,7 +18,9 @@ module app.admin.navigation{

protected getNavigationStates():global.IState[]{

let childStates = this.stateHelperService.getChildStates(app.admin.namespace);
let childStates = this.stateHelperService.getChildStates(app.admin.namespace, 1);

console.log(childStates);

return this.getNavigableStates(childStates);
}
Expand Down
28 changes: 20 additions & 8 deletions app/src/common/providers/stateHelperServiceProvider.ts
Expand Up @@ -29,18 +29,30 @@ module common.providers {

constructor(private $state:ng.ui.IStateService) {}

public getChildStates = (stateName:string):global.IState[] => {
/**
* Get the direct decendents of a state name. Optionally recurse decendents
* @param stateName
* @returns {*}
* @param recurseLevel
*/
public getChildStates = (stateName:string, recurseLevel:number = 0):global.IState[] => {

let state:global.IState = <global.IState>this.$state.get(stateName);
// this regex is going to filter only direct children of this route.
var childRouteRegex = new RegExp(stateName + "\.[a-z]+$", "i");

let childStates = _.filter(<global.IState[]>this.$state.get(), function(state) {
return childRouteRegex.test(state.name);
});

var routeName = state.name;
if (!recurseLevel){
return childStates;
}

// this regex is going to filter only direct children of this route.
var childRouteRegex = new RegExp(routeName + "\.[a-z]+$", "i");
var states = <global.IState[]>this.$state.get();
recurseLevel --; //decrement the recursion

return _.filter(states, function(state) {
return childRouteRegex.test(state.name) && !state.abstract;
return _.map(childStates, (state) => {
state.children = this.getChildStates(state.name, recurseLevel); //recursively find the next child level
return state;
});

}
Expand Down
3 changes: 2 additions & 1 deletion app/src/global.d.ts
Expand Up @@ -12,7 +12,8 @@ declare module global {
icon?: string;
sortAfter?: string;
navigation?: boolean;
}
},
children?:IState[];
}

export interface IStateDefinition {
Expand Down

0 comments on commit 372bb7c

Please sign in to comment.