From 3444c70313c2b53e0b563f51a840c9a3366c6126 Mon Sep 17 00:00:00 2001 From: Dessalines Date: Sun, 8 Sep 2019 09:54:53 -0700 Subject: [PATCH] Add image loading indicator. --- ui/src/components/comment-form.tsx | 22 ++++++++++++++++++---- ui/src/components/post-form.tsx | 21 +++++++++++++++++---- ui/src/utils.ts | 1 - ui/tmp | 11 +++++++++++ 4 files changed, 46 insertions(+), 9 deletions(-) create mode 100644 ui/tmp diff --git a/ui/src/components/comment-form.tsx b/ui/src/components/comment-form.tsx index 837cefb5b..5b60aced5 100644 --- a/ui/src/components/comment-form.tsx +++ b/ui/src/components/comment-form.tsx @@ -1,7 +1,7 @@ import { Component, linkEvent } from 'inferno'; import { CommentNode as CommentNodeI, CommentForm as CommentFormI, SearchForm, SearchType, SortType, UserOperation, SearchResponse } from '../interfaces'; import { Subscription } from "rxjs"; -import { capitalizeFirstLetter, mentionDropdownFetchLimit, msgOp, mdToHtml, randomStr, imageUploadUrl, markdownHelpUrl } from '../utils'; +import { capitalizeFirstLetter, mentionDropdownFetchLimit, msgOp, mdToHtml, randomStr, markdownHelpUrl } from '../utils'; import { WebSocketService, UserService } from '../services'; import * as autosize from 'autosize'; import { i18n } from '../i18next'; @@ -21,6 +21,7 @@ interface CommentFormState { commentForm: CommentFormI; buttonTitle: string; previewMode: boolean; + imageLoading: boolean; } export class CommentForm extends Component { @@ -38,6 +39,7 @@ export class CommentForm extends Component { }, buttonTitle: !this.props.node ? capitalizeFirstLetter(i18n.t('post')) : this.props.edit ? capitalizeFirstLetter(i18n.t('edit')) : capitalizeFirstLetter(i18n.t('reply')), previewMode: false, + imageLoading: false, } constructor(props: any, context: any) { @@ -134,12 +136,15 @@ export class CommentForm extends Component { {this.state.commentForm.content && } - {this.props.node && } + {this.props.node && } #
- +
+ {this.state.imageLoading && + + } @@ -187,6 +192,10 @@ export class CommentForm extends Component { const imageUploadUrl = `/pictshare/api/upload.php`; const formData = new FormData(); formData.append('file', file); + + i.state.imageLoading = true; + i.setState(i.state); + fetch(imageUploadUrl, { method: 'POST', body: formData, @@ -198,9 +207,14 @@ export class CommentForm extends Component { let content = i.state.commentForm.content; content = (content) ? `${content} ${markdown}` : markdown; i.state.commentForm.content = content; + i.state.imageLoading = false; i.setState(i.state); }) - .catch((error) => alert(error)); + .catch((error) => { + i.state.imageLoading = false; + i.setState(i.state); + alert(error); + }) } userSearch(text: string, cb: any) { diff --git a/ui/src/components/post-form.tsx b/ui/src/components/post-form.tsx index 1591dde09..b59d07d6f 100644 --- a/ui/src/components/post-form.tsx +++ b/ui/src/components/post-form.tsx @@ -4,7 +4,7 @@ import { Subscription } from "rxjs"; import { retryWhen, delay, take } from 'rxjs/operators'; import { PostForm as PostFormI, PostFormParams, Post, PostResponse, UserOperation, Community, ListCommunitiesResponse, ListCommunitiesForm, SortType, SearchForm, SearchType, SearchResponse } from '../interfaces'; import { WebSocketService, UserService } from '../services'; -import { msgOp, getPageTitle, debounce, validURL, capitalizeFirstLetter, imageUploadUrl, markdownHelpUrl, mdToHtml } from '../utils'; +import { msgOp, getPageTitle, debounce, validURL, capitalizeFirstLetter, markdownHelpUrl, mdToHtml } from '../utils'; import * as autosize from 'autosize'; import { i18n } from '../i18next'; import { T } from 'inferno-i18next'; @@ -21,6 +21,7 @@ interface PostFormState { postForm: PostFormI; communities: Array; loading: boolean; + imageLoading: boolean; previewMode: boolean; suggestedTitle: string; suggestedPosts: Array; @@ -40,6 +41,7 @@ export class PostForm extends Component { }, communities: [], loading: false, + imageLoading: false, previewMode: false, suggestedTitle: undefined, suggestedPosts: [], @@ -111,8 +113,11 @@ export class PostForm extends Component { }
- +
+ {this.state.imageLoading && + + } {this.state.crossPosts.length > 0 && <>
#
@@ -275,6 +280,10 @@ export class PostForm extends Component { const imageUploadUrl = `/pictshare/api/upload.php`; const formData = new FormData(); formData.append('file', file); + + i.state.imageLoading = true; + i.setState(i.state); + fetch(imageUploadUrl, { method: 'POST', body: formData, @@ -285,11 +294,15 @@ export class PostForm extends Component { if (res.filetype == 'mp4') { url += '/raw'; } - i.state.postForm.url = url; + i.state.imageLoading = false; i.setState(i.state); }) - .catch((error) => alert(error)); + .catch((error) => { + i.state.imageLoading = false; + i.setState(i.state); + alert(error); + }) } parseMessage(msg: any) { diff --git a/ui/src/utils.ts b/ui/src/utils.ts index 4deafd8b7..d9c8528fb 100644 --- a/ui/src/utils.ts +++ b/ui/src/utils.ts @@ -15,7 +15,6 @@ import * as twemoji from 'twemoji'; import * as emojiShortName from 'emoji-short-name'; export const repoUrl = 'https://github.com/dessalines/lemmy'; -export const imageUploadUrl = 'https://postimages.org/'; export const markdownHelpUrl = 'https://commonmark.org/help/'; export const fetchLimit: number = 20; diff --git a/ui/tmp b/ui/tmp new file mode 100644 index 000000000..b2e63f0a7 --- /dev/null +++ b/ui/tmp @@ -0,0 +1,11 @@ +lang | done | missing +--- | --- | --- +de | 86% | cross_posts,cross_post,users,number_of_communities,preview,upload_image,formatting_help,settings,banned,subscribed,expires,recent_comments,nsfw,show_nsfw,crypto,monero,joined,by,to,transfer_community,transfer_site,are_you_sure,yes,no +eo | 95% | number_of_communities,preview,upload_image,formatting_help,banned,are_you_sure,yes,no +es | 95% | number_of_communities,preview,upload_image,formatting_help,banned,are_you_sure,yes,no +fr | 100% | +nl | 98% | preview,upload_image,formatting_help,banned +ru | 91% | cross_posts,cross_post,number_of_communities,preview,upload_image,formatting_help,banned,recent_comments,monero,by,to,transfer_community,transfer_site,are_you_sure,yes,no +sv | 98% | preview,upload_image,formatting_help,banned +zh | 89% | cross_posts,cross_post,users,number_of_communities,preview,upload_image,formatting_help,settings,banned,recent_comments,nsfw,show_nsfw,monero,by,to,transfer_community,transfer_site,are_you_sure,yes,no +