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) { | ... | ... |