/** * First we will load all of this project's JavaScript dependencies which * includes Vue and other libraries. It is a great starting point when * building robust, powerful web applications using Vue and Laravel. */ require('./../../bootstrap'); import Vue from 'vue'; import DashboardPlugin from './../../plugins/dashboard-plugin'; import Global from './../../mixins/global'; import Form from './../../plugins/form'; import { Progress } from 'element-ui'; import AkauntingSlider from './../../components/AkauntingSlider.vue'; // plugin setup Vue.use(DashboardPlugin, Progress); const app = new Vue({ el: '#app', mixins: [ Global ], components: { [Progress.name]: Progress, AkauntingSlider }, created() { document.addEventListener('click', this.closeIfClickedOutside); }, mounted() { if (typeof app_slug !== 'undefined') { this.onReleases(1); this.onReviews(1); } }, data: function () { return { keyword: '', form: new Form('form-app'), page: 2, current_page: 1, releases: { status: false, html: '', pagination: { current_page: 1, last_page: 1 } }, reviews: { status: false, html: '', pagination: { current_page: 1, last_page: 1 } }, page: { reviews: 2, releases: 2, }, reviewPage: 2, faq: false, installation: { show: false, steps: [], steps_total: 0, total: 0, path: '', alias: '', version: '', status: 'success', html: '' }, addToCartLoading: false, loadMoreLoading: false, live_search: { data: [], modal: false, not_found: false }, route_url: url } }, methods: { addToCart(alias, subscription_type) { this.addToCartLoading = true; let add_to_cart_promise = Promise.resolve(axios.get(url + '/apps/' + alias + '/' + subscription_type +'/add')); add_to_cart_promise.then(response => { if (response.data.success) { this.$notify({ verticalAlign: 'bottom', horizontalAlign: 'left', message: response.data.message, timeout: 0, icon: "shopping_cart_checkout", type: 'success' }); } this.addToCartLoading = false; }) .catch(error => { this.addToCartLoading = false; }); }, async onloadMore() { this.loadMoreLoading = true; this.current_page++; let path = document.getElementById('see_more_path').value; let alias = ''; let keyword = ''; if (document.getElementById('see_more_alias')) { alias = document.getElementById('see_more_alias').value; } if (document.getElementById('see_more_keyword')) { keyword = document.getElementById('see_more_keyword').value; } if (this.keyword !== '') { keyword = this.keyword; } document.getElementById("button-pre-load").setAttribute("disabled", true); let more_promise = Promise.resolve(window.axios.post(path, { page: this.current_page, alias: alias, keyword: keyword, })); more_promise.then(response => { if (response.data.success) { document.querySelector("[data-apps-content]").innerHTML += response.data.html; } if (response.data.last_page == this.current_page) { document.getElementById("button-pre-load").remove(); } this.loadMoreLoading = false; }) .catch(error => { this.loadMoreLoading = false; }); }, async onReleases(page) { let releases_promise = Promise.resolve(window.axios.post(url + '/apps/' + app_slug + '/releases', { page: page })); releases_promise.then(response => { if (response.data.success) { this.releases.status= true; this.releases.html = response.data.html; this.releases.pagination.current_page = page; this.releases.pagination.last_page = response.data.data.last_page; } }) .catch(error => { }); }, async onReviews(page) { let reviews_promise = Promise.resolve(window.axios.post(url + '/apps/' + app_slug + '/reviews', { page: page })); reviews_promise.then(response => { if (response.data.success) { this.reviews.status= true; this.reviews.html = response.data.html; this.reviews.pagination.current_page = page; this.reviews.pagination.last_page = response.data.data.last_page; } }) .catch(error => { }); }, onShowFaq() { this.faq = true; }, async onInstall(path, alias, name, version) { this.installation.alias = alias; this.installation.show = true; this.installation.total = 0; this.installation.path = path; this.installation.version = version; let steps_promise = Promise.resolve(axios.post(url + '/apps/steps', { name: name, alias: alias, version: version })); steps_promise.then(response => { if (response.data.error) { this.installation.status = 'exception'; this.installation.html = '
' + response.data.message + '
'; } // Set steps if (response.data.data) { this.installation.steps = response.data.data; this.installation.steps_total = this.installation.steps.length; this.next(); } }) .catch(error => { }); }, async next() { let data = this.installation.steps.shift(); if (data) { this.installation.total = parseInt((100 - ((this.installation.steps.length / this.installation.steps_total) * 100)).toFixed(0)); this.installation.html = ' ' + data['text'] + '
'; let step_promise = Promise.resolve(axios.post(data.url, { alias: this.installation.alias, version: this.installation.version, path: this.installation.path, })); step_promise.then(response => { if (response.data.error) { this.installation.status = 'exception'; this.installation.html = '
' + response.data.message + '
'; } if (response.data.success) { this.installation.status = 'success'; } if (response.data.data.path) { this.installation.path = response.data.data.path; } if (!response.data.error && !response.data.redirect) { setTimeout(function() { this.next(); }.bind(this), 800); } if (response.data.redirect) { window.location = response.data.redirect; } }) .catch(error => { }); } }, async onModuleLoadMore(type) { this.loadMoreLoading = true; let module_promise = Promise.resolve(window.axios.post(url + '/apps/' + app_slug + '/' + type, { page: this.page[type] })); module_promise.then(response => { if (response.data.success) { this.page[type]++; document.querySelector('.js-'+ type + '-content').innerHTML += response.data.html; this.loadMoreLoading = false; } }) .catch(error => { this.loadMoreLoading = false; }); }, closeIfClickedOutside(event) { let el = this.$refs.liveSearchModal; let target = event.target; if (el !== target && target.contains(el)) { this.live_search.modal = false; } }, onLiveSearch(event) { let target_length = event.target.value.length; if (target_length > 2) { window.axios.get(url + '/apps/search?keyword=' + event.target.value) .then(response => { this.live_search.data = response.data.data.data; this.live_search.modal = true; this.live_search.not_found = false; }) .catch(error => { this.live_search.not_found = true; this.live_search.data = []; console.log(error); }) } else if (target_length == 0) { this.live_search.modal = false; } } } });