[Client] Better draft management

This commit is contained in:
syuilo 2017-03-12 07:09:50 +09:00
parent 736b972bcb
commit bde46c4cff

View File

@ -341,10 +341,10 @@
: '投稿'; : '投稿';
this.draftId = this.repost this.draftId = this.repost
? 'draft-repost-' + this.repost.id ? 'repost:' + this.repost.id
: this.inReplyToPost : this.inReplyToPost
? 'draft-reply-' + this.inReplyToPost.id ? 'reply:' + this.inReplyToPost.id
: 'draft'; : 'post';
this.on('mount', () => { this.on('mount', () => {
this.refs.uploader.on('uploaded', file => { this.refs.uploader.on('uploaded', file => {
@ -359,15 +359,14 @@
this.autocomplete.attach(); this.autocomplete.attach();
// 書きかけの投稿を復元 // 書きかけの投稿を復元
let draft = localStorage.getItem(this.draftId); const draft = JSON.parse(localStorage.getItem('drafts') || '{}')[this.draftId];
if (draft) { if (draft) {
draft = JSON.parse(draft); this.refs.text.value = draft.data.text;
this.refs.text.value = draft.text; this.files = draft.data.files;
this.files = draft.files; if (draft.data.poll) {
if (draft.poll) {
this.poll = true; this.poll = true;
this.update(); this.update();
this.refs.poll.set(draft.poll); this.refs.poll.set(draft.data.poll);
} }
this.trigger('change-files', this.files); this.trigger('change-files', this.files);
this.update(); this.update();
@ -487,8 +486,8 @@
poll: this.poll ? this.refs.poll.get() : undefined poll: this.poll ? this.refs.poll.get() : undefined
}).then(data => { }).then(data => {
this.clear(); this.clear();
this.removeDraft();
this.trigger('post'); this.trigger('post');
localStorage.removeItem(this.draftId);
this.notify(this.repost this.notify(this.repost
? 'Repostしました' ? 'Repostしました'
: this.inReplyToPost : this.inReplyToPost
@ -512,17 +511,30 @@
}; };
this.on('update', () => { this.on('update', () => {
this.save(); this.saveDraft();
}); });
this.save = () => { this.saveDraft = () => {
const context = { const data = JSON.parse(localStorage.getItem('drafts') || '{}');
data[this.draftId] = {
updated_at: new Date(),
data: {
text: this.refs.text.value, text: this.refs.text.value,
files: this.files, files: this.files,
poll: this.poll && this.refs.poll ? this.refs.poll.get() : undefined poll: this.poll && this.refs.poll ? this.refs.poll.get() : undefined
}
}
localStorage.setItem('drafts', JSON.stringify(data));
}; };
localStorage.setItem(this.draftId, JSON.stringify(context)); this.removeDraft = () => {
const data = JSON.parse(localStorage.getItem('drafts') || '{}');
delete data[this.draftId];
localStorage.setItem('drafts', JSON.stringify(data));
}; };
</script> </script>
</mk-post-form> </mk-post-form>