forked from AkkomaGang/akkoma-fe
Post: Add drafting feature
This commit is contained in:
parent
f7ea95cd0e
commit
7463cbca53
1 changed files with 79 additions and 0 deletions
|
@ -54,6 +54,14 @@ const pxStringToNumber = (str) => {
|
||||||
return Number(str.substring(0, str.length - 2))
|
return Number(str.substring(0, str.length - 2))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const deleteDraft = (draftKey) => {
|
||||||
|
const draftData = JSON.parse(localStorage.getItem('drafts') || '{}');
|
||||||
|
|
||||||
|
delete draftData[draftKey];
|
||||||
|
|
||||||
|
localStorage.setItem('drafts', JSON.stringify(draftData));
|
||||||
|
}
|
||||||
|
|
||||||
const PostStatusForm = {
|
const PostStatusForm = {
|
||||||
props: [
|
props: [
|
||||||
'statusId',
|
'statusId',
|
||||||
|
@ -161,6 +169,34 @@ const PostStatusForm = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let draftKey = 'status';
|
||||||
|
if (this.replyTo) {
|
||||||
|
draftKey = 'reply:' + this.replyTo;
|
||||||
|
} else if (this.quoteId) {
|
||||||
|
draftKey = 'quote:' + this.quoteId;
|
||||||
|
}
|
||||||
|
|
||||||
|
const draft = JSON.parse(localStorage.getItem('drafts') || '{}')[draftKey];
|
||||||
|
|
||||||
|
if (draft) {
|
||||||
|
statusParams = {
|
||||||
|
spoilerText: draft.data.spoilerText,
|
||||||
|
status: draft.data.status,
|
||||||
|
sensitiveIfSubject,
|
||||||
|
nsfw: draft.data.nsfw,
|
||||||
|
files: draft.data.files,
|
||||||
|
poll: draft.data.poll,
|
||||||
|
mediaDescriptions: draft.data.mediaDescriptions,
|
||||||
|
visibility: draft.data.visibility,
|
||||||
|
language: draft.data.language,
|
||||||
|
contentType: draft.data.contentType
|
||||||
|
}
|
||||||
|
|
||||||
|
if (draft.data.poll) {
|
||||||
|
this.togglePollForm();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
dropFiles: [],
|
dropFiles: [],
|
||||||
uploadingFiles: false,
|
uploadingFiles: false,
|
||||||
|
@ -280,6 +316,7 @@ const PostStatusForm = {
|
||||||
statusChanged () {
|
statusChanged () {
|
||||||
this.autoPreview()
|
this.autoPreview()
|
||||||
this.updateIdempotencyKey()
|
this.updateIdempotencyKey()
|
||||||
|
this.saveDraft()
|
||||||
},
|
},
|
||||||
clearStatus () {
|
clearStatus () {
|
||||||
const newStatus = this.newStatus
|
const newStatus = this.newStatus
|
||||||
|
@ -401,8 +438,50 @@ const PostStatusForm = {
|
||||||
}).finally(() => {
|
}).finally(() => {
|
||||||
this.previewLoading = false
|
this.previewLoading = false
|
||||||
})
|
})
|
||||||
|
|
||||||
|
let draftKey = 'status';
|
||||||
|
if (this.replyTo) {
|
||||||
|
draftKey = 'reply:' + this.replyTo;
|
||||||
|
} else if (this.quoteId) {
|
||||||
|
draftKey = 'quote:' + this.quoteId;
|
||||||
|
}
|
||||||
|
deleteDraft(draftKey)
|
||||||
},
|
},
|
||||||
debouncePreviewStatus: debounce(function () { this.previewStatus() }, 500),
|
debouncePreviewStatus: debounce(function () { this.previewStatus() }, 500),
|
||||||
|
saveDraft() {
|
||||||
|
const draftData = JSON.parse(localStorage.getItem('drafts') || '{}');
|
||||||
|
|
||||||
|
let draftKey = 'status';
|
||||||
|
if (this.replyTo) {
|
||||||
|
draftKey = 'reply:' + this.replyTo;
|
||||||
|
} else if (this.quoteId) {
|
||||||
|
draftKey = 'quote:' + this.quoteId;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.newStatus.status || this.newStatus.spoilerText || this.newStatus.files.length > 0 || this.newStatus.poll.length > 0) {
|
||||||
|
if(this.newStatus.status) {
|
||||||
|
console.log(this.newStatus.status)
|
||||||
|
}
|
||||||
|
if(this.newStatus.spoilerText) {
|
||||||
|
console.log(this.newStatus.spoilerText)
|
||||||
|
}
|
||||||
|
if(this.newStatus.files) {
|
||||||
|
console.log(this.newStatus.files)
|
||||||
|
}
|
||||||
|
if(this.newStatus.poll) {
|
||||||
|
console.log(this.newStatus.poll)
|
||||||
|
}
|
||||||
|
console.log('not empty?');
|
||||||
|
draftData[draftKey] = {
|
||||||
|
updatedAt: new Date(),
|
||||||
|
data: this.newStatus,
|
||||||
|
};
|
||||||
|
|
||||||
|
localStorage.setItem('drafts', JSON.stringify(draftData));
|
||||||
|
} else {
|
||||||
|
deleteDraft(draftKey);
|
||||||
|
}
|
||||||
|
},
|
||||||
autoPreview () {
|
autoPreview () {
|
||||||
if (!this.preview) return
|
if (!this.preview) return
|
||||||
this.previewLoading = true
|
this.previewLoading = true
|
||||||
|
|
Loading…
Reference in a new issue