var eventBus = new Vue(); ( function( $, dashboardPageConfig ) { 'use strict'; Vue.config.devtools = true; if ( ! $('#jet-dashboard-page')[0] ) { return false; } /** * [template description] * @type {String} */ Vue.component( 'license-item', { template: '#jet-dashboard-license-item', props: { licenseData: Object, type: String }, data: function() { return { licenseKey: this.licenseData.licenseKey, licenseStatus: this.licenseData.licenseStatus, licenseDetails: this.licenseData.licenseDetails, activationStatus: false, ajaxLicenseAction: null, } }, computed: { isLicenseActive: function() { return 'active' === this.licenseStatus ? true : false; }, licenseActionType: function() { return ! this.isLicenseActive ? 'activate' : 'deactivate'; }, maskedLicenseKey: function() { let licenseKey = this.licenseKey, licenseKeyArray = licenseKey.split(''), maskerLicenseArray = []; maskerLicenseArray = licenseKeyArray.map( ( item, index ) => { if ( index > 4 && index < licenseKeyArray.length - 4 ) { return '*'; } return item; } ); return maskerLicenseArray.join(''); }, licenseStatus: function() { return this.isLicenseActive ? 'activated' : 'not-activated'; }, licenseType: function() { return this.licenseDetails.type ? this.licenseDetails.type : ''; }, productName: function() { return this.licenseDetails.product_name ? this.licenseDetails.product_name : ''; }, isLicenseExpired: function() { return 'expired' === this.licenseStatus ? true : false; }, expireDate: function() { let expireCases = [ '0000-00-00 00:00:00', 'lifetime' ]; if ( expireCases.includes( this.licenseDetails.expire ) ) { return 'Lifetime'; } return this.licenseDetails.expire; }, licensePlugins: function() { return this.licenseDetails.plugins ? this.licenseDetails.plugins : []; }, }, methods: { showLicenseManager: function() { eventBus.$emit( 'showLicenseManager' ); }, licenseAction: function() { var self = this, actionType = self.licenseActionType; self.activationStatus = true; self.ajaxLicenseAction = $.ajax( { type: 'POST', url: dashboardPageConfig.ajaxUrl, dataType: 'json', data: { action: 'jet_license_action', data: { license: self.licenseKey, action: actionType } }, beforeSend: function( jqXHR, ajaxSettings ) { if ( null !== self.ajaxLicenseAction ) { self.ajaxLicenseAction.abort(); } }, success: function( responce, textStatus, jqXHR ) { self.activationStatus = false; self.$CXNotice.add( { message: responce.message, type: responce.status, duration: 3000, } ); if ( 'success' === responce.status ) { if ( 'activate' === actionType ) { self.licenseStatus = 'active'; self.licenseDetails = responce.data; eventBus.$emit( 'addLicenseItem', { 'licenseKey': self.licenseKey, 'licenseStatus': 'active', 'licenseDetails': responce.data, } ); } if ( 'deactivate' === actionType ) { eventBus.$emit( 'removeLicenseItem', self.licenseKey ); } } } } ); } } }); /** * [template description] * @type {String} */ Vue.component( 'plugin-item-installed', { template: '#jet-dashboard-plugin-item-installed', props: { pluginData: Object }, data: function() { return { actionPlugin: false, actionPluginRequest: null, actionPluginProcessed: false, licenseActionProcessed: false, licenseKey: '', ajaxLicenseAction: null } }, computed: { deactivateAvaliable: function() { return ( ! this.pluginData['licenseControl'] && this.pluginData['isInstalled'] && this.pluginData['isActivated'] ) ? true : false; }, activateAvaliable: function() { return ( this.pluginData['isInstalled'] && !this.pluginData['isActivated'] ) ? true : false; }, updateAvaliable: function() { return ( this.pluginData['updateAvaliable'] ) ? true : false; }, updateActionAvaliable: function() { return ( this.pluginData['licenseActivated'] && this.pluginData['updateAvaliable'] ) ? true : false; }, activateLicenseVisible: function() { return ( this.pluginData['licenseControl'] && !this.pluginData['licenseActivated'] ) ? true : false; }, deactivateLicenseVisible: function() { return ( this.pluginData['licenseActivated'] ) ? true : false; }, }, methods: { deactivatePlugin: function() { this.actionPlugin = 'deactivate'; this.pluginAction(); }, activatePlugin: function() { this.actionPlugin = 'activate'; this.pluginAction(); }, updatePlugin: function() { console.log(this.updateActionAvaliable); if ( this.updateActionAvaliable ) { this.actionPlugin = 'update'; this.pluginAction(); } else { eventBus.$emit( 'showPopupUpdateCheck' ); } }, showPopupActivation: function() { eventBus.$emit( 'showPopupActivation', this.pluginData['slug'] ); }, pluginAction: function() { let self = this; self.actionPluginRequest = $.ajax( { type: 'POST', url: dashboardPageConfig.ajaxUrl, dataType: 'json', data: { action: 'jet_dashboard_plugin_action', data: { action: self.actionPlugin, plugin: self.pluginData['slug'], } }, beforeSend: function( jqXHR, ajaxSettings ) { if ( null !== self.actionPluginRequest ) { self.actionPluginRequest.abort(); } self.actionPluginProcessed = true; }, success: function( responce, textStatus, jqXHR ) { self.actionPluginProcessed = false; self.$CXNotice.add( { message: responce.message, type: responce.status, duration: 3000, } ); if ( 'success' === responce.status ) { eventBus.$emit( 'updateUserPluginData', { 'slug': self.pluginData['slug'], 'pluginData': responce.data, } ); } } } ); }, deactivateLicense: function() { eventBus.$emit( 'showPopupDeactivation', this.pluginData['slug'] ); } } }); /** * [template description] * @type {String} */ Vue.component( 'plugin-item-avaliable', { template: '#jet-dashboard-plugin-item-avaliable', props: { pluginData: Object, }, data: function() { return { pluginActionRequest: null, pluginActionType: false, pluginActionProcessed: false, } }, computed: { installAvaliable: function() { return !this.pluginData['isInstalled'] ? true : false; }, }, methods: { installPlugin: function() { this.pluginActionType = 'install'; this.pluginAction(); }, pluginAction: function() { let self = this; self.pluginActionRequest = $.ajax( { type: 'POST', url: dashboardPageConfig.ajaxUrl, dataType: 'json', data: { action: 'jet_dashboard_plugin_action', data: { action: self.pluginActionType, plugin: self.pluginData['slug'], } }, beforeSend: function( jqXHR, ajaxSettings ) { if ( null !== self.pluginActionRequest ) { self.pluginActionRequest.abort(); } self.pluginActionProcessed = true; }, success: function( responce, textStatus, jqXHR ) { self.pluginActionProcessed = false; self.$CXNotice.add( { message: responce.message, type: responce.status, duration: 3000, } ); if ( 'success' === responce.status ) { eventBus.$emit( 'updateUserPluginData', { 'slug': self.pluginData['slug'], 'pluginData': responce.data, } ); } } } ); } } }); /** * [template description] * @type {String} */ Vue.component( 'plugin-item-more', { template: '#jet-dashboard-plugin-item-more', props: { pluginData: Object }, data: function() { return { morePluginsUrl: dashboardPageConfig.getMorePluginsUrl || {}, } }, }); /** * [template description] * @type {String} */ Vue.component( 'jet-dashboard-header', { template: '#jet-dashboard-header', data: function() { return { title: dashboardPageConfig.headerTitle || '', } }, }); /** * [mounted description] */ window.JetDasboardPage = new Vue( { el: '#jet-dashboard-page', data: { page: dashboardPageConfig.page || false }, } ); })( jQuery, window.JetDashboardPageConfig );