49 lines
1.1 KiB
JavaScript
49 lines
1.1 KiB
JavaScript
import { find } from 'lodash'
|
|
import { defineAsyncComponent } from 'vue'
|
|
|
|
import { library } from '@fortawesome/fontawesome-svg-core'
|
|
import { faCircleNotch } from '@fortawesome/free-solid-svg-icons'
|
|
|
|
library.add(faCircleNotch)
|
|
|
|
const StatusPopover = {
|
|
name: 'StatusPopover',
|
|
props: ['statusId'],
|
|
data() {
|
|
return {
|
|
error: false,
|
|
}
|
|
},
|
|
computed: {
|
|
status() {
|
|
return find(this.$store.state.statuses.allStatuses, { id: this.statusId })
|
|
},
|
|
},
|
|
components: {
|
|
Status: defineAsyncComponent(() => import('../status/status.vue')),
|
|
Popover: defineAsyncComponent(() => import('../popover/popover.vue')),
|
|
},
|
|
methods: {
|
|
enter() {
|
|
if (!this.status) {
|
|
if (!this.statusId) {
|
|
this.error = true
|
|
return
|
|
}
|
|
this.$store
|
|
.dispatch('fetchStatus', this.statusId)
|
|
.then(() => (this.error = false))
|
|
.catch(() => (this.error = true))
|
|
}
|
|
},
|
|
},
|
|
watch: {
|
|
status(newStatus, oldStatus) {
|
|
if (newStatus !== oldStatus) {
|
|
this.$nextTick(() => this.$refs.popover.updateStyles())
|
|
}
|
|
},
|
|
},
|
|
}
|
|
|
|
export default StatusPopover
|