✨ (install PWA) Add install PWA app
This commit is contained in:
27
package-lock.json
generated
27
package-lock.json
generated
@@ -1021,6 +1021,15 @@
|
|||||||
"integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
|
"integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"@pwabuilder/pwainstall": {
|
||||||
|
"version": "0.9.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@pwabuilder/pwainstall/-/pwainstall-0.9.4.tgz",
|
||||||
|
"integrity": "sha512-yJLS4AVMmmvENLlqnaB3d4s+j7MD0k9cmWr9kJuXCBer6b2yVLfDqUlyZjYijJNPxKd6tbbeN9JrecZ8WxKsbg==",
|
||||||
|
"requires": {
|
||||||
|
"infinite-carousel-wc": "^0.4.1",
|
||||||
|
"lit-element": "^2.2.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@soda/friendly-errors-webpack-plugin": {
|
"@soda/friendly-errors-webpack-plugin": {
|
||||||
"version": "1.7.1",
|
"version": "1.7.1",
|
||||||
"resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz",
|
"resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz",
|
||||||
@@ -7511,6 +7520,11 @@
|
|||||||
"integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
|
"integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"infinite-carousel-wc": {
|
||||||
|
"version": "0.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/infinite-carousel-wc/-/infinite-carousel-wc-0.4.1.tgz",
|
||||||
|
"integrity": "sha512-d0U/zdPXZxMzIFEtMHlQ4iGGwe3BchOi4y5RC3ZMjVW7oXdSOdE0CChTtEBcnjgHvovQXcld31kTFMsMv3emcQ=="
|
||||||
|
},
|
||||||
"infinity-x": {
|
"infinity-x": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/infinity-x/-/infinity-x-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/infinity-x/-/infinity-x-1.0.2.tgz",
|
||||||
@@ -9490,6 +9504,19 @@
|
|||||||
"integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
|
"integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"lit-element": {
|
||||||
|
"version": "2.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/lit-element/-/lit-element-2.2.1.tgz",
|
||||||
|
"integrity": "sha512-ipDcgQ1EpW6Va2Z6dWm79jYdimVepO5GL0eYkZrFvdr0OD/1N260Q9DH+K5HXHFrRoC7dOg+ZpED2XE0TgGdXw==",
|
||||||
|
"requires": {
|
||||||
|
"lit-html": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lit-html": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/lit-html/-/lit-html-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-FFlUMKHKi+qG1x1iHNZ1hrtc/zHmfYTyrSvs3/wBTvaNtpZjOZGWzU7efGYVpgp6KvWeKF6ql9/KsCq6Z/mEDA=="
|
||||||
|
},
|
||||||
"load-json-file": {
|
"load-json-file": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
|
"resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
"@fortawesome/fontawesome-svg-core": "^1.2.25",
|
"@fortawesome/fontawesome-svg-core": "^1.2.25",
|
||||||
"@fortawesome/free-solid-svg-icons": "^5.11.2",
|
"@fortawesome/free-solid-svg-icons": "^5.11.2",
|
||||||
"@fortawesome/vue-fontawesome": "^0.1.7",
|
"@fortawesome/vue-fontawesome": "^0.1.7",
|
||||||
|
"@pwabuilder/pwainstall": "^0.9.4",
|
||||||
"@xkeshi/vue-qrcode": "^1.0.0",
|
"@xkeshi/vue-qrcode": "^1.0.0",
|
||||||
"axios": "^0.19.0",
|
"axios": "^0.19.0",
|
||||||
"bulma": "^0.7.5",
|
"bulma": "^0.7.5",
|
||||||
|
|||||||
@@ -42,6 +42,7 @@
|
|||||||
@click="hideMenu"
|
@click="hideMenu"
|
||||||
>
|
>
|
||||||
<div class="navbar-end">
|
<div class="navbar-end">
|
||||||
|
<install-app />
|
||||||
<router-link
|
<router-link
|
||||||
class="navbar-item"
|
class="navbar-item"
|
||||||
:to="{ name: 'about' }"
|
:to="{ name: 'about' }"
|
||||||
@@ -73,13 +74,15 @@ import { Action, Getter } from 'vuex-class'
|
|||||||
import IUser from '@/models/IUser'
|
import IUser from '@/models/IUser'
|
||||||
import { COFFEE_LINK } from '@/utils/constants'
|
import { COFFEE_LINK } from '@/utils/constants'
|
||||||
import OnlineView from '@/components/OnlineView.vue'
|
import OnlineView from '@/components/OnlineView.vue'
|
||||||
|
import InstallApp from './components/InstallApp.vue'
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
directives: {
|
directives: {
|
||||||
ClickOutside
|
ClickOutside
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
'online-view': OnlineView
|
'online-view': OnlineView,
|
||||||
|
'install-app': InstallApp
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
export default class App extends Vue {
|
export default class App extends Vue {
|
||||||
|
|||||||
29
src/components/InstallApp.vue
Normal file
29
src/components/InstallApp.vue
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
<template>
|
||||||
|
<span class="install-app" v-if="showInstall">
|
||||||
|
<a @click="prompt" class="navbar-item">installer</a>
|
||||||
|
<pwa-install></pwa-install>
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { Component, Vue } from 'vue-property-decorator'
|
||||||
|
import accountService from '@/services/AccountService'
|
||||||
|
|
||||||
|
@Component
|
||||||
|
export default class InstallApp extends Vue {
|
||||||
|
private showInstall: boolean = false
|
||||||
|
public mounted(): void {
|
||||||
|
window.addEventListener('beforeinstallprompt', async () => {
|
||||||
|
const accounts = await accountService.getAll(true)
|
||||||
|
this.showInstall = accounts.length > 0
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
public prompt(): void {
|
||||||
|
const pwaInstall = document.querySelector('pwa-install') as any
|
||||||
|
if (pwaInstall) {
|
||||||
|
pwaInstall.openPrompt()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -9,11 +9,14 @@ import './registerServiceWorker'
|
|||||||
import filters from './utils/filters'
|
import filters from './utils/filters'
|
||||||
import './utils/icons'
|
import './utils/icons'
|
||||||
import messages from './messages'
|
import messages from './messages'
|
||||||
|
import '@pwabuilder/pwainstall'
|
||||||
|
|
||||||
Vue.use(VueI18n)
|
Vue.use(VueI18n)
|
||||||
|
|
||||||
Vue.config.productionTip = false
|
Vue.config.productionTip = false
|
||||||
|
|
||||||
|
Vue.config.ignoredElements = ['pwa-install']
|
||||||
|
|
||||||
for (const filter of Object.keys(filters)) {
|
for (const filter of Object.keys(filters)) {
|
||||||
Vue.filter(filter, filters[filter])
|
Vue.filter(filter, filters[filter])
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user