Commit 57499aeb0498ee86b507bb7db87289d502503791

Authored by Victor Costa
1 parent def8ed54

Listen for state change to change displayed blocks

src/app/layout/boxes/boxes.component.spec.ts
... ... @@ -62,6 +62,20 @@ describe("Boxes Component", () => {
62 62 expect(helper.component.isHomepage).toBeTruthy();
63 63 });
64 64  
  65 + it("set isHomepage as true when in profile info page", () => {
  66 + state.current = { name: "main.profile.info" };
  67 + helper.component.ngOnInit();
  68 + expect(helper.component.isHomepage).toBeTruthy();
  69 + });
  70 +
  71 + it("set isHomepage as true when in profile page", () => {
  72 + state.current = { name: "main.profile.page" };
  73 + state.params = { page: "/page" };
  74 + (<noosfero.Profile>helper.component.owner).homepage = '/page';
  75 + helper.component.ngOnInit();
  76 + expect(helper.component.isHomepage).toBeTruthy();
  77 + });
  78 +
65 79 it("set isHomepage as true when in environment home page", () => {
66 80 state.current = { name: "main.environment.home" };
67 81 helper.component.owner = <noosfero.Environment>{};
... ...
src/app/layout/boxes/boxes.component.ts
... ... @@ -7,7 +7,7 @@ import {DisplayBlocks} from &quot;./display-blocks.filter&quot;;
7 7 templateUrl: "app/layout/boxes/boxes.html",
8 8 directives: [DisplayBlocks]
9 9 })
10   -@Inject("SessionService", 'AuthService', "$state")
  10 +@Inject("SessionService", 'AuthService', "$state", "$rootScope")
11 11 export class BoxesComponent {
12 12  
13 13 @Input() boxes: noosfero.Box[];
... ... @@ -16,13 +16,22 @@ export class BoxesComponent {
16 16 currentUser: noosfero.User;
17 17 isHomepage = true;
18 18  
19   - constructor(private session: SessionService, private authService: AuthService, private $state: ng.ui.IStateService) {
  19 + constructor(private session: SessionService,
  20 + private authService: AuthService,
  21 + private $state: ng.ui.IStateService,
  22 + private $rootScope: ng.IRootScopeService) {
  23 +
20 24 this.currentUser = this.session.currentUser();
21 25 this.authService.subscribe(AuthEvents[AuthEvents.loginSuccess], () => {
22 26 this.currentUser = this.session.currentUser();
  27 + this.verifyHomepage();
23 28 });
24 29 this.authService.subscribe(AuthEvents[AuthEvents.logoutSuccess], () => {
25 30 this.currentUser = this.session.currentUser();
  31 + this.verifyHomepage();
  32 + });
  33 + this.$rootScope.$on("$stateChangeSuccess", (event: ng.IAngularEvent, toState: ng.ui.IState) => {
  34 + this.verifyHomepage();
26 35 });
27 36 }
28 37  
... ... @@ -37,7 +46,14 @@ export class BoxesComponent {
37 46  
38 47 private verifyHomepage() {
39 48 if (this.owner && ["Profile", "Community", "Person"].indexOf((<any>this.owner)['type']) >= 0) {
  49 + let profile = <noosfero.Profile>this.owner;
40 50 this.isHomepage = this.$state.current.name === "main.profile.home";
  51 + if (profile.homepage) {
  52 + this.isHomepage = this.isHomepage ||
  53 + (this.$state.current.name === "main.profile.page" && profile.homepage === this.$state.params['page']);
  54 + } else {
  55 + this.isHomepage = this.isHomepage || this.$state.current.name === "main.profile.info";
  56 + }
41 57 } else {
42 58 this.isHomepage = this.$state.current.name === "main.environment.home";
43 59 }
... ...
src/app/profile/profile-home.component.ts
... ... @@ -18,8 +18,10 @@ export class ProfileHomeComponent {
18 18 return profileService.getHomePage(<number>this.profile.id, { fields: 'path' });
19 19 }).then((response: restangular.IResponse) => {
20 20 if (response.data.article) {
  21 + this.profile.homepage = response.data.article.path;
21 22 $state.transitionTo('main.profile.page', { page: response.data.article.path, profile: this.profile.identifier }, { location: false });
22 23 } else {
  24 + this.profile.homepage = null;
23 25 $state.transitionTo('main.profile.info', { profile: this.profile.identifier }, { location: false });
24 26 }
25 27 });
... ...
src/lib/ng-noosfero-api/interfaces/profile.ts
... ... @@ -22,13 +22,13 @@ namespace noosfero {
22 22 * @returns {string} The unque identifier for the Profile
23 23 */
24 24 identifier: string;
25   -
  25 +
26 26 /**
27 27 * @ngdoc property
28 28 * @name created_at
29 29 * @propertyOf noofero.Profile
30 30 * @returns {string} The timestamp this object was created
31   - */
  31 + */
32 32 created_at: string;
33 33  
34 34 /**
... ... @@ -54,5 +54,13 @@ namespace noosfero {
54 54 * @returns {string} A key => value custom fields data of Profile (e.g.: "{'Address':'Street A, Number 102...'}")
55 55 */
56 56 additional_data?: any;
  57 +
  58 + /**
  59 + * @ngdoc property
  60 + * @name homepage
  61 + * @propertyOf noofero.Profile
  62 + * @returns {string} The Profile homepage
  63 + */
  64 + homepage: string;
57 65 }
58 66 }
... ...