Commit f18ccc088835a7f836b3aa2576bbdf27018339d2

Authored by Victor Costa
1 parent 5cead4fc

Migrate members block to ngforward

src/app/components/noosfero-blocks/members-block/members-block.component.js
... ... @@ -1,26 +0,0 @@
1   -(function() {
2   - 'use strict';
3   -
4   - angular
5   - .module('noosferoApp')
6   - .component('noosferoMembersBlock', {
7   - restrict: 'E',
8   - templateUrl: 'app/components/noosfero-blocks/members-block/members-block.html',
9   - bindings: {
10   - block: '<',
11   - owner: '<'
12   - },
13   - controller: MembersBlockController
14   - });
15   -
16   - /** @ngInject */
17   - function MembersBlockController(noosfero) {
18   - var vm = this;
19   - vm.members = [];
20   -
21   - noosfero.members(noosfero.profiles.one(vm.owner.id)).one().get({per_page: 6}).then(function(response) {
22   - vm.members = response.data.people;
23   - });
24   - }
25   -
26   -})();
src/app/components/noosfero-blocks/members-block/members-block.component.spec.ts 0 → 100644
... ... @@ -0,0 +1,52 @@
  1 +import {TestComponentBuilder} from 'ng-forward/cjs/testing/test-component-builder';
  2 +import {Provider, Input, provide, Component} from 'ng-forward';
  3 +
  4 +import {MembersBlock} from './members-block.component';
  5 +
  6 +const htmlTemplate: string = '<noosfero-members-block [block]="ctrl.block" [owner]="ctrl.owner"></noosfero-members-block>';
  7 +
  8 +const tcb = new TestComponentBuilder();
  9 +
  10 +describe("Members Block Component", () => {
  11 +
  12 + beforeEach(angular.mock.module("templates"));
  13 +
  14 + let state = jasmine.createSpyObj("state", ["go"]);
  15 + let providers = [
  16 + new Provider('truncateFilter', { useValue: () => { } }),
  17 + new Provider('stripTagsFilter', { useValue: () => { } }),
  18 + new Provider('$state', { useValue: state }),
  19 + new Provider('ProfileService', {
  20 + useValue: {
  21 + getProfileMembers: (profileId: number, filters: any): any => {
  22 + return Promise.resolve({ data: { people: [{ identifier: "person1" }] } });
  23 + }
  24 + }
  25 + }),
  26 + ];
  27 + @Component({ selector: 'test-container-component', template: htmlTemplate, directives: [MembersBlock], providers: providers })
  28 + class BlockContainerComponent {
  29 + block = { type: 'Block', settings: {} };
  30 + owner = { name: 'profile-name' };
  31 + constructor() {
  32 + }
  33 + }
  34 +
  35 + it("get members of the block owner", done => {
  36 + tcb.createAsync(BlockContainerComponent).then(fixture => {
  37 + let recentDocumentsBlock: MembersBlock = fixture.debugElement.componentViewChildren[0].componentInstance;
  38 + expect(recentDocumentsBlock.members).toEqual([{ identifier: "person1" }]);
  39 + done();
  40 + });
  41 + });
  42 +
  43 + it("render the profile image for each member", done => {
  44 + tcb.createAsync(BlockContainerComponent).then(fixture => {
  45 + let recentDocumentsBlock: MembersBlock = fixture.debugElement.componentViewChildren[0].componentInstance;
  46 + fixture.debugElement.getLocal("$rootScope").$apply();
  47 + expect(fixture.debugElement.queryAll("noosfero-profile-image").length).toEqual(1);
  48 + done();
  49 + });
  50 + });
  51 +
  52 +});
... ...
src/app/components/noosfero-blocks/members-block/members-block.component.ts 0 → 100644
... ... @@ -0,0 +1,25 @@
  1 +import {Input, Inject, Component} from "ng-forward";
  2 +import {ProfileService} from "../../../../lib/ng-noosfero-api/http/profile.service";
  3 +
  4 +@Component({
  5 + selector: "noosfero-members-block",
  6 + templateUrl: 'app/components/noosfero-blocks/members-block/members-block.html',
  7 +})
  8 +@Inject(ProfileService)
  9 +export class MembersBlock {
  10 +
  11 + @Input() block: any;
  12 + @Input() owner: any;
  13 +
  14 + members: any = [];
  15 +
  16 + constructor(private ProfileService: ProfileService) {
  17 +
  18 + }
  19 +
  20 + ngOnInit() {
  21 + this.ProfileService.getProfileMembers(this.owner.id, { per_page: 6 }).then((response: any) => {
  22 + this.members = response.data.people;
  23 + });
  24 + }
  25 +}
... ...
src/app/components/noosfero-blocks/members-block/members-block.html
1 1 <div class="members-block">
2   - <a ng-repeat="member in $ctrl.members" ui-sref="main.profile({profile: member.identifier})" class="member">
  2 + <a ng-repeat="member in ctrl.members" ui-sref="main.profile({profile: member.identifier})" class="member">
3 3 <noosfero-profile-image profile="member"></noosfero-profile-image>
4 4 </a>
5 5 </div>
... ...
src/app/index.ts
... ... @@ -45,7 +45,6 @@ NoosferoApp.addController(&quot;AuthController&quot;, AuthController);
45 45  
46 46 require("./components/noosfero-activities/activities.component.js");
47 47 require("./components/noosfero-activities/activity/activity.component.js");
48   -require("./components/noosfero-blocks/members-block/members-block.component.js");
49 48 require("./components/noosfero/noosfero-template.filter.js");
50 49 require("./components/noosfero/noosfero.service.js");
51 50 require("./components/noosfero/profile-image/profile-image.component.js");
... ...
src/app/main/main.component.ts
... ... @@ -9,6 +9,7 @@ import {Block} from &quot;../components/noosfero-blocks/block.component&quot;;
9 9 import {LinkListBlock} from "../components/noosfero-blocks/link-list/link-list.component";
10 10 import {RecentDocumentsBlock} from "../components/noosfero-blocks/recent-documents/recent-documents.component";
11 11 import {ProfileImageBlock} from "../components/noosfero-blocks/profile-image/profile-image.component";
  12 +import {MembersBlock} from "../components/noosfero-blocks/members-block/members-block.component";
12 13  
13 14  
14 15 import {AuthService} from "./../components/auth/auth_service";
... ... @@ -32,7 +33,10 @@ export class MainContent {
32 33 @Component({
33 34 selector: 'main',
34 35 template: '<div ng-view></div>',
35   - directives: [NoosferoArticleBlog, ArticleView, Boxes, Block, LinkListBlock, MainBlock, RecentDocumentsBlock, Navbar, ProfileImageBlock],
  36 + directives: [
  37 + NoosferoArticleBlog, ArticleView, Boxes, Block, LinkListBlock,
  38 + MainBlock, RecentDocumentsBlock, Navbar, ProfileImageBlock, MembersBlock
  39 + ],
36 40 providers: [AuthService, Session]
37 41 })
38 42 @StateConfig([
... ...
src/lib/ng-noosfero-api/http/profile.service.ts 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +import { Injectable, Inject } from "ng-forward";
  2 +
  3 +@Injectable()
  4 +@Inject("Restangular")
  5 +export class ProfileService {
  6 +
  7 + constructor(private Restangular: any) {
  8 +
  9 + }
  10 +
  11 + getProfileMembers(profileId: number, filters: any) {
  12 + return this.Restangular.service('profiles').one(profileId).customGET("members", filters);
  13 + }
  14 +
  15 +}
... ...