Newer
Older
<v-icon
:color="currentStatus?.color"
class="mr-md-4"
v-on="on"
v-bind="attrs"
>{{ currentStatus?.icon }}</v-icon
>
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
51
52
53
</template>
<span>{{ currentStatus?.text }}</span>
</v-tooltip>
</template>
<script>
import documentationPartMixin from "./documentationPartMixin";
import { DateTime } from "luxon";
export default {
name: "DocumentationStatus",
mixins: [documentationPartMixin],
data() {
return {
statusChoices: [
{
name: "available",
text: this.$t("alsijil.coursebook.status.available"),
icon: "$success",
color: "success",
},
{
name: "missing",
text: this.$t("alsijil.coursebook.status.missing"),
icon: "$warning",
color: "error",
},
{
name: "running",
text: this.$t("alsijil.coursebook.status.running"),
icon: "mdi-play-outline",
color: "warning",
},
{
name: "substitution",
text: this.$t("alsijil.coursebook.status.substitution"),
icon: "$info",
color: "warning",
},
{
name: "cancelled",
text: this.$t("alsijil.coursebook.status.cancelled"),
color: "error",
},
{
name: "pending",
text: this.$t("alsijil.coursebook.status.pending"),
icon: "mdi-clipboard-clock-outline",
color: "blue",
},
],
statusTimeout: null,
currentStatusName: "",
};
},
computed: {
currentStatus() {
return this.statusChoices.find((s) => s.name === this.currentStatusName);
},
documentationDateTimeStart() {
return DateTime.fromISO(this.documentation.datetimeStart);
},
documentationDateTimeEnd() {
return DateTime.fromISO(this.documentation.datetimeEnd);
},
},
methods: {
updateStatus() {
if (this.documentation?.amends.cancelled) {
this.currentStatusName = "cancelled";
} else if (this.documentation.topic) {
} else if (DateTime.now() > this.documentationDateTimeEnd) {
this.currentStatusName = "missing";
} else if (this.documentation?.amends.amends) {
this.currentStatusName = "substitution";
} else if (
DateTime.now() > this.documentationDateTimeStart &&
DateTime.now() < this.documentationDateTimeEnd
) {
this.currentStatusName = "running";
watch: {
documentation: {
handler() {
this.updateStatus();
},
deep: true,

Hangzhi Yu
committed
if (DateTime.now() < this.documentationDateTimeStart) {
this.statusTimeout = setTimeout(
this.updateStatus,
this.documentationDateTimeStart
.diff(DateTime.now(), "seconds")
.toObject(),
);

Hangzhi Yu
committed
} else if (DateTime.now() < this.documentationDateTimeEnd) {
this.statusTimeout = setTimeout(
this.updateStatus,
this.documentationDateTimeEnd
.diff(DateTime.now(), "seconds")
.toObject(),
);

Hangzhi Yu
committed
}

Hangzhi Yu
committed
if (this.statusTimeout) {
clearTimeout(this.statusTimeout);
}