-
-
+
+
diff --git a/addons/mail/static/src/components/message/message.scss b/addons/mail/static/src/components/message/message.scss
index b2a1f6fa485..93f1933335c 100644
--- a/addons/mail/static/src/components/message/message.scss
+++ b/addons/mail/static/src/components/message/message.scss
@@ -2,6 +2,10 @@
// Layout
// ------------------------------------------------------------------
+.o_Message {
+ max-width: var(--Chatter-max-width, none);
+}
+
.o_Message_actionListContainer {
z-index: 10; // Place the element in front of the Composer when they overlap
}
diff --git a/addons/mail/static/src/models/chatter_topbar.js b/addons/mail/static/src/models/chatter_topbar.js
index 9a450dea529..b86e626d27d 100644
--- a/addons/mail/static/src/models/chatter_topbar.js
+++ b/addons/mail/static/src/models/chatter_topbar.js
@@ -2,8 +2,7 @@
import { registerModel } from '@mail/model/model_core';
import { attr, one } from '@mail/model/model_field';
-
-import { sprintf } from '@web/core/utils/strings';
+import { clear } from '@mail/model/model_field_command';
registerModel({
name: 'ChatterTopbar',
@@ -14,23 +13,15 @@ registerModel({
attachmentButtonText: attr({
compute() {
if (!this.chatter || !this.chatter.thread) {
- return;
+ return clear();
}
const attachments = this.chatter.thread.allAttachments;
- switch (attachments.length) {
- case 0:
- return this.env._t("Attach files");
- case 1:
- return this.env._t("1 file");
- case 2:
- return this.env._t("2 files");
- default:
- return sprintf(
- this.env._t("%(attachmentCount)s files"),
- { attachmentCount: attachments.length }
- );
+ if (attachments.length === 0) {
+ return clear();
}
+ return attachments.length;
},
+ default: "",
}),
chatter: one('Chatter', {
identifying: true,
diff --git a/addons/mail/static/src/widgets/form_renderer/form_renderer.scss b/addons/mail/static/src/widgets/form_renderer/form_renderer.scss
index dd11dfcc791..b00435586c3 100644
--- a/addons/mail/static/src/widgets/form_renderer/form_renderer.scss
+++ b/addons/mail/static/src/widgets/form_renderer/form_renderer.scss
@@ -3,16 +3,32 @@
// ------------------------------------------------------------------
.o_FormRenderer_chatterContainer {
- flex: 1 0 auto;
+ --ChatterTopbar-padding-v: #{map-get($spacers, 2)};
+
+ @include media-breakpoint-down(md) {
+ --ChatterTopbar-padding-left: #{$o-horizontal-padding};
+ --ChatterTopbar-padding-right: #{$o-horizontal-padding};
+ }
&.o-aside {
+ --Chatter-max-width: #{$o-chatter-min-width};
+ --ChatterTopbar-padding-left: #{$o-horizontal-padding};
+ --ChatterTopbar-padding-right: #{$o-horizontal-padding};
+
+ flex-shrink: 0;
+ flex-grow: 0;
border-left: $border-width solid;
padding: map-get($spacers, 0);
- width: $o-chatter-min-width;
+ min-width: $o-chatter-min-width;
+ width: auto;
.o_Message.o-not-discussion {
border-width: $border-width 0;
}
+
+ .o_ChatterContainer {
+ width: auto;
+ }
}
&.o-isInFormSheetBg {
@@ -21,11 +37,11 @@
border-top: 1px solid $border-color;
}
- .o_ChatterContainer {
- @include make-container-max-widths();
+ &:not(.o-aside) .o_ChatterContainer {
+ @include make-container-max-widths();
- margin-left: auto;
- margin-right: auto;
+ margin-left: auto;
+ margin-right: auto;
}
}
diff --git a/addons/mail/static/tests/qunit_suite_tests/components/chatter_topbar_tests.js b/addons/mail/static/tests/qunit_suite_tests/components/chatter_topbar_tests.js
index 27b74f855e7..0fa4d4a1785 100644
--- a/addons/mail/static/tests/qunit_suite_tests/components/chatter_topbar_tests.js
+++ b/addons/mail/static/tests/qunit_suite_tests/components/chatter_topbar_tests.js
@@ -9,7 +9,7 @@ QUnit.module('components', {}, function () {
QUnit.module('chatter_topbar_tests.js');
QUnit.test('base rendering', async function (assert) {
- assert.expect(8);
+ assert.expect(7);
const pyEnv = await startServer();
const resPartnerId1 = pyEnv['res.partner'].create({});
@@ -50,11 +50,6 @@ QUnit.test('base rendering', async function (assert) {
0,
"attachments button should not have a loader"
);
- assert.strictEqual(
- document.querySelectorAll(`.o_ChatterTopbar_buttonAddAttachmentsText`).length,
- 1,
- "attachments button should have a text"
- );
assert.strictEqual(
document.querySelectorAll(`.o_ChatterTopbar_followerListMenu`).length,
1,
@@ -63,7 +58,7 @@ QUnit.test('base rendering', async function (assert) {
});
QUnit.test('base disabled rendering', async function (assert) {
- assert.expect(8);
+ assert.expect(6);
const { openView } = await start();
await openView({
@@ -96,16 +91,6 @@ QUnit.test('base disabled rendering', async function (assert) {
0,
"attachments button should not have a loader"
);
- assert.strictEqual(
- document.querySelectorAll(`.o_ChatterTopbar_buttonAddAttachmentsText`).length,
- 1,
- "attachments button should have a text"
- );
- assert.strictEqual(
- document.querySelector(`.o_ChatterTopbar_buttonAddAttachmentsText`).textContent,
- 'Attach files',
- "Add attachments button content should be 'Attach files'"
- );
});
QUnit.test('attachment loading is delayed', async function (assert) {
@@ -193,7 +178,7 @@ QUnit.test('attachment counter while loading attachments', async function (asser
});
QUnit.test('attachment counter transition when attachments become loaded)', async function (assert) {
- assert.expect(7);
+ assert.expect(6);
const pyEnv = await startServer();
const resPartnerId1 = pyEnv['res.partner'].create({});
@@ -243,15 +228,10 @@ QUnit.test('attachment counter transition when attachments become loaded)', asyn
0,
"attachments button should not have a loader"
);
- assert.strictEqual(
- document.querySelectorAll(`.o_ChatterTopbar_buttonAddAttachmentsText`).length,
- 1,
- "attachments button should have a counter"
- );
});
QUnit.test('attachment counter without attachments', async function (assert) {
- assert.expect(4);
+ assert.expect(2);
const pyEnv = await startServer();
const resPartnerId1 = pyEnv['res.partner'].create({});
@@ -272,16 +252,6 @@ QUnit.test('attachment counter without attachments', async function (assert) {
1,
"should have an attachments button in chatter menu"
);
- assert.strictEqual(
- document.querySelectorAll(`.o_ChatterTopbar_buttonAddAttachmentsText`).length,
- 1,
- "attachments button should have a counter"
- );
- assert.strictEqual(
- document.querySelector(`.o_ChatterTopbar_buttonAddAttachmentsText`).textContent,
- 'Attach files',
- 'attachment counter content should contain "Attach files"'
- );
});
QUnit.test('attachment counter with attachments', async function (assert) {
@@ -327,7 +297,7 @@ QUnit.test('attachment counter with attachments', async function (assert) {
);
assert.strictEqual(
document.querySelector(`.o_ChatterTopbar_buttonAttachmentsCount`).textContent,
- '2 files',
+ '2',
'attachment counter content should contain "2 files"'
);
});
diff --git a/addons/mail/static/tests/qunit_suite_tests/widgets/form_renderer_tests.js b/addons/mail/static/tests/qunit_suite_tests/widgets/form_renderer_tests.js
index 4d63990a93c..42406eec051 100644
--- a/addons/mail/static/tests/qunit_suite_tests/widgets/form_renderer_tests.js
+++ b/addons/mail/static/tests/qunit_suite_tests/widgets/form_renderer_tests.js
@@ -838,7 +838,7 @@ QUnit.test('Attachments that have been unlinked from server should be visually u
);
assert.strictEqual(
document.querySelector('.o_ChatterTopbar_buttonCount').textContent,
- '2 files',
+ '2',
"Partner1 should have 2 attachments initially"
);
@@ -850,7 +850,7 @@ QUnit.test('Attachments that have been unlinked from server should be visually u
await click('.o_pager_previous');
assert.strictEqual(
document.querySelector('.o_ChatterTopbar_buttonCount').textContent,
- '1 file',
+ '1',
"Partner1 should now have 1 attachment after it has been unlinked from server"
);
});
diff --git a/addons/web/static/src/scss/secondary_variables.scss b/addons/web/static/src/scss/secondary_variables.scss
index fe6743f80e6..1bb16c83305 100644
--- a/addons/web/static/src/scss/secondary_variables.scss
+++ b/addons/web/static/src/scss/secondary_variables.scss
@@ -1,5 +1,4 @@
$o-webclient-background-color: $o-gray-100 !default;
-$o-control-panel-background-color: $o-view-background-color !default;
$o-list-footer-color: null !default;
$o-list-group-header-color: lighten($o-brand-lightsecondary, 10%) !default;
diff --git a/addons/web/static/src/search/control_panel/control_panel.scss b/addons/web/static/src/search/control_panel/control_panel.scss
index 9f0dbcb85ba..b955613290f 100644
--- a/addons/web/static/src/search/control_panel/control_panel.scss
+++ b/addons/web/static/src/search/control_panel/control_panel.scss
@@ -1,12 +1,11 @@
.o_control_panel {
border-bottom: 1px solid $border-color;
- @include o-webclient-padding($top: 5px, $bottom: 5px);
+ @include o-webclient-padding($top: map-get($spacers, 2), $bottom: map-get($spacers, 2));
background-color: $o-control-panel-background-color;
> div {
display: flex;
- min-height: 30px;
- margin: 5px 0px;
+ min-height: $o-statusbar-height;
}
@include media-breakpoint-up(md) {
diff --git a/addons/web/static/src/views/form/control_panel/form_control_panel.xml b/addons/web/static/src/views/form/control_panel/form_control_panel.xml
index 165afc5c3c5..96a5ecc78a9 100644
--- a/addons/web/static/src/views/form/control_panel/form_control_panel.xml
+++ b/addons/web/static/src/views/form/control_panel/form_control_panel.xml
@@ -4,7 +4,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
diff --git a/addons/web/static/src/views/form/form_controller.scss b/addons/web/static/src/views/form/form_controller.scss
index 71a728c2ffa..dddea707835 100644
--- a/addons/web/static/src/views/form/form_controller.scss
+++ b/addons/web/static/src/views/form/form_controller.scss
@@ -1068,7 +1068,6 @@
.o_form_sheet_bg {
flex: 1 1 auto; // Side chatter is disabled if this has to shrink but this was added for safety
- width: $o-form-sheet-min-width + 2 * $o-horizontal-padding;
// max-width: map-get($container-max-widths, xl) + 2 * $o-horizontal-padding; // would be logical but breaks no-chatter form views
padding: 0 $o-horizontal-padding;
overflow: auto;