[FIX] mail: upload file on draft record
When uploading a file on a draft record, it crashed. This happens because the file upload was applied on record while still in "draft". This fixes the issue by awaiting chatter is saved, to proceed with the file uploading. opw-3204555 closes odoo/odoo#114106 X-original-commit: 45bcd91026b93997e7ba2509c5c4176db269c3c6 Signed-off-by: Sébastien Theys (seb) <seb@odoo.com> Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
This commit is contained in:
@@ -338,11 +338,16 @@ Model({
|
||||
},
|
||||
});
|
||||
this.createNewRecordDeferred.resolve();
|
||||
this.update({
|
||||
createNewRecordComposerData: clear(),
|
||||
createNewRecordDeferred: clear(),
|
||||
});
|
||||
}
|
||||
if (this.createNewRecordFiles) {
|
||||
const files = this.createNewRecordFiles;
|
||||
this.fileUploader.uploadFiles(files);
|
||||
}
|
||||
this.update({
|
||||
createNewRecordComposerData: clear(),
|
||||
createNewRecordDeferred: clear(),
|
||||
createNewRecordFiles: clear(),
|
||||
});
|
||||
},
|
||||
/**
|
||||
* @private
|
||||
@@ -615,6 +620,7 @@ Model({
|
||||
webRecord: attr(),
|
||||
createNewRecordComposerData: attr(),
|
||||
createNewRecordDeferred: attr(),
|
||||
createNewRecordFiles: attr(),
|
||||
},
|
||||
onChanges: [
|
||||
{
|
||||
|
||||
@@ -61,12 +61,22 @@ Model({
|
||||
ev.preventDefault();
|
||||
this.update({ isDraggingInside: false });
|
||||
if (this._isDragSourceExternalFile(ev.dataTransfer)) {
|
||||
const files = ev.dataTransfer.files;
|
||||
if (this.chatterOwner) {
|
||||
await this.chatterOwner.fileUploader.uploadFiles(ev.dataTransfer.files);
|
||||
const chatter = this.chatterOwner;
|
||||
if (chatter.isTemporary) {
|
||||
const saved = await chatter.doSaveRecord();
|
||||
if (!saved) {
|
||||
return;
|
||||
}
|
||||
chatter.update({ createNewRecordFiles: files });
|
||||
return;
|
||||
}
|
||||
await chatter.fileUploader.uploadFiles(files);
|
||||
return;
|
||||
}
|
||||
if (this.composerViewOwner) {
|
||||
await this.composerViewOwner.fileUploader.uploadFiles(ev.dataTransfer.files);
|
||||
await this.composerViewOwner.fileUploader.uploadFiles(files);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,13 +4,17 @@ import { makeDeferred } from "@mail/utils/deferred";
|
||||
import { patchUiSize, SIZES } from "@mail/../tests/helpers/patch_ui_size";
|
||||
import {
|
||||
afterNextRender,
|
||||
dragenterFiles,
|
||||
dropFiles,
|
||||
isScrolledToBottom,
|
||||
nextAnimationFrame,
|
||||
start,
|
||||
startServer,
|
||||
} from "@mail/../tests/helpers/test_utils";
|
||||
|
||||
import { dom, makeTestPromise } from "web.test_utils";
|
||||
import { dom, file, makeTestPromise } from "web.test_utils";
|
||||
|
||||
const { createFile } = file;
|
||||
|
||||
const { triggerEvent } = dom;
|
||||
|
||||
@@ -318,6 +322,42 @@ QUnit.module("mail", {}, function () {
|
||||
assert.containsOnce(document.body, ".o_Chatter_thread", "there should be a thread");
|
||||
});
|
||||
|
||||
QUnit.test("upload attachment on draft record", async function (assert) {
|
||||
const views = {
|
||||
"res.partner,false,form": `
|
||||
<form string="Partners">
|
||||
<sheet>
|
||||
<field name="name"/>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_ids"/>
|
||||
</div>
|
||||
</form>`,
|
||||
};
|
||||
const { openView } = await start({ serverData: { views } });
|
||||
await openView({
|
||||
res_model: "res.partner",
|
||||
views: [[false, "form"]],
|
||||
});
|
||||
const file = await createFile({
|
||||
content: "hello, world",
|
||||
contentType: "text/plain",
|
||||
name: "text.txt",
|
||||
});
|
||||
assert.containsNone(
|
||||
document.body,
|
||||
".o_ChatterTopbar_buttonToggleAttachments:contains(1)"
|
||||
);
|
||||
await afterNextRender(() => dragenterFiles(document.querySelector(".o_Chatter")));
|
||||
await afterNextRender(() =>
|
||||
dropFiles(document.querySelector(".o_Chatter_dropZone"), [file])
|
||||
);
|
||||
assert.containsOnce(
|
||||
document.body,
|
||||
".o_ChatterTopbar_buttonToggleAttachments:contains(1)"
|
||||
);
|
||||
});
|
||||
|
||||
QUnit.test("basic chatter rendering without activities", async function (assert) {
|
||||
assert.expect(6);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user