summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/jobs/mixins/delayed_job_mixin.js
blob: 8c7fb785a61b62903063592cbc96ffca963cf9d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import { calculateRemainingMilliseconds, formatTime } from '~/lib/utils/datetime_utility';

export default {
  data() {
    return {
      remainingTime: formatTime(0),
      remainingTimeIntervalId: null,
    };
  },

  mounted() {
    this.startRemainingTimeInterval();
  },

  beforeDestroy() {
    if (this.remainingTimeIntervalId) {
      clearInterval(this.remainingTimeIntervalId);
    }
  },

  computed: {
    isDelayedJob() {
      return this.job && this.job.scheduled;
    },
  },

  watch: {
    isDelayedJob() {
      this.startRemainingTimeInterval();
    },
  },

  methods: {
    startRemainingTimeInterval() {
      if (this.remainingTimeIntervalId) {
        clearInterval(this.remainingTimeIntervalId);
      }

      if (this.isDelayedJob) {
        this.updateRemainingTime();
        this.remainingTimeIntervalId = setInterval(() => this.updateRemainingTime(), 1000);
      }
    },

    updateRemainingTime() {
      const remainingMilliseconds = calculateRemainingMilliseconds(this.job.scheduled_at);
      this.remainingTime = formatTime(remainingMilliseconds);
    },
  },
};