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) {
}
}