diff --git a/aleksis/apps/alsijil/static/js/vue/alsijil/LoadComponents.js b/aleksis/apps/alsijil/static/js/vue/alsijil/LoadComponents.js index 6c71a3d7b34ef6d56f9d510f34d0ff804750849c..a42b20b0a37eeae61df0c18f4b1c7bd00854a33c 100644 --- a/aleksis/apps/alsijil/static/js/vue/alsijil/LoadComponents.js +++ b/aleksis/apps/alsijil/static/js/vue/alsijil/LoadComponents.js @@ -1,7 +1,9 @@ +import UpdateIndicator from "../components/alsijil/UpdateIndicator.js"; import PersonalNotes from "../components/alsijil/PersonalNotes.js"; import LessonDocumentation from "../components/alsijil/LessonDocumentation.js"; import CourseBook from '../components/alsijil/CourseBook.js' +Vue.component(UpdateIndicator.name, UpdateIndicator); Vue.component(PersonalNotes.name, PersonalNotes); Vue.component(LessonDocumentation.name, LessonDocumentation); Vue.component(CourseBook.name, CourseBook); \ No newline at end of file diff --git a/aleksis/apps/alsijil/static/js/vue/components/alsijil/UpdateIndicator.js b/aleksis/apps/alsijil/static/js/vue/components/alsijil/UpdateIndicator.js new file mode 100644 index 0000000000000000000000000000000000000000..acd78aab574eab3a6dc8a728ee6dee57f3152294 --- /dev/null +++ b/aleksis/apps/alsijil/static/js/vue/components/alsijil/UpdateIndicator.js @@ -0,0 +1,73 @@ +import {ERROR, SAVED, UPDATING, CHANGES} from "../../alsijil/UpdateStatuses.js"; + +export default { + created() { + this.ERROR = ERROR; + this.SAVED = SAVED; + this.UPDATING = UPDATING; + this.CHANGES = CHANGES; + }, + name: "update-indicator", + emits: ["manual-update"], + props: ["status"], + computed: { + text() { + switch (this.status) { + case SAVED: + return this.$root.django.gettext("All changes are processed."); + case UPDATING: + return this.$root.django.gettext("Changes are being synced."); + case CHANGES: + return this.$root.django.gettext("You have unsaved changes. Click to save immediately."); + default: + return this.$root.django.gettext("There has been an error processing the latest changes."); + } + }, + color() { + switch (this.status) { + case SAVED: + return "success"; + case CHANGES: + return "secondary"; + case UPDATING: + return "secondary"; + default: + return "error"; + } + }, + icon() { + switch (this.status) { + case SAVED: + return "mdi-check-circle-outline"; + case CHANGES: + return "mdi-dots-horizontal"; + default: + return "mdi-alert-outline"; + } + } + }, + template: ` + <v-tooltip bottom> + <template v-slot:activator="{ on, attrs }"> + <div + v-bind="attrs" + v-on="on" + > + <v-icon + v-if="status !== UPDATING" + @click="() => {status === SAVED ? null : $emit('manual-update')}" + :color="color" + > + {{ icon }} + </v-icon> + <v-progress-circular + v-else + indeterminate + :color="color" + ></v-progress-circular> + </div> + </template> + <span>{{ text }}</span> + </v-tooltip> + `, +} \ No newline at end of file