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,6 +62,20 @@ describe("Boxes Component", () => {
62 expect(helper.component.isHomepage).toBeTruthy(); 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 it("set isHomepage as true when in environment home page", () => { 79 it("set isHomepage as true when in environment home page", () => {
66 state.current = { name: "main.environment.home" }; 80 state.current = { name: "main.environment.home" };
67 helper.component.owner = <noosfero.Environment>{}; 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 +7,7 @@ import {DisplayBlocks} from &quot;./display-blocks.filter&quot;;
7 templateUrl: "app/layout/boxes/boxes.html", 7 templateUrl: "app/layout/boxes/boxes.html",
8 directives: [DisplayBlocks] 8 directives: [DisplayBlocks]
9 }) 9 })
10 -@Inject("SessionService", 'AuthService', "$state") 10 +@Inject("SessionService", 'AuthService', "$state", "$rootScope")
11 export class BoxesComponent { 11 export class BoxesComponent {
12 12
13 @Input() boxes: noosfero.Box[]; 13 @Input() boxes: noosfero.Box[];
@@ -16,13 +16,22 @@ export class BoxesComponent { @@ -16,13 +16,22 @@ export class BoxesComponent {
16 currentUser: noosfero.User; 16 currentUser: noosfero.User;
17 isHomepage = true; 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 this.currentUser = this.session.currentUser(); 24 this.currentUser = this.session.currentUser();
21 this.authService.subscribe(AuthEvents[AuthEvents.loginSuccess], () => { 25 this.authService.subscribe(AuthEvents[AuthEvents.loginSuccess], () => {
22 this.currentUser = this.session.currentUser(); 26 this.currentUser = this.session.currentUser();
  27 + this.verifyHomepage();
23 }); 28 });
24 this.authService.subscribe(AuthEvents[AuthEvents.logoutSuccess], () => { 29 this.authService.subscribe(AuthEvents[AuthEvents.logoutSuccess], () => {
25 this.currentUser = this.session.currentUser(); 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,7 +46,14 @@ export class BoxesComponent {
37 46
38 private verifyHomepage() { 47 private verifyHomepage() {
39 if (this.owner && ["Profile", "Community", "Person"].indexOf((<any>this.owner)['type']) >= 0) { 48 if (this.owner && ["Profile", "Community", "Person"].indexOf((<any>this.owner)['type']) >= 0) {
  49 + let profile = <noosfero.Profile>this.owner;
40 this.isHomepage = this.$state.current.name === "main.profile.home"; 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 } else { 57 } else {
42 this.isHomepage = this.$state.current.name === "main.environment.home"; 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,8 +18,10 @@ export class ProfileHomeComponent {
18 return profileService.getHomePage(<number>this.profile.id, { fields: 'path' }); 18 return profileService.getHomePage(<number>this.profile.id, { fields: 'path' });
19 }).then((response: restangular.IResponse) => { 19 }).then((response: restangular.IResponse) => {
20 if (response.data.article) { 20 if (response.data.article) {
  21 + this.profile.homepage = response.data.article.path;
21 $state.transitionTo('main.profile.page', { page: response.data.article.path, profile: this.profile.identifier }, { location: false }); 22 $state.transitionTo('main.profile.page', { page: response.data.article.path, profile: this.profile.identifier }, { location: false });
22 } else { 23 } else {
  24 + this.profile.homepage = null;
23 $state.transitionTo('main.profile.info', { profile: this.profile.identifier }, { location: false }); 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,13 +22,13 @@ namespace noosfero {
22 * @returns {string} The unque identifier for the Profile 22 * @returns {string} The unque identifier for the Profile
23 */ 23 */
24 identifier: string; 24 identifier: string;
25 - 25 +
26 /** 26 /**
27 * @ngdoc property 27 * @ngdoc property
28 * @name created_at 28 * @name created_at
29 * @propertyOf noofero.Profile 29 * @propertyOf noofero.Profile
30 * @returns {string} The timestamp this object was created 30 * @returns {string} The timestamp this object was created
31 - */ 31 + */
32 created_at: string; 32 created_at: string;
33 33
34 /** 34 /**
@@ -54,5 +54,13 @@ namespace noosfero { @@ -54,5 +54,13 @@ namespace noosfero {
54 * @returns {string} A key => value custom fields data of Profile (e.g.: "{'Address':'Street A, Number 102...'}") 54 * @returns {string} A key => value custom fields data of Profile (e.g.: "{'Address':'Street A, Number 102...'}")
55 */ 55 */
56 additional_data?: any; 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 }