summaryrefslogtreecommitdiff
path: root/addons/website/static/src/js/theme_preview_form.js
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/website/static/src/js/theme_preview_form.js
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (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.js154
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
+}
+});