Commit 5c16da40f2ed9af570a6c18e968d40bdc6ebd111
1 parent
b9f6daf6
Exists in
profile-article-resolvers
starting to resolve profile and articles on ui-router resolve functions
Showing
5 changed files
with
103 additions
and
63 deletions
Show diff stats
src/app/article/content-viewer/content-viewer.component.ts
... | ... | @@ -14,26 +14,26 @@ import {ProfileService} from "../../../lib/ng-noosfero-api/http/profile.service" |
14 | 14 | provide('profileService', { useClass: ProfileService }) |
15 | 15 | ] |
16 | 16 | }) |
17 | -@Inject(ArticleService, ProfileService, "$log", "$stateParams") | |
17 | +@Inject(ArticleService, ProfileService, "$log", "$stateParams", "currentProfile") | |
18 | 18 | export class ContentViewerComponent { |
19 | 19 | |
20 | 20 | @Input() |
21 | 21 | article: noosfero.Article = null; |
22 | 22 | |
23 | - @Input() | |
24 | - profile: noosfero.Profile = null; | |
25 | - | |
26 | - constructor(private articleService: ArticleService, private profileService: ProfileService, private $log: ng.ILogService, private $stateParams: angular.ui.IStateParamsService) { | |
23 | + constructor( | |
24 | + private articleService: ArticleService, | |
25 | + private profileService: ProfileService, | |
26 | + private $log: ng.ILogService, | |
27 | + private $stateParams: angular.ui.IStateParamsService, | |
28 | + public profile: noosfero.Profile) { | |
27 | 29 | this.activate(); |
28 | 30 | } |
29 | 31 | |
30 | 32 | activate() { |
31 | - this.profileService.getCurrentProfile().then((profile: noosfero.Profile) => { | |
32 | - this.profile = profile; | |
33 | - return this.articleService.getArticleByProfileAndPath(this.profile, this.$stateParams["page"]); | |
34 | - }).then((result: noosfero.RestResult<any>) => { | |
35 | - this.article = <noosfero.Article>result.data; | |
36 | - this.articleService.setCurrent(this.article); | |
37 | - }); | |
33 | + this.articleService.getArticleByProfileAndPath(this.profile, this.$stateParams["page"]) | |
34 | + .then((result: noosfero.RestResult<any>) => { | |
35 | + this.article = <noosfero.Article>result.data; | |
36 | + this.articleService.setCurrent(this.article); | |
37 | + }); | |
38 | 38 | } |
39 | 39 | } | ... | ... |
src/app/main/main.component.ts
... | ... | @@ -29,6 +29,7 @@ import {DateFormat} from "../shared/pipes/date-format.filter"; |
29 | 29 | import {AuthService} from "../login/auth.service"; |
30 | 30 | import {SessionService} from "../login/session.service"; |
31 | 31 | import {EnvironmentService} from "./../../lib/ng-noosfero-api/http/environment.service"; |
32 | +import {ProfileService} from './../../lib/ng-noosfero-api/http/profile.service'; | |
32 | 33 | import {NotificationService} from "../shared/services/notification.service"; |
33 | 34 | |
34 | 35 | import {BodyStateClassesService} from "./../layout/services/body-state-classes.service"; |
... | ... | @@ -118,10 +119,10 @@ export class EnvironmentContent { |
118 | 119 | abstract: true, |
119 | 120 | name: 'main', |
120 | 121 | resolve: { |
121 | - currentUser: function(AuthService: AuthService) { | |
122 | + currentUser: function (AuthService: AuthService) { | |
122 | 123 | return AuthService.loginFromCookie(); |
123 | 124 | }, |
124 | - currentEnvironment: function(EnvironmentService: EnvironmentService) { | |
125 | + currentEnvironment: function (EnvironmentService: EnvironmentService) { | |
125 | 126 | return EnvironmentService.get(); |
126 | 127 | } |
127 | 128 | } |
... | ... | @@ -149,6 +150,12 @@ export class EnvironmentContent { |
149 | 150 | templateUrl: "app/profile/profile.html", |
150 | 151 | controller: ProfileComponent, |
151 | 152 | controllerAs: "vm" |
153 | + }, | |
154 | + }, | |
155 | + resolve: { | |
156 | + currentProfile: function (ProfileService: ProfileService, $stateParams: angular.ui.IStateParamsService) { | |
157 | + console.log('$stateParams', $stateParams); | |
158 | + return ProfileService.getCurrentProfileByIdentifier($stateParams["profile"]); | |
152 | 159 | } |
153 | 160 | } |
154 | 161 | } | ... | ... |
src/app/profile/profile-home.component.ts
... | ... | @@ -7,23 +7,19 @@ import {ProfileService} from "../../lib/ng-noosfero-api/http/profile.service"; |
7 | 7 | template: "<div></div>", |
8 | 8 | providers: [provide('profileService', { useClass: ProfileService })] |
9 | 9 | }) |
10 | -@Inject(ProfileService, "$state") | |
10 | +@Inject(ProfileService, "$state", "currentProfile") | |
11 | 11 | export class ProfileHomeComponent { |
12 | 12 | |
13 | - profile: noosfero.Profile; | |
14 | - | |
15 | - constructor(profileService: ProfileService, $state: ng.ui.IStateService) { | |
16 | - profileService.getCurrentProfile().then((profile: noosfero.Profile) => { | |
17 | - this.profile = profile; | |
18 | - return profileService.getHomePage(<number>this.profile.id, { fields: 'path' }); | |
19 | - }).then((response: restangular.IResponse) => { | |
20 | - if (response.data.article) { | |
21 | - this.profile.homepage = response.data.article.path; | |
22 | - $state.transitionTo('main.profile.page', { page: response.data.article.path, profile: this.profile.identifier }, { location: false }); | |
23 | - } else { | |
24 | - this.profile.homepage = null; | |
25 | - $state.transitionTo('main.profile.info', { profile: this.profile.identifier }, { location: false }); | |
26 | - } | |
27 | - }); | |
13 | + constructor(profileService: ProfileService, $state: ng.ui.IStateService, public profile: noosfero.Profile) { | |
14 | + profileService.getHomePage(<number>this.profile.id, { fields: 'path' }) | |
15 | + .then((response: restangular.IResponse) => { | |
16 | + if (response.data.article) { | |
17 | + this.profile.homepage = response.data.article.path; | |
18 | + $state.transitionTo('main.profile.page', { page: response.data.article.path, profile: this.profile.identifier }, { location: false }); | |
19 | + } else { | |
20 | + this.profile.homepage = null; | |
21 | + $state.transitionTo('main.profile.info', { profile: this.profile.identifier }, { location: false }); | |
22 | + } | |
23 | + }); | |
28 | 24 | } |
29 | 25 | } | ... | ... |
src/app/profile/profile.component.ts
1 | -import {StateConfig, Component, Inject, provide} from 'ng-forward'; | |
1 | +import {StateConfig, Resolve, Component, Inject, provide} from 'ng-forward'; | |
2 | 2 | import {ProfileInfoComponent} from './info/profile-info.component'; |
3 | 3 | import {ProfileHomeComponent} from './profile-home.component'; |
4 | 4 | import {BasicEditorComponent} from '../article/cms/basic-editor/basic-editor.component'; |
... | ... | @@ -10,7 +10,7 @@ import {ProfileService} from "../../lib/ng-noosfero-api/http/profile.service"; |
10 | 10 | import {NotificationService} from "../shared/services/notification.service"; |
11 | 11 | import {MyProfileComponent} from "./myprofile.component"; |
12 | 12 | import {ProfileActionsComponent} from "./profile-actions.component"; |
13 | - | |
13 | +import {ArticleService} from './../../lib/ng-noosfero-api/http/article.service'; | |
14 | 14 | /** |
15 | 15 | * @ngdoc controller |
16 | 16 | * @name profile.Profile |
... | ... | @@ -43,6 +43,11 @@ import {ProfileActionsComponent} from "./profile-actions.component"; |
43 | 43 | controller: ProfileActionsComponent, |
44 | 44 | controllerAs: "vm" |
45 | 45 | } |
46 | + }, | |
47 | + resolve: { | |
48 | + currentProfile: function (ProfileService: ProfileService, $stateParams: angular.ui.IStateParamsService) { | |
49 | + return ProfileService.getCurrentProfileByIdentifier($stateParams["profile"]); | |
50 | + } | |
46 | 51 | } |
47 | 52 | }, |
48 | 53 | { |
... | ... | @@ -55,6 +60,11 @@ import {ProfileActionsComponent} from "./profile-actions.component"; |
55 | 60 | controller: ProfileActionsComponent, |
56 | 61 | controllerAs: "vm" |
57 | 62 | } |
63 | + }, | |
64 | + resolve: { | |
65 | + currentProfile: function (ProfileService: ProfileService, $stateParams: angular.ui.IStateParamsService) { | |
66 | + return ProfileService.getCurrentProfileByIdentifier($stateParams["profile"]); | |
67 | + } | |
58 | 68 | } |
59 | 69 | }, |
60 | 70 | { |
... | ... | @@ -79,6 +89,13 @@ import {ProfileActionsComponent} from "./profile-actions.component"; |
79 | 89 | controller: CmsComponent, |
80 | 90 | controllerAs: "vm" |
81 | 91 | } |
92 | + }, | |
93 | + resolve: { | |
94 | + currentArticle: function ($q: ng.IQService, currentProfile: noosfero.Profile, articleService: ArticleService, $stateParams: angular.ui.IStateParamsService): ng.IPromise<noosfero.Article> { | |
95 | + let deferred: ng.IDeferred<noosfero.Article> = $q.defer<noosfero.Article>(); | |
96 | + articleService.getArticleByProfileAndPath(currentProfile, $stateParams["page"]).then(result => deferred.resolve(result.data)); | |
97 | + return deferred.promise; | |
98 | + } | |
82 | 99 | } |
83 | 100 | }, |
84 | 101 | { |
... | ... | @@ -107,24 +124,41 @@ import {ProfileActionsComponent} from "./profile-actions.component"; |
107 | 124 | controller: ContentViewerActionsComponent, |
108 | 125 | controllerAs: "vm" |
109 | 126 | } |
127 | + }, | |
128 | + resolve: { | |
129 | + currentArticle: function ($q: ng.IQService, currentProfile: noosfero.Profile, articleService: ArticleService, $stateParams: angular.ui.IStateParamsService): ng.IPromise<noosfero.Article> { | |
130 | + let deferred: ng.IDeferred<noosfero.Article> = $q.defer<noosfero.Article>(); | |
131 | + articleService.getArticleByProfileAndPath(currentProfile, $stateParams["page"]).then(result => deferred.resolve(result.data)); | |
132 | + return deferred.promise; | |
133 | + } | |
110 | 134 | } |
111 | 135 | } |
112 | 136 | ]) |
113 | -@Inject(ProfileService, "$stateParams", "$state") | |
114 | -export class ProfileComponent { | |
115 | 137 | |
138 | + | |
139 | +/** | |
140 | + * @ngdoc controller | |
141 | + * @name ProfileComponent | |
142 | + * @description | |
143 | + * Used as base controller for the route /:profile | |
144 | + * the "currentProfile" injected is provided by the "resolve" currentProfile | |
145 | + * available at @MainComponent @StateConfig definition | |
146 | + */ | |
147 | +@Inject(ProfileService, "$state", "currentProfile") | |
148 | +export class ProfileComponent { | |
116 | 149 | boxes: noosfero.Box[]; |
117 | - profile: noosfero.Profile; | |
118 | 150 | |
119 | - constructor(profileService: ProfileService, $stateParams: ng.ui.IStateParamsService, $state: ng.ui.IStateService, notificationService: NotificationService) { | |
120 | - profileService.setCurrentProfileByIdentifier($stateParams["profile"]).then((profile: noosfero.Profile) => { | |
121 | - this.profile = profile; | |
122 | - return profileService.getBoxes(<number>this.profile.id); | |
123 | - }).then((response: restangular.IResponse) => { | |
124 | - this.boxes = response.data.boxes; | |
125 | - }).catch(() => { | |
126 | - $state.transitionTo('main.environment.home'); | |
127 | - notificationService.error({ message: "notification.profile.not_found" }); | |
128 | - }); | |
151 | + constructor( | |
152 | + profileService: ProfileService, | |
153 | + $state: ng.ui.IStateService, | |
154 | + notificationService: NotificationService, | |
155 | + public profile: noosfero.Profile) { | |
156 | + profileService.getBoxes(<number>this.profile.id) | |
157 | + .then((response: restangular.IResponse) => { | |
158 | + this.boxes = response.data.boxes; | |
159 | + }).catch(() => { | |
160 | + $state.transitionTo('main.environment.home'); | |
161 | + notificationService.error({ message: "notification.profile.not_found" }); | |
162 | + }); | |
129 | 163 | } |
130 | 164 | } | ... | ... |
src/lib/ng-noosfero-api/http/profile.service.ts
... | ... | @@ -4,30 +4,33 @@ import { Injectable, Inject } from "ng-forward"; |
4 | 4 | @Inject("Restangular", "$q") |
5 | 5 | export class ProfileService { |
6 | 6 | |
7 | - private _currentProfilePromise: ng.IDeferred<noosfero.Profile>; | |
8 | - | |
7 | + // private _currentProfilePromise: ng.IDeferred<noosfero.Profile>; | |
9 | 8 | constructor(private restangular: restangular.IService, private $q: ng.IQService) { |
10 | - this.resetCurrentProfile(); | |
9 | + // this.resetCurrentProfile(); | |
11 | 10 | } |
12 | 11 | |
13 | - resetCurrentProfile() { | |
14 | - this._currentProfilePromise = this.$q.defer(); | |
15 | - } | |
12 | + // resetCurrentProfile() { | |
13 | + // this._currentProfilePromise = this.$q.defer(); | |
14 | + // } | |
16 | 15 | |
17 | - getCurrentProfile(): ng.IPromise<noosfero.Profile> { | |
18 | - return this._currentProfilePromise.promise; | |
19 | - } | |
16 | + // getCurrentProfile(): ng.IPromise<noosfero.Profile> { | |
17 | + // return this._currentProfilePromise.promise; | |
18 | + // } | |
20 | 19 | |
21 | - setCurrentProfile(profile: noosfero.Profile) { | |
22 | - this._currentProfilePromise.resolve(profile); | |
23 | - } | |
20 | + // setCurrentProfile(profile: noosfero.Profile) { | |
21 | + // this._currentProfilePromise.resolve(profile); | |
22 | + // } | |
24 | 23 | |
25 | - setCurrentProfileByIdentifier(identifier: string) { | |
26 | - this.resetCurrentProfile(); | |
27 | - return this.getByIdentifier(identifier).then((profile: noosfero.Profile) => { | |
28 | - this.setCurrentProfile(profile); | |
29 | - return this.getCurrentProfile(); | |
30 | - }); | |
24 | + // setCurrentProfileByIdentifier(identifier: string) { | |
25 | + // this.resetCurrentProfile(); | |
26 | + // return this.getByIdentifier(identifier).then((profile: noosfero.Profile) => { | |
27 | + // this.setCurrentProfile(profile); | |
28 | + // return this.getCurrentProfile(); | |
29 | + // }); | |
30 | + // } | |
31 | + | |
32 | + getCurrentProfileByIdentifier(identifier: string): Promise<noosfero.Profile> { | |
33 | + return this.getByIdentifier(identifier); | |
31 | 34 | } |
32 | 35 | |
33 | 36 | getHomePage(profileId: number, params?: any) { | ... | ... |