diff --git a/src/app/layout/boxes/boxes.component.spec.ts b/src/app/layout/boxes/boxes.component.spec.ts index 942cd9e..233c5eb 100644 --- a/src/app/layout/boxes/boxes.component.spec.ts +++ b/src/app/layout/boxes/boxes.component.spec.ts @@ -62,6 +62,20 @@ describe("Boxes Component", () => { expect(helper.component.isHomepage).toBeTruthy(); }); + it("set isHomepage as true when in profile info page", () => { + state.current = { name: "main.profile.info" }; + helper.component.ngOnInit(); + expect(helper.component.isHomepage).toBeTruthy(); + }); + + it("set isHomepage as true when in profile page", () => { + state.current = { name: "main.profile.page" }; + state.params = { page: "/page" }; + (helper.component.owner).homepage = '/page'; + helper.component.ngOnInit(); + expect(helper.component.isHomepage).toBeTruthy(); + }); + it("set isHomepage as true when in environment home page", () => { state.current = { name: "main.environment.home" }; helper.component.owner = {}; diff --git a/src/app/layout/boxes/boxes.component.ts b/src/app/layout/boxes/boxes.component.ts index 6933113..19b4af1 100644 --- a/src/app/layout/boxes/boxes.component.ts +++ b/src/app/layout/boxes/boxes.component.ts @@ -7,7 +7,7 @@ import {DisplayBlocks} from "./display-blocks.filter"; templateUrl: "app/layout/boxes/boxes.html", directives: [DisplayBlocks] }) -@Inject("SessionService", 'AuthService', "$state") +@Inject("SessionService", 'AuthService', "$state", "$rootScope") export class BoxesComponent { @Input() boxes: noosfero.Box[]; @@ -16,13 +16,22 @@ export class BoxesComponent { currentUser: noosfero.User; isHomepage = true; - constructor(private session: SessionService, private authService: AuthService, private $state: ng.ui.IStateService) { + constructor(private session: SessionService, + private authService: AuthService, + private $state: ng.ui.IStateService, + private $rootScope: ng.IRootScopeService) { + this.currentUser = this.session.currentUser(); this.authService.subscribe(AuthEvents[AuthEvents.loginSuccess], () => { this.currentUser = this.session.currentUser(); + this.verifyHomepage(); }); this.authService.subscribe(AuthEvents[AuthEvents.logoutSuccess], () => { this.currentUser = this.session.currentUser(); + this.verifyHomepage(); + }); + this.$rootScope.$on("$stateChangeSuccess", (event: ng.IAngularEvent, toState: ng.ui.IState) => { + this.verifyHomepage(); }); } @@ -37,7 +46,14 @@ export class BoxesComponent { private verifyHomepage() { if (this.owner && ["Profile", "Community", "Person"].indexOf((this.owner)['type']) >= 0) { + let profile = this.owner; this.isHomepage = this.$state.current.name === "main.profile.home"; + if (profile.homepage) { + this.isHomepage = this.isHomepage || + (this.$state.current.name === "main.profile.page" && profile.homepage === this.$state.params['page']); + } else { + this.isHomepage = this.isHomepage || this.$state.current.name === "main.profile.info"; + } } else { this.isHomepage = this.$state.current.name === "main.environment.home"; } diff --git a/src/app/profile/profile-home.component.ts b/src/app/profile/profile-home.component.ts index 0874260..3616664 100644 --- a/src/app/profile/profile-home.component.ts +++ b/src/app/profile/profile-home.component.ts @@ -18,8 +18,10 @@ export class ProfileHomeComponent { return profileService.getHomePage(this.profile.id, { fields: 'path' }); }).then((response: restangular.IResponse) => { if (response.data.article) { + this.profile.homepage = response.data.article.path; $state.transitionTo('main.profile.page', { page: response.data.article.path, profile: this.profile.identifier }, { location: false }); } else { + this.profile.homepage = null; $state.transitionTo('main.profile.info', { profile: this.profile.identifier }, { location: false }); } }); diff --git a/src/lib/ng-noosfero-api/interfaces/profile.ts b/src/lib/ng-noosfero-api/interfaces/profile.ts index 6c5830a..646db7f 100644 --- a/src/lib/ng-noosfero-api/interfaces/profile.ts +++ b/src/lib/ng-noosfero-api/interfaces/profile.ts @@ -22,13 +22,13 @@ namespace noosfero { * @returns {string} The unque identifier for the Profile */ identifier: string; - + /** * @ngdoc property * @name created_at * @propertyOf noofero.Profile * @returns {string} The timestamp this object was created - */ + */ created_at: string; /** @@ -54,5 +54,13 @@ namespace noosfero { * @returns {string} A key => value custom fields data of Profile (e.g.: "{'Address':'Street A, Number 102...'}") */ additional_data?: any; + + /** + * @ngdoc property + * @name homepage + * @propertyOf noofero.Profile + * @returns {string} The Profile homepage + */ + homepage: string; } } -- libgit2 0.21.2