From fc4df3c0b2ce0b5a1cfb96946d2d63e40622bd48 Mon Sep 17 00:00:00 2001 From: "Dardenne Florent (dafl)" Date: Mon, 26 Sep 2022 13:49:10 +0000 Subject: [PATCH] [REV] web: kanban: bottom quickCreate button This commit is the revert of #98703. closes odoo/odoo#102116 X-original-commit: 64c0ed09f058cff9b3cebfe5480a7efd0caa7be6 Signed-off-by: Simon Genin (ges@odoo) Signed-off-by: Dardenne Florent (dafl) --- .../src/views/kanban/kanban_controller.scss | 6 --- .../static/src/views/kanban/kanban_model.js | 8 ++-- .../src/views/kanban/kanban_renderer.js | 9 ++--- .../src/views/kanban/kanban_renderer.xml | 8 +--- .../web/static/src/views/relational_model.js | 19 +++------- .../static/tests/views/kanban_view_tests.js | 38 +------------------ 6 files changed, 17 insertions(+), 71 deletions(-) diff --git a/addons/web/static/src/views/kanban/kanban_controller.scss b/addons/web/static/src/views/kanban/kanban_controller.scss index 7ed5568f626..5e38955be1f 100644 --- a/addons/web/static/src/views/kanban/kanban_controller.scss +++ b/addons/web/static/src/views/kanban/kanban_controller.scss @@ -507,12 +507,6 @@ box-shadow: -1px 0px 0px 0px var(--KanbanColumn__highlight-border) inset, 1px 0px 0px 0px var(--KanbanColumn__highlight-border) inset; } - .o_kanban_quick_add_bottom { - font-size: 0.94791667rem; - font-weight: $font-weight-bold; - @include o-hover-opacity(.7); - @include o-hover-text-color($text-muted, $body-color); - } } .o_group_draggable .o_column_title { diff --git a/addons/web/static/src/views/kanban/kanban_model.js b/addons/web/static/src/views/kanban/kanban_model.js index c0f2f6da858..35aa5dd6109 100644 --- a/addons/web/static/src/views/kanban/kanban_model.js +++ b/addons/web/static/src/views/kanban/kanban_model.js @@ -145,13 +145,13 @@ class KanbanGroup extends Group { /** * @override */ - quickCreate(activeFields, context, atFirstPosition) { + quickCreate(activeFields, context) { const ctx = { ...context }; if (this.hasActiveProgressValue && this.progressValue.active !== FALSE) { const { fieldName } = this.model.progressAttributes; ctx[`default_${fieldName}`] = this.progressValue.active; } - return super.quickCreate(activeFields, ctx, atFirstPosition); + return super.quickCreate(activeFields, ctx); } async load() { @@ -281,12 +281,12 @@ class KanbanGroup extends Group { * @param {number} index * @returns {Promise} */ - async validateQuickCreate(index) { + async validateQuickCreate() { const record = this.list.quickCreateRecord; if (record) { const saved = await record.save(); if (saved) { - this.addRecord(this.removeRecord(record), index); + this.addRecord(this.removeRecord(record), 0); this.count++; this.list.count++; return record; diff --git a/addons/web/static/src/views/kanban/kanban_renderer.js b/addons/web/static/src/views/kanban/kanban_renderer.js index 650030545f9..0e4a58a52c3 100644 --- a/addons/web/static/src/views/kanban/kanban_renderer.js +++ b/addons/web/static/src/views/kanban/kanban_renderer.js @@ -347,16 +347,15 @@ export class KanbanRenderer extends Component { // Edition methods // ------------------------------------------------------------------------ - quickCreate(group, atFirstPosition = true) { - return this.props.list.quickCreate(group, atFirstPosition); + quickCreate(group) { + return this.props.list.quickCreate(group); } async validateQuickCreate(mode, group) { const values = group.list.quickCreateRecord.data; - const quickCreateRecordIndex = group.list.quickCreateRecordIndex; let record; try { - record = await group.validateQuickCreate(quickCreateRecordIndex); + record = await group.validateQuickCreate(); } catch (e) { // TODO: filter RPC errors more specifically (eg, for access denied, there is no point in opening a dialog) if (!(e instanceof RPCError)) { @@ -389,7 +388,7 @@ export class KanbanRenderer extends Component { if (mode === "edit") { await this.props.openRecord(record, "edit"); } else { - await this.quickCreate(group, quickCreateRecordIndex === 0); + await this.quickCreate(group); } } } diff --git a/addons/web/static/src/views/kanban/kanban_renderer.xml b/addons/web/static/src/views/kanban/kanban_renderer.xml index 80bab5f5404..4ae61112273 100644 --- a/addons/web/static/src/views/kanban/kanban_renderer.xml +++ b/addons/web/static/src/views/kanban/kanban_renderer.xml @@ -47,7 +47,7 @@ - @@ -112,18 +112,12 @@
- - New -
- - New -
diff --git a/addons/web/static/src/views/relational_model.js b/addons/web/static/src/views/relational_model.js index c0d186a8ace..988886c9afa 100644 --- a/addons/web/static/src/views/relational_model.js +++ b/addons/web/static/src/views/relational_model.js @@ -1789,10 +1789,6 @@ export class DynamicRecordList extends DynamicList { return this.records.find((r) => r.isInQuickCreation); } - get quickCreateRecordIndex() { - return this.records.findIndex((r) => r.isInQuickCreation); - } - // ------------------------------------------------------------------------- // Public // ------------------------------------------------------------------------- @@ -1943,7 +1939,7 @@ export class DynamicRecordList extends DynamicList { } } - async quickCreate(activeFields, context, atFirstPosition = true) { + async quickCreate(activeFields, context) { await this.model.mutex.getUnlockedDef(); const record = this.quickCreateRecord; if (record) { @@ -1953,10 +1949,7 @@ export class DynamicRecordList extends DynamicList { parent: this.rawContext, make: () => makeContext([context, {}]), }; - return this.createRecord( - { activeFields, rawContext, isInQuickCreation: true }, - atFirstPosition - ); + return this.createRecord({ activeFields, rawContext, isInQuickCreation: true }, true); } /** @@ -2245,7 +2238,7 @@ export class DynamicGroupList extends DynamicList { return this.groups.reduce((acc, group) => acc + group.count, 0); } - async quickCreate(group, atFirstPosition = true) { + async quickCreate(group) { group = group || this.groups[0]; if (this.model.useSampleModel) { // Empty the groups because they contain sample data @@ -2261,7 +2254,7 @@ export class DynamicGroupList extends DynamicList { if (isFolded) { await group.toggle(); } - await group.quickCreate(this.quickCreateInfo.activeFields, this.context, atFirstPosition); + await group.quickCreate(this.quickCreateInfo.activeFields, this.context); } /** @@ -2656,12 +2649,12 @@ export class Group extends DataPoint { }); } - quickCreate(activeFields, context, atFirstPosition = false) { + quickCreate(activeFields, context) { const ctx = { ...context, [`default_${this.groupByField.name}`]: this.getServerValue(), }; - return this.list.quickCreate(activeFields, ctx, atFirstPosition); + return this.list.quickCreate(activeFields, ctx); } /** diff --git a/addons/web/static/tests/views/kanban_view_tests.js b/addons/web/static/tests/views/kanban_view_tests.js index 104c1e29937..fe68f35a8c3 100644 --- a/addons/web/static/tests/views/kanban_view_tests.js +++ b/addons/web/static/tests/views/kanban_view_tests.js @@ -104,12 +104,8 @@ async function createRecord() { await click(target, "button.o-kanban-button-new"); } -async function quickCreateRecord(groupIndex, position = "top") { - if (position === "top") { - await click(getColumn(groupIndex), ".o_kanban_quick_add"); - } else if (position === "bottom") { - await click(getColumn(groupIndex), ".o_kanban_quick_add_bottom"); - } +async function quickCreateRecord(groupIndex) { + await click(getColumn(groupIndex), ".o_kanban_quick_add"); } async function editQuickCreateInput(field, value) { @@ -11289,36 +11285,6 @@ QUnit.module("Views", (hooks) => { } ); - QUnit.test("quick create record with bottom quick create button", async (assert) => { - await makeView({ - type: "kanban", - resModel: "product", - serverData, - groupBy: ["name"], - arch: /* xml */ ` - - - -
- -
-
-
-
- `, - }); - - // quick create at the bottom and verify the order - await quickCreateRecord(1, "bottom"); - await editQuickCreateInput("display_name", "new product"); - await validateRecord(); - assert.deepEqual(getCardTexts(1), ["xmo", "new product"]); - // directly re-create another records at the bottom - await editQuickCreateInput("display_name", "new product 2"); - await validateRecord(); - assert.deepEqual(getCardTexts(1), ["xmo", "new product", "new product 2"]); - }); - QUnit.test("no leak of TransactionInProgress (grouped case)", async (assert) => { let def; await makeView({