diff --git a/src/app/components/create-status/create-status.component.ts b/src/app/components/create-status/create-status.component.ts index b85902ca..748ac6a6 100644 --- a/src/app/components/create-status/create-status.component.ts +++ b/src/app/components/create-status/create-status.component.ts @@ -41,6 +41,29 @@ export class CreateStatusComponent implements OnInit, OnDestroy { return this._status; } + @Input('redraftedStatus') + set redraftedStatus(value: StatusWrapper) { + if (value) { + this.status = value.status.content.replace(/<[^>]*>/g, ''); + this.setVisibilityFromStatus(value.status); + this.title = value.status.spoiler_text; + + if (value.status.in_reply_to_id) { + this.isSending = true; + this.mastodonService.getStatus(value.provider, value.status.in_reply_to_id) + .then((status: Status) => { + this.statusReplyingTo = status; + }) + .catch(err => { + this.notificationService.notifyHttpError(err); + }) + .then(() => { + this.isSending = false; + }); + } + } + } + private maxCharLength: number; charCountLeft: number; postCounts: number = 1; @@ -112,20 +135,7 @@ export class CreateStatusComponent implements OnInit, OnDestroy { this.status += `@${mention} `; } - switch (this.statusReplyingTo.visibility) { - case 'unlisted': - this.setVisibility(VisibilityEnum.Unlisted); - break; - case 'public': - this.setVisibility(VisibilityEnum.Public); - break; - case 'private': - this.setVisibility(VisibilityEnum.Private); - break; - case 'direct': - this.setVisibility(VisibilityEnum.Direct); - break; - } + this.setVisibilityFromStatus(this.statusReplyingTo); this.title = this.statusReplyingTo.spoiler_text; } else if (this.replyingUserHandle) { @@ -196,6 +206,23 @@ export class CreateStatusComponent implements OnInit, OnDestroy { }); } + private setVisibilityFromStatus(status: Status) { + switch (status.visibility) { + case 'unlisted': + this.setVisibility(VisibilityEnum.Unlisted); + break; + case 'public': + this.setVisibility(VisibilityEnum.Public); + break; + case 'private': + this.setVisibility(VisibilityEnum.Private); + break; + case 'direct': + this.setVisibility(VisibilityEnum.Direct); + break; + } + } + private setVisibility(defaultPrivacy: VisibilityEnum) { switch (defaultPrivacy) { case VisibilityEnum.Public: diff --git a/src/app/components/floating-column/add-new-status/add-new-status.component.html b/src/app/components/floating-column/add-new-status/add-new-status.component.html index 0e71f003..8856b4f5 100644 --- a/src/app/components/floating-column/add-new-status/add-new-status.component.html +++ b/src/app/components/floating-column/add-new-status/add-new-status.component.html @@ -4,5 +4,5 @@ + [redraftedStatus]="redraftedStatus"> \ No newline at end of file diff --git a/src/app/components/floating-column/add-new-status/add-new-status.component.ts b/src/app/components/floating-column/add-new-status/add-new-status.component.ts index 69b27afa..b9e5f70d 100644 --- a/src/app/components/floating-column/add-new-status/add-new-status.component.ts +++ b/src/app/components/floating-column/add-new-status/add-new-status.component.ts @@ -1,6 +1,7 @@ import { Component, OnInit, Input } from '@angular/core'; import { NavigationService } from '../../../services/navigation.service'; +import { StatusWrapper } from '../../../models/common.model'; @Component({ selector: 'app-add-new-status', @@ -11,7 +12,7 @@ export class AddNewStatusComponent implements OnInit { @Input() isDirectMention: boolean; @Input() userHandle: string; - @Input() status: string; + @Input() redraftedStatus: StatusWrapper; constructor(private readonly navigationService: NavigationService) { } diff --git a/src/app/components/floating-column/floating-column.component.html b/src/app/components/floating-column/floating-column.component.html index 65281e63..5cdee34e 100644 --- a/src/app/components/floating-column/floating-column.component.html +++ b/src/app/components/floating-column/floating-column.component.html @@ -18,7 +18,7 @@ + [redraftedStatus]="redraftedStatus"> { if (redraft) { - this.navigationService.redraft(this.displayedStatus.content) + this.navigationService.redraft(this.statusWrapper) } const deletedStatus = new StatusWrapper(this.displayedStatus, selectedAccount); diff --git a/src/app/services/mastodon.service.ts b/src/app/services/mastodon.service.ts index a9112f1e..cf7b5450 100644 --- a/src/app/services/mastodon.service.ts +++ b/src/app/services/mastodon.service.ts @@ -108,6 +108,12 @@ export class MastodonService { return this.httpClient.post(url, statusData, { headers: headers }).toPromise(); } + getStatus(account: AccountInfo, statusId: string): Promise { + const route = `https://${account.instance}${this.apiRoutes.getStatus.replace('{0}', statusId)}`; + const headers = new HttpHeaders({ 'Authorization': `Bearer ${account.token.access_token}` }); + return this.httpClient.get(route, { headers: headers }).toPromise() + } + search(account: AccountInfo, query: string, resolve: boolean = false): Promise { if (query[0] === '#') query = query.substr(1); const route = `https://${account.instance}${this.apiRoutes.search}?q=${query}&resolve=${resolve}`; diff --git a/src/app/services/navigation.service.ts b/src/app/services/navigation.service.ts index eb1d4e27..d62d818d 100644 --- a/src/app/services/navigation.service.ts +++ b/src/app/services/navigation.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@angular/core'; import { BehaviorSubject, Subject } from 'rxjs'; import { AccountWrapper } from '../models/account.models'; -import { OpenMediaEvent } from '../models/common.model'; +import { OpenMediaEvent, StatusWrapper } from '../models/common.model'; @Injectable() export class NavigationService { @@ -36,8 +36,8 @@ export class NavigationService { this.activatedPanelSubject.next(newEvent); } - redraft(statusContent: string){ - const newEvent = new OpenLeftPanelEvent(LeftPanelType.CreateNewStatus, LeftPanelAction.Redraft, null, statusContent.replace(/<[^>]*>/g, '')); + redraft(status: StatusWrapper){ + const newEvent = new OpenLeftPanelEvent(LeftPanelType.CreateNewStatus, LeftPanelAction.Redraft, null, status);// statusContent.replace(/<[^>]*>/g, '')); this.activatedPanelSubject.next(newEvent); } @@ -59,7 +59,7 @@ export class OpenLeftPanelEvent { public type: LeftPanelType, public action: LeftPanelAction = LeftPanelAction.None, public userHandle: string = null, - public statusContent: string = null) { + public status: StatusWrapper = null) { } }