From f318c58edf34ae432638d7bfe3413f2df218a1aa Mon Sep 17 00:00:00 2001 From: trivernis Date: Thu, 23 Jan 2020 15:41:32 +0100 Subject: [PATCH] Add file upload - Add file upload for posts supporting video and images --- src/app/components/feed/feed.component.html | 1 - src/app/components/feed/feed.component.ts | 6 ++++++ .../feed/postlist/postlist.component.html | 6 ++++++ src/app/models/post.ts | 8 ++++++-- src/app/services/feed/feed.service.ts | 17 ++++++++++++++--- 5 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/app/components/feed/feed.component.html b/src/app/components/feed/feed.component.html index 47b1ed2..fca185c 100644 --- a/src/app/components/feed/feed.component.html +++ b/src/app/components/feed/feed.component.html @@ -11,7 +11,6 @@ diff --git a/src/app/components/feed/feed.component.ts b/src/app/components/feed/feed.component.ts index 9bae09b..d226149 100644 --- a/src/app/components/feed/feed.component.ts +++ b/src/app/components/feed/feed.component.ts @@ -74,6 +74,9 @@ export class FeedComponent implements OnInit { postElement.value = ''; this.textInputValue = ''; this.checked = false; + this.file = null; + this.localFileUrl = null; + this.fileType = null; if (this.view !== 'new') { this.showNew(); } @@ -86,6 +89,9 @@ export class FeedComponent implements OnInit { postElement.value = ''; this.textInputValue = ''; this.checked = false; + this.file = null; + this.localFileUrl = null; + this.fileType = null; if (this.view !== 'new') { this.showNew(); } diff --git a/src/app/components/feed/postlist/postlist.component.html b/src/app/components/feed/postlist/postlist.component.html index a323d42..50f13eb 100644 --- a/src/app/components/feed/postlist/postlist.component.html +++ b/src/app/components/feed/postlist/postlist.component.html @@ -22,6 +22,12 @@ +
+ post image + +

diff --git a/src/app/models/post.ts b/src/app/models/post.ts index 36fb5ac..3143140 100644 --- a/src/app/models/post.ts +++ b/src/app/models/post.ts @@ -13,6 +13,7 @@ export class Post { author: Author; activity: Activity; mediaUrl: string; + mediaType: 'VIDEO' | 'IMAGE'; constructor( id: number, @@ -25,7 +26,7 @@ export class Post { date: string, author: Author, activity: Activity, - mediaUrl?: string, + media?: {url: string, type: 'VIDEO' | 'IMAGE'}, ) { this.id = id; this.content = content; @@ -37,6 +38,9 @@ export class Post { this.date = date; this.author = author; this.activity = activity; - this.mediaUrl = mediaUrl; + if (media) { + this.mediaUrl = media.url; + this.mediaType = media.type; + } } } diff --git a/src/app/services/feed/feed.service.ts b/src/app/services/feed/feed.service.ts index 79f3e80..58b187b 100644 --- a/src/app/services/feed/feed.service.ts +++ b/src/app/services/feed/feed.service.ts @@ -19,6 +19,7 @@ const createPostGqlQuery = `mutation($content: String!) { downvotes, userVote, deletable, + media {url, type}, activity{ id name @@ -42,6 +43,7 @@ const createPostActivityGqlQuery = `mutation($content: String!, $id: ID) { downvotes, userVote, deletable, + media {url, type}, activity{ id name @@ -77,6 +79,7 @@ const getPostGqlQuery = `query($first: Int, $offset: Int, $sort: SortType){ downvotes, userVote, deletable, + media {url, type}, activity{ id name @@ -179,11 +182,17 @@ export class FeedService extends BaseService { const updatedPosts = this.posts.getValue(); const post = this.constructPost(response); updatedPosts.unshift(post); - this.posts.next(updatedPosts); if (file) { this.uploadPostImage(post.id, file).subscribe((result) => { post.mediaUrl = result.fileName; + post.mediaType = result.fileName.endsWith('.webm') ? 'VIDEO' : 'IMAGE'; + this.posts.next(updatedPosts); + }, error => { + console.error(error); + this.deletePost(post.id); }); + } else { + this.posts.next(updatedPosts); } } })); @@ -322,7 +331,8 @@ export class FeedService extends BaseService { post.deletable, date, author, - activity); + activity, + post.media); } public constructAllPosts(response: any): Post[] { @@ -362,7 +372,8 @@ export class FeedService extends BaseService { post.deletable, date, author, - activity)); + activity, + post.media)); } return posts; }