summaryrefslogtreecommitdiff
path: root/addons/website/static/src/js/set_view_track.js
blob: d94fcddfffdad14ea4981d2e1a304815ea4cf357 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
odoo.define('website.set_view_track', function (require) {
"use strict";

var CustomizeMenu = require('website.customizeMenu');
var Widget = require('web.Widget');

var TrackPage = Widget.extend({
    template: 'website.track_page',
    xmlDependencies: ['/website/static/src/xml/track_page.xml'],
    events: {
        'change #switch-track-page': '_onTrackChange',
    },

    /**
     * @override
     */
    start: function () {
        this.$input = this.$('#switch-track-page');
        this._isTracked().then((data) => {
            if (data[0]['track']) {
                this.track = true;
                this.$input.attr('checked', 'checked');
            } else {
                this.track = false;
            }
        });
    },

    //--------------------------------------------------------------------------
    // Private
    //--------------------------------------------------------------------------

    /**
     * @private
     */
    _isTracked: function (val) {
        var viewid = $('html').data('viewid');
        if (!viewid) {
            return Promise.reject();
        } else {
            return this._rpc({
                model: 'ir.ui.view',
                method: 'read',
                args: [[viewid], ['track']],
            });
        }
    },
    /**
     * @private
     */
    _onTrackChange: function (ev) {
        var checkboxValue = this.$input.is(':checked');
        if (checkboxValue !== this.track) {
            this.track = checkboxValue;
            this._trackPage(checkboxValue);
        }
    },
    /**
     * @private
     */
    _trackPage: function (val) {
        var viewid = $('html').data('viewid');
        if (!viewid) {
            return Promise.reject();
        } else {
            return this._rpc({
                model: 'ir.ui.view',
                method: 'write',
                args: [[viewid], {track: val}],
            });
        }
    },
});

CustomizeMenu.include({
    _loadCustomizeOptions: function () {
        var self = this;
        var def = this._super.apply(this, arguments);
        return def.then(function () {
            if (!self.__trackpageLoaded) {
                self.__trackpageLoaded = true;
                self.trackPage = new TrackPage(self);
                self.trackPage.appendTo(self.$el.children('.dropdown-menu'));
            }
        });
    },
});

});