Skip to content
Snippets Groups Projects
Commit cb2fae58 authored by Hangzhi Yu's avatar Hangzhi Yu
Browse files

Add status icon for documentations

parent 2c860ab0
No related branches found
No related tags found
2 merge requests!352Draft: Resolve "Add dialog with each lesson's students",!350Resolve "Add simple course book list"
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
class="full-width d-flex flex-column align-stretch pa-2" class="full-width d-flex flex-column align-stretch pa-2"
:class="{ 'flex-md-row': compact }" :class="{ 'flex-md-row': compact }"
> >
<documentation-status v-if="compact" v-bind="documentationPartProps" />
<lesson-information v-if="compact" :class="{ 'flex-110': !$vuetify.breakpoint.mobile }" v-bind="documentationPartProps" /> <lesson-information v-if="compact" :class="{ 'flex-110': !$vuetify.breakpoint.mobile }" v-bind="documentationPartProps" />
<lesson-summary <lesson-summary
:class="{ 'flex-110': compact && !$vuetify.breakpoint.mobile }" :class="{ 'flex-110': compact && !$vuetify.breakpoint.mobile }"
...@@ -34,6 +35,7 @@ ...@@ -34,6 +35,7 @@
</template> </template>
<script> <script>
import DocumentationStatus from "./DocumentationStatus.vue";
import LessonInformation from "./LessonInformation.vue"; import LessonInformation from "./LessonInformation.vue";
import LessonSummary from "./LessonSummary.vue"; import LessonSummary from "./LessonSummary.vue";
import LessonNotes from "./LessonNotes.vue"; import LessonNotes from "./LessonNotes.vue";
...@@ -48,6 +50,7 @@ import documentationPartMixin from "./documentationPartMixin"; ...@@ -48,6 +50,7 @@ import documentationPartMixin from "./documentationPartMixin";
export default { export default {
name: "Documentation", name: "Documentation",
components: { components: {
DocumentationStatus,
LessonInformation, LessonInformation,
LessonSummary, LessonSummary,
LessonNotes, LessonNotes,
......
<template>
<v-tooltip bottom>
<template v-slot:activator="{ on, attrs }">
<v-icon :color="currentStatus?.color" class="mr-md-4" v-on="on" v-bind="attrs">{{ currentStatus?.icon }}</v-icon>
</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"),
icon: "$cancel",
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.id.startsWith("DUMMY")) {
this.currentStatusName = "available";
} else {
if (DateTime.now() > this.documentationDateTimeEnd) {
this.currentStatusName = "missing";
} else if (DateTime.now() > this.documentationDateTimeStart && DateTime.now() < this.documentationDateTimeEnd) {
this.currentStatusName = "running";
} else {
if (this.documentation?.lessonEvent.amends) {
if (this.documentation.lessonEvent.amends.cancelled) {
this.currentStatusName = "cancelled";
} else {
this.currentStatusName = "substitution";
}
} else {
this.currentStatusName = "pending";
}
}
}
},
},
mounted() {
this.updateStatus();
this.statusTimeout = setTimeout(this.updateStatus, this.documentationDateTimeStart.diff(DateTime.now(), "seconds").toObject().seconds);
},
beforeDestroy() {
clearTimeout(this.statusTimeout);
},
}
</script>
...@@ -36,6 +36,14 @@ ...@@ -36,6 +36,14 @@
"menu_title": "Kursbuch", "menu_title": "Kursbuch",
"page_title": "Kursbuch für {name}", "page_title": "Kursbuch für {name}",
"title_plural": "Kursbuch", "title_plural": "Kursbuch",
"status": {
"available": "Kursbucheintrag vorhanden",
"missing": "Kursbucheintrag fehlt",
"running": "Stunde läuft",
"substitution": "Vertretungsstunde",
"cancelled": "Stunde fällt aus",
"pending": "Stunde in der Zukunft"
},
"summary": { "summary": {
"topic": "Thema", "topic": "Thema",
"homework": { "homework": {
......
...@@ -36,6 +36,14 @@ ...@@ -36,6 +36,14 @@
"menu_title": "Coursebook", "menu_title": "Coursebook",
"page_title": "Coursebook for {name}", "page_title": "Coursebook for {name}",
"title_plural": "Coursebook", "title_plural": "Coursebook",
"status": {
"available": "Documentation available",
"missing": "Documentation missing",
"running": "Lesson running",
"substitution": "Substitution lesson",
"cancelled": "Lesson cancelled",
"pending": "Lesson pending"
},
"summary": { "summary": {
"topic": "Topic", "topic": "Topic",
"homework": { "homework": {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment