diff --git a/src/app/components/profile/profile.component.html b/src/app/components/profile/profile.component.html
index 15a375b..4ad025d 100644
--- a/src/app/components/profile/profile.component.html
+++ b/src/app/components/profile/profile.component.html
@@ -1,124 +1,85 @@
-
-
-
- {{userProfile.username}}
- @{{userProfile.handle}}
-
- person_add
-
-
-
- {{rankname}} ({{userProfile.points}} points)
-
-
-
-
-
-
-
-
What does the level mean?
-
There are different levels you can reach through green behaviour.
- Collect 100 points to level up! The levels are called:
-
-
-
- level
- {{level.level}}
-
-
- level name
- {{level.name}}
-
-
-
-
+
+
+
+
+ {{userProfile.username}}
+ @{{userProfile.handle}}
+
+ person_add
+
+
+
+ {{rankname}} ({{userProfile.points}} points)
+
+
+
+
+
+
-
How to level up?
-
There is an always growing list of things you can do,
- to support your environment
- and earn points to level up at the same time.
- You can get a different amount of points
- for differnet actions you can see in the list below:
-
-
-
-
-
-
- points
- {{action.points}}
-
+ What does the level mean?
+ There are different levels you can reach through green behaviour.
+ Collect 100 points to level up! The levels are called:
+
+
+
+ level
+ {{level.level}}
+
+
+ level name
+ {{level.name}}
+
+
+
+
+
+ How to level up?
+ There is an always growing list of things you can do,
+ to support your environment
+ and earn points to level up at the same time.
+ You can get a different amount of points
+ for differnet actions you can see in the list below:
+
+
+
+
+
+
+ points
+ {{action.points}}
+
-
-
- action
- {{action.name}}
-
+
+
+ action
+ {{action.name}}
+
-
-
-
-
-
-
-
Profile not found :(
+
+
+
+
+
+
Profile not found :(
+
+
+
\ No newline at end of file
diff --git a/src/app/components/profile/profile.component.sass b/src/app/components/profile/profile.component.sass
index b67ae33..1878392 100644
--- a/src/app/components/profile/profile.component.sass
+++ b/src/app/components/profile/profile.component.sass
@@ -24,10 +24,12 @@
margin-bottom: 0.5em
margin-left: auto
#toolbar
- margin-top: 25px
-
+ margin-top: 32px
+ .mat-toolbar-row
+ max-height: 40px
+
#username
- margin: 0.5em
+ margin: 0 0.5em
#handle
font-size: 14px
#info
@@ -55,16 +57,7 @@ $mat-card-header-size: 100px !default
-#profile-table
- width: 100%
- .mat-table
- display: block
- .mat-cell,
- .mat-header-cell
- align-items: center
- display: flex
- min-height: 48px
- padding: 0
- flex: 1
- overflow: hidden
- word-wrap: break-word
+#postlist
+ margin: 0.5em auto
+ padding: 0
+ max-width: 690px
\ No newline at end of file
diff --git a/src/app/components/profile/profile.component.ts b/src/app/components/profile/profile.component.ts
index 2327ed5..c9fa936 100644
--- a/src/app/components/profile/profile.component.ts
+++ b/src/app/components/profile/profile.component.ts
@@ -1,15 +1,14 @@
import { Component, OnInit, ViewChild} from '@angular/core';
import {Router, NavigationEnd} from '@angular/router';
-import {Http, URLSearchParams, Headers} from '@angular/http';
import { User } from 'src/app/models/user';
import { Actionlist } from 'src/app/models/actionlist';
import { Levellist } from 'src/app/models/levellist';
-import { environment } from 'src/environments/environment';
import {MatSort} from '@angular/material/sort';
import {MatTableDataSource} from '@angular/material/table';
import { RequestService } from 'src/app/services/request/request.service';
import { DatasharingService } from '../../services/datasharing.service';
-import { FeedService } from 'src/app/services/feed/feed.service';
+import { ProfileService } from 'src/app/services/profile/profile.service';
+import { runInThisContext } from 'vm';
@Component({
selector: 'app-profile',
@@ -31,16 +30,20 @@ export class ProfileComponent implements OnInit {
displayedLevelColumns = ['level', 'name'];
levelSource = this.levellist.levels;
+ loading = false;
+
constructor(
private router: Router,
- private http: Http,
private requestService: RequestService,
- private data: DatasharingService) {
+ private data: DatasharingService,
+ private profileService: ProfileService) {
router.events.forEach((event) => {
// check if the user is on the profile page (of userY) and routes to the page of userY (e.g. his own page)
if (event instanceof NavigationEnd) {
- if (this.id !== this.router.url.substr(this.router.url.lastIndexOf('/') + 1) && this.id) {
+ const possibleID = this.router.url.substr(this.router.url.lastIndexOf('/') + 1);
+ if (this.id !== possibleID && this.id && this.router.url.includes('profile/')) {
// reload the user
+ console.log('search for user id: ' + this.router.url.substr(this.router.url.lastIndexOf('/') + 1));
this.ngOnInit();
}
}
@@ -49,66 +52,31 @@ export class ProfileComponent implements OnInit {
@ViewChild(MatSort, {static: true}) sort: MatSort;
ngOnInit() {
+ this.loading = true;
this.dataSource.sort = this.sort;
this.id = this.router.url.substr(this.router.url.lastIndexOf('/') + 1);
- // let url = './graphql'
- const url = environment.graphQLUrl;
- const headers = new Headers();
- headers.set('Content-Type', 'application/json');
-
- this.http.post(url, this.buildJson(this.id))
- .subscribe(response => {
- console.log(response.text());
- this.updateUserInfo(response.json());
- });
- this.data.currentUserInfo.subscribe(user => {
- this.self = user;
- });
- }
-
- public updateUserInfo(response: any) {
- if (response.data.getUser != null) {
- this.profileNotFound = false;
- this.userProfile.loggedIn = true;
- this.userProfile.userID = response.data.getUser.id;
- this.userProfile.username = response.data.getUser.name;
- this.userProfile.handle = response.data.getUser.handle;
- this.userProfile.points = response.data.getUser.points;
- this.userProfile.level = response.data.getUser.level;
- this.userProfile.posts = response.data.getUser.posts;
- this.rankname = this.levellist.getLevelName(this.userProfile.level);
- // tslint:disable-next-line:max-line-length
- this.userProfile.allowedToSendRequest = this.requestService.isAllowedToSendRequest(response.data.getUser.id, this.self);
+ this.data.currentUserInfo.subscribe(user => {
+ this.self = user;
+ });
+ if (this.self.loggedIn) {
+ this.profileService.getUserDataBySelfId(this.id, this.self.userID.toString());
} else {
- this.profileNotFound = true;
+ this.profileService.getUserData(this.id);
}
+ this.profileService.proflile.subscribe(response =>
+ {
+ if (response) {
+ this.userProfile = response;
+ // tslint:disable-next-line:max-line-length
+ this.userProfile.allowedToSendRequest = this.requestService.isAllowedToSendRequest(this.userProfile.userID, this.self);
+ this.rankname = this.levellist.getLevelName(this.userProfile.level);
+ } else { this.profileNotFound = true; }
+ this.loading = false;
+ });
}
public sendFriendRequest(user: User) {
user.allowedToSendRequest = false;
this.requestService.sendFriendRequest(user);
}
-
- public buildJson(id: string): any {
- const body = {query: `query($userId: ID) {
- getUser(userId:$userId){
- id
- handle
- name
- profilePicture
- points
- level
- friendCount
- friends{
- id
- }
- posts{
- content
- }
- }
- }`, variables: {
- userId: this.id
- }};
- return body;
- }
}
diff --git a/src/app/services/profile/profile.service.spec.ts b/src/app/services/profile/profile.service.spec.ts
new file mode 100644
index 0000000..95b6988
--- /dev/null
+++ b/src/app/services/profile/profile.service.spec.ts
@@ -0,0 +1,12 @@
+import { TestBed } from '@angular/core/testing';
+
+import { ProfileService } from './profile.service';
+
+describe('ProfileService', () => {
+ beforeEach(() => TestBed.configureTestingModule({}));
+
+ it('should be created', () => {
+ const service: ProfileService = TestBed.get(ProfileService);
+ expect(service).toBeTruthy();
+ });
+});
diff --git a/src/app/services/profile/profile.service.ts b/src/app/services/profile/profile.service.ts
new file mode 100644
index 0000000..0bc216b
--- /dev/null
+++ b/src/app/services/profile/profile.service.ts
@@ -0,0 +1,138 @@
+import { Injectable } from '@angular/core';
+import { Http } from '@angular/http';
+import { Post } from 'src/app/models/post';
+import { Author } from 'src/app/models/author';
+import { environment } from 'src/environments/environment';
+import { User } from 'src/app/models/user';
+import { Observable, Subject } from 'rxjs';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class ProfileService {
+
+ public proflile:Subject
= new Subject();
+
+ constructor(private http: Http) { }
+
+ public getUserData(userId: string) {
+ const headers = new Headers();
+ headers.set('Content-Type', 'application/json');
+ //return this.renderProfile(this.http.post(environment.graphQLUrl, this.buildGetProfileJson(userId)));
+ this.http.post(environment.graphQLUrl, this.buildGetProfileJson(userId)).subscribe(result => {
+ //push onto subject
+ this.proflile.next(this.renderProfile(result.json()));
+ return this.proflile;
+ });
+ }
+
+ public getUserDataBySelfId(userId: string, selfId: string) {
+ const headers = new Headers();
+ headers.set('Content-Type', 'application/json');
+ //return this.renderProfile(this.http.post(environment.graphQLUrl, this.buildGetProfileJson(userId)));
+ this.http.post(environment.graphQLUrl, this.buildGetProfileJsonBySelfId(userId, selfId)).subscribe(result => {
+ //push onto subject
+ this.proflile.next(this.renderProfile(result.json()));
+ return this.proflile;
+ });
+ }
+
+
+ public buildGetProfileJson(id: string): any {
+ const body = {query: `query($userId: ID) {
+ getUser(userId:$userId){
+ id
+ handle
+ name
+ profilePicture
+ points
+ level
+ friendCount
+ friends{
+ id
+ }
+ posts{
+ id,
+ content,
+ htmlContent,
+ upvotes,
+ downvotes,
+ author{
+ name,
+ handle,
+ id},
+ createdAt
+ }
+ }
+ }`, variables: {
+ userId: id
+ }};
+ return body;
+ }
+
+ public buildGetProfileJsonBySelfId(id: string, selfId: string): any {
+ const body = {query: `query($userId: ID, $selfId: ID!) {
+ getUser(userId:$userId){
+ id
+ handle
+ name
+ profilePicture
+ points
+ level
+ friendCount
+ friends{
+ id
+ }
+ posts{
+ id,
+ content,
+ htmlContent,
+ upvotes,
+ downvotes,
+ userVote(userId: $selfId),
+ deletable(userId: $selfId)
+ author{
+ name,
+ handle,
+ id},
+ createdAt
+ }
+ }
+ }`, variables: {
+ userId: id,
+ selfId: selfId
+ }};
+ return body;
+ }
+
+ public renderProfile(response: any): User {
+ console.log(response);
+ const posts = new Array();
+ const profile = new User();
+ if (response.data.getUser != null) {
+
+ profile.userID = response.data.getUser.id;
+ profile.username = response.data.getUser.name;
+ profile.handle = response.data.getUser.handle;
+ profile.points = response.data.getUser.points;
+ profile.level = response.data.getUser.level;
+ for (const post of response.data.getUser.posts) {
+ const id: number = post.id;
+ const content: string = post.content;
+ const htmlContent: string = post.htmlContent;
+ const upvotes: number = post.upvotes;
+ const downvotes: number = post.downvotes;
+ const userVote: string = post.userVote;
+ const deletable: boolean = post.deletable;
+ const author = new Author(post.author.id, post.author.name, post.author.handle);
+ const temp = new Date(Number(post.createdAt));
+ const date = temp.toLocaleString('en-GB');
+ posts.push(new Post(id, content, htmlContent, upvotes, downvotes, userVote, deletable, date, author));
+ }
+ profile.posts = posts;
+ console.log(profile);
+ return profile;
+ }
+ return null;
+ }
+}