DEV: Async a bit more of Composer (#18013)
This commit is contained in:
parent
ff0f43014c
commit
9130565895
|
@ -650,8 +650,6 @@ export default Controller.extend({
|
||||||
} else {
|
} else {
|
||||||
await this.cancelComposer();
|
await this.cancelComposer();
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
fullscreenComposer() {
|
fullscreenComposer() {
|
||||||
|
@ -1054,7 +1052,7 @@ export default Controller.extend({
|
||||||
@param {Boolean} [opts.skipDraftCheck]
|
@param {Boolean} [opts.skipDraftCheck]
|
||||||
@param {Boolean} [opts.skipJumpOnSave] Option to skip navigating to the post when saved in this composer session
|
@param {Boolean} [opts.skipJumpOnSave] Option to skip navigating to the post when saved in this composer session
|
||||||
**/
|
**/
|
||||||
open(opts = {}) {
|
async open(opts = {}) {
|
||||||
if (!opts.draftKey) {
|
if (!opts.draftKey) {
|
||||||
throw new Error("composer opened without a proper draft key");
|
throw new Error("composer opened without a proper draft key");
|
||||||
}
|
}
|
||||||
|
@ -1107,15 +1105,15 @@ export default Controller.extend({
|
||||||
composerModel = null;
|
composerModel = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
let promise = new Promise((resolve, reject) => {
|
try {
|
||||||
if (composerModel && composerModel.replyDirty) {
|
if (composerModel?.replyDirty) {
|
||||||
// If we're already open, we don't have to do anything
|
// If we're already open, we don't have to do anything
|
||||||
if (
|
if (
|
||||||
composerModel.composeState === Composer.OPEN &&
|
composerModel.composeState === Composer.OPEN &&
|
||||||
composerModel.draftKey === opts.draftKey &&
|
composerModel.draftKey === opts.draftKey &&
|
||||||
!opts.action
|
!opts.action
|
||||||
) {
|
) {
|
||||||
return resolve();
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If it's the same draft, just open it up again.
|
// If it's the same draft, just open it up again.
|
||||||
|
@ -1125,13 +1123,13 @@ export default Controller.extend({
|
||||||
) {
|
) {
|
||||||
composerModel.set("composeState", Composer.OPEN);
|
composerModel.set("composeState", Composer.OPEN);
|
||||||
if (!opts.action) {
|
if (!opts.action) {
|
||||||
return resolve();
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.cancelComposer()
|
await this.cancelComposer();
|
||||||
.then(() => this.open(opts))
|
await this.open(opts);
|
||||||
.then(resolve, reject);
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (composerModel && composerModel.action !== opts.action) {
|
if (composerModel && composerModel.action !== opts.action) {
|
||||||
|
@ -1140,45 +1138,37 @@ export default Controller.extend({
|
||||||
|
|
||||||
// we need a draft sequence for the composer to work
|
// we need a draft sequence for the composer to work
|
||||||
if (opts.draftSequence === undefined) {
|
if (opts.draftSequence === undefined) {
|
||||||
return Draft.get(opts.draftKey)
|
let data = await Draft.get(opts.draftKey);
|
||||||
.then((data) => {
|
|
||||||
if (opts.skipDraftCheck) {
|
if (opts.skipDraftCheck) {
|
||||||
data.draft = undefined;
|
data.draft = undefined;
|
||||||
return data;
|
} else {
|
||||||
}
|
data = await this.confirmDraftAbandon(data);
|
||||||
return this.confirmDraftAbandon(data);
|
}
|
||||||
})
|
|
||||||
.then((data) => {
|
opts.draft ||= data.draft;
|
||||||
if (!opts.draft && data.draft) {
|
opts.draftSequence = data.draft_sequence;
|
||||||
opts.draft = data.draft;
|
|
||||||
}
|
await this._setModel(composerModel, opts);
|
||||||
opts.draftSequence = data.draft_sequence;
|
return;
|
||||||
return this._setModel(composerModel, opts);
|
|
||||||
})
|
|
||||||
.then(resolve, reject);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// otherwise, do the draft check async
|
// otherwise, do the draft check async
|
||||||
else if (!opts.draft && !opts.skipDraftCheck) {
|
if (!opts.draft && !opts.skipDraftCheck) {
|
||||||
Draft.get(opts.draftKey)
|
let data = await Draft.get(opts.draftKey);
|
||||||
.then((data) => {
|
data = await this.confirmDraftAbandon(data);
|
||||||
return this.confirmDraftAbandon(data);
|
|
||||||
})
|
if (data.draft) {
|
||||||
.then((data) => {
|
opts.draft = data.draft;
|
||||||
if (data.draft) {
|
opts.draftSequence = data.draft_sequence;
|
||||||
opts.draft = data.draft;
|
await this.open(opts);
|
||||||
opts.draftSequence = data.draft_sequence;
|
}
|
||||||
return this.open(opts);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return this._setModel(composerModel, opts).then(resolve, reject);
|
await this._setModel(composerModel, opts);
|
||||||
});
|
} finally {
|
||||||
|
|
||||||
promise = promise.finally(() => {
|
|
||||||
this.skipAutoSave = false;
|
this.skipAutoSave = false;
|
||||||
});
|
}
|
||||||
return promise;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// Given a potential instance and options, set the model for this composer.
|
// Given a potential instance and options, set the model for this composer.
|
||||||
|
@ -1326,7 +1316,7 @@ export default Controller.extend({
|
||||||
cancel(this._saveDraftDebounce);
|
cancel(this._saveDraftDebounce);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve) => {
|
||||||
if (this.get("model.hasMetaData") || this.get("model.replyDirty")) {
|
if (this.get("model.hasMetaData") || this.get("model.replyDirty")) {
|
||||||
const modal = showModal("discard-draft", {
|
const modal = showModal("discard-draft", {
|
||||||
model: this.model,
|
model: this.model,
|
||||||
|
@ -1352,7 +1342,7 @@ export default Controller.extend({
|
||||||
return resolve();
|
return resolve();
|
||||||
},
|
},
|
||||||
// needed to resume saving drafts if composer stays open
|
// needed to resume saving drafts if composer stays open
|
||||||
onDismissModal: () => reject(),
|
onDismissModal: () => resolve(),
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// it is possible there is some sort of crazy draft with no body ... just give up on it
|
// it is possible there is some sort of crazy draft with no body ... just give up on it
|
||||||
|
|
Loading…
Reference in New Issue