From bcd88af53b1a920d728ec98b45daa9ac2e2c0917 Mon Sep 17 00:00:00 2001 From: transtrike Date: Fri, 12 Feb 2021 19:04:53 +0200 Subject: Moved from DevHive --- src/app/components/post/post.component.css | 134 ++++++++++++++++++++++++++++ src/app/components/post/post.component.html | 49 ++++++++++ src/app/components/post/post.component.ts | 57 ++++++++++++ 3 files changed, 240 insertions(+) create mode 100644 src/app/components/post/post.component.css create mode 100644 src/app/components/post/post.component.html create mode 100644 src/app/components/post/post.component.ts (limited to 'src/app/components/post') diff --git a/src/app/components/post/post.component.css b/src/app/components/post/post.component.css new file mode 100644 index 0000000..1b88c7d --- /dev/null +++ b/src/app/components/post/post.component.css @@ -0,0 +1,134 @@ +.post { + display: flex; + width: 98%; + + margin: .5em auto; + box-sizing: border-box; + padding: .5em; + background-color: var(--card-bg); + position: relative; +} + +.post:first-child { + margin-top: 0; +} + +hr { + border: 1px solid black; + width: 90%; +} + +/* Author */ + +.author { + display: flex; + margin-bottom: .2em; +} + +.author:hover { + cursor: pointer; +} + +.author > img { + width: 2.2em; + height: 2.2em; + margin-right: .2em; +} + +.author-info > .handle { + font-size: .9em; + color: gray; +} + +/* Content */ + +.content { + flex: 1; +} + +.message { + margin: .3em 0; + word-break: break-all; +} + +.bottom-post { + font-size: .5em; + color: gray; + display: flex; + align-items: center; +} + +.separator { + margin: 0 .5em; +} + +.comment-count { + font-size: 1em; +} + +.comment-count > img { + height: .8em; +} + +.message:hover, .timestamp:hover { + cursor: pointer; +} + +/* Rating */ + +/* Temporary, until ratings are implemented fully */ +.rating { + display: none !important; +} + +.rating { + display: flex; + flex-direction: column; + align-items: center; + min-height: 4.4em; + margin: auto -.1em auto 0; +} + +.score { + flex: 1; + display: flex; + align-items: center; +} + + +.vote { + display: flex; + align-items: center; + flex: 1; + + background: var(--card-bg); + font-size: 1em; + + border: 1px solid var(--card-bg); + box-sizing: border-box; + border-radius: .2em; + + } + +.vote:hover { + border: 1px solid var(--focus-color); + color: var(--focus-color); + cursor: pointer; +} + +/* Attachments */ + +.attachments { + display: flex; + width: 98%; + margin: -.3em auto .5em auto; + flex-wrap: wrap; +} + +.attachments:empty { + display: none; +} + +.attachments > * { + flex: 1; +} diff --git a/src/app/components/post/post.component.html b/src/app/components/post/post.component.html new file mode 100644 index 0000000..bc0d84a --- /dev/null +++ b/src/app/components/post/post.component.html @@ -0,0 +1,49 @@ + + +
+
+
+ +
+
+ {{ user.firstName }} {{ user.lastName }} +
+
+ @{{ user.userName }} +
+
+
+
+ {{ post.message }} +
+
+
+ {{ timeCreated }} +
+
+ ║ +
+
+ {{ post.comments.length }} + +
+
+ +
+
+ +
+ {{ votesNumber }} +
+ +
+
+
+
+ +
+
diff --git a/src/app/components/post/post.component.ts b/src/app/components/post/post.component.ts new file mode 100644 index 0000000..387f56f --- /dev/null +++ b/src/app/components/post/post.component.ts @@ -0,0 +1,57 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { Guid } from 'guid-typescript'; +import { PostService } from 'src/app/services/post.service'; +import { UserService } from 'src/app/services/user.service'; +import { User } from 'src/models/identity/user'; +import { Post } from 'src/models/post'; + +@Component({ + selector: 'app-post', + templateUrl: './post.component.html', + styleUrls: ['./post.component.css'], +}) +export class PostComponent implements OnInit { + public loaded = false; + public user: User; + public post: Post; + public votesNumber: number; + public timeCreated: string; + @Input() paramId: string; + + constructor(private _postService: PostService, private _userService: UserService, private _router: Router) + { } + + ngOnInit(): void { + this.post = this._postService.getDefaultPost(); + this.user = this._userService.getDefaultUser(); + + this._postService.getPostRequest(Guid.parse(this.paramId)).subscribe( + (result: object) => { + Object.assign(this.post, result); + this.post.fileURLs = Object.values(result)[7]; + this.votesNumber = 23; + + this.timeCreated = new Date(this.post.timeCreated).toLocaleString('en-GB'); + this.loadUser(); + } + ); + } + + private loadUser(): void { + this._userService.getUserByUsernameRequest(this.post.creatorUsername).subscribe( + (result: object) => { + Object.assign(this.user, result); + this.loaded = true; + } + ); + } + + goToAuthorProfile(): void { + this._router.navigate(['/profile/' + this.user.userName]); + } + + goToPostPage(): void { + this._router.navigate(['/post/' + this.post.postId]); + } +} -- cgit v1.2.3