diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/website/static/src/js/theme_preview_form.js | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/website/static/src/js/theme_preview_form.js')
| -rw-r--r-- | addons/website/static/src/js/theme_preview_form.js | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/addons/website/static/src/js/theme_preview_form.js b/addons/website/static/src/js/theme_preview_form.js new file mode 100644 index 00000000..aada899b --- /dev/null +++ b/addons/website/static/src/js/theme_preview_form.js @@ -0,0 +1,154 @@ +odoo.define('website.theme_preview_form', function (require) { +"use strict"; + +var FormController = require('web.FormController'); +var FormView = require('web.FormView'); +var viewRegistry = require('web.view_registry'); +var core = require('web.core'); +var qweb = core.qweb; + +/* +* Common code for theme installation/update handler. +*/ +const ThemePreviewControllerCommon = { + /** + * Called to add loading effect and install/pdate the selected theme depending on action. + * + * @private + * @param {number} res_id + * @param {String} action + */ + _handleThemeAction(res_id, action) { + this.$loader = $(qweb.render('website.ThemePreview.Loader', { + 'showTips': action !== 'button_refresh_theme', + })); + let actionCallback = undefined; + this._addLoader(); + switch (action) { + case 'button_choose_theme': + actionCallback = result => this.do_action(result); + break; + case 'button_refresh_theme': + actionCallback = () => this._removeLoader(); + break; + } + const rpcData = { + model: 'ir.module.module', + method: action, + args: [res_id], + context: this.initialState.context, + }; + const rpcOptions = { + shadow: true, + }; + this._rpc(rpcData, rpcOptions) + .then(actionCallback) + .guardedCatch(() => this._removeLoader()); + }, + /** + * Called to add loader element in DOM. + * + * @private + */ + _addLoader() { + $('body').append(this.$loader); + }, + /** + * @private + */ + _removeLoader() { + this.$loader.remove(); + } +}; + +var ThemePreviewController = FormController.extend(ThemePreviewControllerCommon, { + events: Object.assign({}, FormController.prototype.events, { + 'click .o_use_theme': '_onStartNowClick', + 'click .o_switch_theme': '_onSwitchThemeClick', + 'change input[name="viewer"]': '_onSwitchButtonChange', + }), + /** + * @override + */ + start: function () { + this.$el.addClass('o_view_form_theme_preview_controller'); + return this._super.apply(this, arguments); + }, + + // ------------------------------------------------------------------------- + // Public + // ------------------------------------------------------------------------- + + /** + * @override + */ + renderButtons: function ($node) { + this.$buttons = $(qweb.render('website.ThemePreview.Buttons')); + if ($node) { + $node.html(this.$buttons); + } + }, + /** + * Overriden to prevent the controller from hiding the buttons + * @see FormController + * + * @override + */ + updateButtons: function () { }, + + // ------------------------------------------------------------------------- + // Private + // ------------------------------------------------------------------------- + /** + * Add Switcher View Mobile / Desktop near pager + * + * @private + */ + _updateControlPanelProps: async function () { + const props = this._super(...arguments); + const $switchModeButton = $(qweb.render('website.ThemePreview.SwitchModeButton')); + this.controlPanelProps.cp_content.$pager = $switchModeButton; + return props; + }, + + // ------------------------------------------------------------------------- + // Handlers + // ------------------------------------------------------------------------- + /** + * Handler called when user click on 'Desktop/Mobile' switcher button. + * + * @private + */ + _onSwitchButtonChange: function () { + this.$('.o_preview_frame').toggleClass('is_mobile'); + }, + /** + * Handler called when user click on 'Choose another theme' button. + * + * @private + */ + _onSwitchThemeClick: function () { + this.trigger_up('history_back'); + }, + /** + * Handler called when user click on 'START NOW' button in form view. + * + * @private + */ + _onStartNowClick: function () { + this._handleThemeAction(this.getSelectedIds()[0], 'button_choose_theme'); + }, +}); + +var ThemePreviewFormView = FormView.extend({ + config: _.extend({}, FormView.prototype.config, { + Controller: ThemePreviewController + }), +}); + +viewRegistry.add('theme_preview_form', ThemePreviewFormView); + +return { + ThemePreviewControllerCommon: ThemePreviewControllerCommon +} +}); |
