[IMP] web_refresher: Work as element of control panel

pull/2243/head
Alexandre D. Díaz 2022-06-30 12:37:46 +02:00 committed by Pedro M. Baeza
parent f6ea53a081
commit 4bacdb09d2
8 changed files with 154 additions and 19 deletions

View File

@ -59,6 +59,7 @@ Contributors
* `Tecnativa <https://www.tecnativa.com>`__: * `Tecnativa <https://www.tecnativa.com>`__:
* João Marques * João Marques
* Alexandre D. Díaz
Maintainers Maintainers
~~~~~~~~~~~ ~~~~~~~~~~~

View File

@ -5,6 +5,7 @@
"license": "AGPL-3", "license": "AGPL-3",
"website": "https://github.com/OCA/web", "website": "https://github.com/OCA/web",
"data": ["templates/assets.xml"], "data": ["templates/assets.xml"],
"qweb": ["static/src/xml/refresher.xml"],
"depends": ["web"], "depends": ["web"],
"installable": True, "installable": True,
"auto_install": False, "auto_install": False,

View File

@ -2,3 +2,4 @@
* `Tecnativa <https://www.tecnativa.com>`__: * `Tecnativa <https://www.tecnativa.com>`__:
* João Marques * João Marques
* Alexandre D. Díaz

View File

@ -404,6 +404,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
<li>Samuel Fringeli</li> <li>Samuel Fringeli</li>
<li><a class="reference external" href="https://www.tecnativa.com">Tecnativa</a>:<ul> <li><a class="reference external" href="https://www.tecnativa.com">Tecnativa</a>:<ul>
<li>João Marques</li> <li>João Marques</li>
<li>Alexandre D. Díaz</li>
</ul> </ul>
</li> </li>
</ul> </ul>

View File

@ -1,25 +1,117 @@
// Initial pager is located in source/addons/web/static/src/js/chrome/pager.js /* Copyright 2022 Tecnativa - Alexandre D. Díaz
* License AGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
odoo.define("refresher.pager", function(require) { odoo.define("refresher.Refresher", function(require) {
"use strict"; "use strict";
var pager = require("web.Pager"); const Widget = require("web.Widget");
pager.include({ const AbstractController = require("web.AbstractController");
start: function() { const BasicController = require("web.BasicController");
var self = this; const ControlPanelRenderer = require("web.ControlPanelRenderer");
var res = self._super(); const FieldX2Many = require("web.relational_fields").FieldX2Many;
var $button = $("<span>", { const Refresher = Widget.extend({
class: "fa fa-refresh btn btn-icon o_pager_refresh", template: "web_refresher.Button",
css: {"margin-right": "8px"}, events: {
"aria-label": "Refresh", "click .oe_pager_refresh": "_onClickRefresher",
}); },
$button.on("click", function() {
self._changeSelection(0);
});
self.$el.prepend($button); _onClickRefresher: function() {
return res; this.trigger("pager_refresh");
}, },
}); });
AbstractController.include({
/**
* Hook
*
* @param {jQuery} $node
* @returns {Promise}
*/
// eslint-disable-next-line no-unused-vars
renderRefresher: function($node) {
return Promise.resolve();
},
/**
* Adds the 'refresher' to the control panel
*
* @override
*/
_renderControlPanelElements: function() {
return this._super.apply(this, arguments).then(elements => {
elements.$refresher = $("<div>");
return this.renderRefresher(elements.$refresher).then(() => {
elements.$refresher = elements.$refresher.contents();
return elements;
});
});
},
});
BasicController.include({
/**
* @param {jQuery} $node
* @returns {Promise}
*/
renderRefresher: function($node) {
this.refresher = new Refresher(this);
this.refresher.on("pager_refresh", this, () => {
if (this.pager) {
this.pager.trigger("pager_changed", this._getPagerParams());
}
});
return this.refresher.appendTo($node);
},
});
FieldX2Many.include({
/**
* @override
*/
_renderControlPanel: function() {
if (!this.view) {
return this._super.apply(this, arguments);
}
this.refresher = new Refresher(this);
this.refresher.on("pager_refresh", this, () => {
if (this.pager) {
this.pager.trigger("pager_changed", {
current_min: this.value.offset + 1,
limit: this.value.limit,
size: this.value.count,
});
}
});
return this._super
.apply(this, arguments)
.then(() => {
return this.refresher.appendTo($("<div>"));
})
.then(() => {
this._controlPanel.updateContents(
{
cp_content: {
$refresher: this.refresher.$el,
},
},
{
clear: false,
}
);
});
},
});
ControlPanelRenderer.include({
/**
* @override
*/
start: function() {
return this._super.apply(this, arguments).then(() => {
this.nodes.$refresher = this.$(".oe_cp_refresher");
});
},
});
return Refresher;
}); });

View File

@ -0,0 +1,7 @@
.oe_cp_refresher {
margin: auto 0 auto auto;
padding-left: 5px;
text-align: right;
user-select: none;
flex-grow: 1;
}

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Copyright 2022 Tecnativa - Alexandre Díaz
License AGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). -->
<template>
<t t-name="web_refresher.Button">
<span aria-atomic="true">
<button
class="fa fa-refresh btn btn-icon oe_pager_refresh"
aria-label="Refresh"
title="Refresh"
tabindex="-1"
/>
</span>
</t>
<t t-extend="ControlPanel">
<t t-jquery=".o_control_panel nav.o_cp_pager" t-operation="before">
<nav class="oe_cp_refresher" />
</t>
</t>
<t t-extend="X2ManyControlPanel">
<t t-jquery=".o_x2m_control_panel nav.o_cp_pager" t-operation="before">
<nav class="oe_cp_refresher" />
</t>
</t>
</template>

View File

@ -1,7 +1,12 @@
<?xml version="1.0" encoding="utf-8" ?> <?xml version="1.0" encoding="utf-8" ?>
<odoo> <odoo>
<template id="page_refresher" name="Refresh button" inherit_id="web.assets_backend"> <template id="page_refresher" name="Refresh button" inherit_id="web.assets_backend">
<xpath expr="//script[last()]" position="after"> <xpath expr=".">
<link
type="text/css"
rel="stylesheet"
href="/web_refresher/static/src/scss/refresher.scss"
/>
<script <script
src="/web_refresher/static/src/js/refresher.js" src="/web_refresher/static/src/js/refresher.js"
type="text/javascript" type="text/javascript"