Docstrings, AdminDashboard button loading, new BannerStateEnums
This commit is contained in:
@@ -170,7 +170,11 @@
|
|||||||
"bandDeleteError": "Fehler beim Löschen der Band",
|
"bandDeleteError": "Fehler beim Löschen der Band",
|
||||||
"bandDeleteSuccessful": "Band erfolgreich gelöscht",
|
"bandDeleteSuccessful": "Band erfolgreich gelöscht",
|
||||||
"bandSavedError": "Fehler beim Speichern der Band",
|
"bandSavedError": "Fehler beim Speichern der Band",
|
||||||
"bandSavedSuccessful": "Band erfolgreich gespeichert"
|
"bandSavedSuccessful": "Band erfolgreich gespeichert",
|
||||||
|
"genreDeleteError": "Fehler beim Löschen des Genres",
|
||||||
|
"genreDeleteSuccessful": "Genre erfolgreich gelöscht",
|
||||||
|
"genreSavedError": "Genre erfolgreich gespeichert",
|
||||||
|
"genreSavedSuccessful": "Fehler beim Speichern des Genres"
|
||||||
},
|
},
|
||||||
"misc": {
|
"misc": {
|
||||||
"404": {
|
"404": {
|
||||||
@@ -212,5 +216,8 @@
|
|||||||
"title": "Ersteinrichtung",
|
"title": "Ersteinrichtung",
|
||||||
"description": "Die Datenbank wird eingerichtet. Dies kann 1-2 Minuten dauern. Bitte warten..."
|
"description": "Die Datenbank wird eingerichtet. Dies kann 1-2 Minuten dauern. Bitte warten..."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"genre": {
|
||||||
|
"withoutBand": "ohne Band"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -170,7 +170,11 @@
|
|||||||
"bandDeleteError": "Error on deleting band",
|
"bandDeleteError": "Error on deleting band",
|
||||||
"bandDeleteSuccessful": "Band successfully deleted",
|
"bandDeleteSuccessful": "Band successfully deleted",
|
||||||
"bandSavedError": "Error on saving band",
|
"bandSavedError": "Error on saving band",
|
||||||
"bandSavedSuccessful": "Band successfully saved"
|
"bandSavedSuccessful": "Band successfully saved",
|
||||||
|
"genreDeleteError": "Error on deleting Genre",
|
||||||
|
"genreDeleteSuccessful": "Genre successfully deleted",
|
||||||
|
"genreSavedError": "Genre successfully saved",
|
||||||
|
"genreSavedSuccessful": "Error on saving genre"
|
||||||
},
|
},
|
||||||
"misc": {
|
"misc": {
|
||||||
"404": {
|
"404": {
|
||||||
@@ -212,5 +216,8 @@
|
|||||||
"title": "First startup",
|
"title": "First startup",
|
||||||
"description": "Creating database. This could take 1-2 minutes. Please wait..."
|
"description": "Creating database. This could take 1-2 minutes. Please wait..."
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"genre": {
|
||||||
|
"withoutBand": "without Band"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import { useConcertStore } from '@/stores/concert.store';
|
|||||||
import { useBandStore } from '@/stores/band.store';
|
import { useBandStore } from '@/stores/band.store';
|
||||||
import { useAccountStore } from '@/stores/account.store';
|
import { useAccountStore } from '@/stores/account.store';
|
||||||
import { useLocationStore } from '@/stores/location.store';
|
import { useLocationStore } from '@/stores/location.store';
|
||||||
import { ref } from 'vue';
|
|
||||||
import { useExerciseStore } from '@/stores/exercise.store';
|
import { useExerciseStore } from '@/stores/exercise.store';
|
||||||
import { useGenreStore } from '@/stores/genre.store';
|
import { useGenreStore } from '@/stores/genre.store';
|
||||||
import { usePreferencesStore } from '@/stores/preferences.store';
|
import { usePreferencesStore } from '@/stores/preferences.store';
|
||||||
@@ -45,6 +44,7 @@ concertStore.getConcerts()
|
|||||||
<template #actions>
|
<template #actions>
|
||||||
<outlined-button
|
<outlined-button
|
||||||
@click="router.push('/admin/bands')"
|
@click="router.push('/admin/bands')"
|
||||||
|
:loading="bandStore.fetchInProgress"
|
||||||
>
|
>
|
||||||
{{ $t('misc.actions.more') }}
|
{{ $t('misc.actions.more') }}
|
||||||
</outlined-button>
|
</outlined-button>
|
||||||
@@ -74,6 +74,7 @@ concertStore.getConcerts()
|
|||||||
<template #actions>
|
<template #actions>
|
||||||
<outlined-button
|
<outlined-button
|
||||||
@click="router.push('/admin/concerts')"
|
@click="router.push('/admin/concerts')"
|
||||||
|
:loading="concertStore.fetchInProgress"
|
||||||
>
|
>
|
||||||
{{ $t('misc.actions.more') }}
|
{{ $t('misc.actions.more') }}
|
||||||
</outlined-button>
|
</outlined-button>
|
||||||
@@ -106,6 +107,7 @@ concertStore.getConcerts()
|
|||||||
<template #actions>
|
<template #actions>
|
||||||
<outlined-button
|
<outlined-button
|
||||||
@click="router.push('/admin/locations')"
|
@click="router.push('/admin/locations')"
|
||||||
|
:loading="locationStore.fetchInProgress"
|
||||||
>
|
>
|
||||||
{{ $t('misc.actions.more') }}
|
{{ $t('misc.actions.more') }}
|
||||||
</outlined-button>
|
</outlined-button>
|
||||||
@@ -115,7 +117,6 @@ concertStore.getConcerts()
|
|||||||
</v-row>
|
</v-row>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col>
|
<v-col>
|
||||||
<card-view
|
<card-view
|
||||||
@@ -129,6 +130,7 @@ concertStore.getConcerts()
|
|||||||
<template #actions>
|
<template #actions>
|
||||||
<outlined-button
|
<outlined-button
|
||||||
@click="router.push('/admin/accounts')"
|
@click="router.push('/admin/accounts')"
|
||||||
|
:loading="accountStore.fetchInProgress"
|
||||||
>
|
>
|
||||||
{{ $t('misc.actions.more') }}
|
{{ $t('misc.actions.more') }}
|
||||||
</outlined-button>
|
</outlined-button>
|
||||||
@@ -145,9 +147,16 @@ concertStore.getConcerts()
|
|||||||
{{ genreStore.genres.length }} {{ $t('band.genre', 2) }}
|
{{ genreStore.genres.length }} {{ $t('band.genre', 2) }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="text-h6 text-center text-disabled">
|
||||||
|
{{ genreStore.genres.reduce((counter, obj) => {
|
||||||
|
return obj.bands.length == 0 ? counter += 1 : counter
|
||||||
|
}, 0) }} {{ $t('genre.withoutBand') }}
|
||||||
|
</div>
|
||||||
|
|
||||||
<template #actions>
|
<template #actions>
|
||||||
<outlined-button
|
<outlined-button
|
||||||
@click="router.push('/admin/genres')"
|
@click="router.push('/admin/genres')"
|
||||||
|
:loading="genreStore.fetchInProgress"
|
||||||
>
|
>
|
||||||
{{ $t('misc.actions.more') }}
|
{{ $t('misc.actions.more') }}
|
||||||
</outlined-button>
|
</outlined-button>
|
||||||
@@ -173,6 +182,7 @@ concertStore.getConcerts()
|
|||||||
<template #actions>
|
<template #actions>
|
||||||
<outlined-button
|
<outlined-button
|
||||||
@click="router.push('/admin/files')"
|
@click="router.push('/admin/files')"
|
||||||
|
:loading="preferencesStore.fetchInProgress"
|
||||||
>
|
>
|
||||||
{{ $t('misc.actions.more') }}
|
{{ $t('misc.actions.more') }}
|
||||||
</outlined-button>
|
</outlined-button>
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import { BannerStateEnum } from "@/data/enums/bannerStateEnum";
|
|||||||
|
|
||||||
export const useExerciseStore = defineStore("exerciseStore", {
|
export const useExerciseStore = defineStore("exerciseStore", {
|
||||||
state: () => ({
|
state: () => ({
|
||||||
|
/** All exercise groups with sub-exercises */
|
||||||
exerciseGroups: ref<Array<ExerciseGroupApiModel>>([]),
|
exerciseGroups: ref<Array<ExerciseGroupApiModel>>([]),
|
||||||
|
|
||||||
/** Request to server sent, waiting for data response */
|
/** Request to server sent, waiting for data response */
|
||||||
@@ -14,68 +15,83 @@ export const useExerciseStore = defineStore("exerciseStore", {
|
|||||||
}),
|
}),
|
||||||
|
|
||||||
actions: {
|
actions: {
|
||||||
getAllExercises() {
|
/**
|
||||||
|
* Get all exercises and exercise groups from server
|
||||||
|
*/
|
||||||
|
async getAllExercises() {
|
||||||
this.fetchInProgress = true
|
this.fetchInProgress = true
|
||||||
|
|
||||||
fetchAllExerciseGroups()
|
await fetchAllExerciseGroups()
|
||||||
.then(result => {
|
.then(result => {
|
||||||
this.exerciseGroups = result.data
|
this.exerciseGroups = result.data
|
||||||
this.fetchInProgress = false
|
this.fetchInProgress = false
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
solveExercise(exerciseGroupNr: number, exerciseNr: number) {
|
/**
|
||||||
|
* Mark an exercise as solved
|
||||||
|
*
|
||||||
|
* @param exerciseGroupNr Exercise group number (0-3)
|
||||||
|
* @param exerciseNr Exercise number (1-3)
|
||||||
|
*/
|
||||||
|
async solveExercise(exerciseGroupNr: number, exerciseNr: number) {
|
||||||
|
// Request all exercises from server
|
||||||
|
await this.getAllExercises()
|
||||||
|
|
||||||
const feedbackStore = useFeedbackStore()
|
const feedbackStore = useFeedbackStore()
|
||||||
this.fetchInProgress = true
|
this.fetchInProgress = true
|
||||||
|
|
||||||
updateExercise(exerciseGroupNr, exerciseNr, true)
|
|
||||||
.then(result => {
|
|
||||||
let bannerState = BannerStateEnum.ERROR
|
|
||||||
|
|
||||||
switch(exerciseGroupNr) {
|
// Change only if the exercise is not solved
|
||||||
case 0: {
|
if(!this.exerciseGroups[exerciseGroupNr].exercises[exerciseNr - 1].solved) {
|
||||||
switch(exerciseNr) {
|
updateExercise(exerciseGroupNr, exerciseNr, true)
|
||||||
case 1: bannerState = BannerStateEnum.EXERCISESOLVED01; break;
|
.then(result => {
|
||||||
case 2: bannerState = BannerStateEnum.EXERCISESOLVED02; break;
|
let bannerState = BannerStateEnum.ERROR
|
||||||
|
|
||||||
|
switch(exerciseGroupNr) {
|
||||||
|
case 0: {
|
||||||
|
switch(exerciseNr) {
|
||||||
|
case 1: bannerState = BannerStateEnum.EXERCISESOLVED01; break;
|
||||||
|
case 2: bannerState = BannerStateEnum.EXERCISESOLVED02; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
case 1: {
|
||||||
}
|
switch(exerciseNr) {
|
||||||
|
case 1: bannerState = BannerStateEnum.EXERCISESOLVED11; break;
|
||||||
|
case 2: bannerState = BannerStateEnum.EXERCISESOLVED12; break;
|
||||||
|
case 3: bannerState = BannerStateEnum.EXERCISESOLVED13; break;
|
||||||
|
}
|
||||||
|
|
||||||
case 1: {
|
break;
|
||||||
switch(exerciseNr) {
|
|
||||||
case 1: bannerState = BannerStateEnum.EXERCISESOLVED11; break;
|
|
||||||
case 2: bannerState = BannerStateEnum.EXERCISESOLVED12; break;
|
|
||||||
case 3: bannerState = BannerStateEnum.EXERCISESOLVED13; break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
case 2: {
|
||||||
}
|
switch(exerciseNr) {
|
||||||
|
case 1: bannerState = BannerStateEnum.EXERCISESOLVED21; break;
|
||||||
|
case 2: bannerState = BannerStateEnum.EXERCISESOLVED22; break;
|
||||||
|
case 3: bannerState = BannerStateEnum.EXERCISESOLVED23; break;
|
||||||
|
}
|
||||||
|
|
||||||
case 2: {
|
break;
|
||||||
switch(exerciseNr) {
|
|
||||||
case 1: bannerState = BannerStateEnum.EXERCISESOLVED21; break;
|
|
||||||
case 2: bannerState = BannerStateEnum.EXERCISESOLVED22; break;
|
|
||||||
case 3: bannerState = BannerStateEnum.EXERCISESOLVED23; break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
case 3: {
|
||||||
}
|
switch(exerciseNr) {
|
||||||
|
case 1: bannerState = BannerStateEnum.EXERCISESOLVED31; break;
|
||||||
|
case 2: bannerState = BannerStateEnum.EXERCISESOLVED32; break;
|
||||||
|
case 3: bannerState = BannerStateEnum.EXERCISESOLVED33; break;
|
||||||
|
}
|
||||||
|
|
||||||
case 3: {
|
break;
|
||||||
switch(exerciseNr) {
|
|
||||||
case 1: bannerState = BannerStateEnum.EXERCISESOLVED31; break;
|
|
||||||
case 2: bannerState = BannerStateEnum.EXERCISESOLVED32; break;
|
|
||||||
case 3: bannerState = BannerStateEnum.EXERCISESOLVED33; break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
feedbackStore.changeBanner(bannerState)
|
feedbackStore.changeBanner(bannerState)
|
||||||
this.getAllExercises()
|
this.getAllExercises()
|
||||||
})
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -9,10 +9,19 @@ import { Composer } from 'vue-i18n';
|
|||||||
*/
|
*/
|
||||||
export const useFeedbackStore = defineStore("feedbackStore", {
|
export const useFeedbackStore = defineStore("feedbackStore", {
|
||||||
state: () => ({
|
state: () => ({
|
||||||
|
/** Show notification banner in top right corner */
|
||||||
showBanner: ref(false),
|
showBanner: ref(false),
|
||||||
|
|
||||||
|
/** Text in the notification banner */
|
||||||
title: ref(""),
|
title: ref(""),
|
||||||
|
|
||||||
|
/** Color of the notification banner */
|
||||||
color: ref(""),
|
color: ref(""),
|
||||||
|
|
||||||
|
/** Prepend icon of the notification banner */
|
||||||
icon: ref(""),
|
icon: ref(""),
|
||||||
|
|
||||||
|
/** Programmatically access to language translation module */
|
||||||
$i18n: {},
|
$i18n: {},
|
||||||
|
|
||||||
/** Band, Location or concert on URL does not exist, redirect to 404 page */
|
/** Band, Location or concert on URL does not exist, redirect to 404 page */
|
||||||
@@ -26,6 +35,11 @@ export const useFeedbackStore = defineStore("feedbackStore", {
|
|||||||
},
|
},
|
||||||
|
|
||||||
actions: {
|
actions: {
|
||||||
|
/**
|
||||||
|
* Change the state of the banner, displays it immediately
|
||||||
|
*
|
||||||
|
* @param bannerState New banner state
|
||||||
|
*/
|
||||||
changeBanner(bannerState: BannerStateEnum) {
|
changeBanner(bannerState: BannerStateEnum) {
|
||||||
// Banner message
|
// Banner message
|
||||||
switch (bannerState) {
|
switch (bannerState) {
|
||||||
@@ -153,6 +167,25 @@ export const useFeedbackStore = defineStore("feedbackStore", {
|
|||||||
case BannerStateEnum.BANDSAVEDSUCCESSFUL: {
|
case BannerStateEnum.BANDSAVEDSUCCESSFUL: {
|
||||||
this.title = this.i18n.t('bannerMessages.bandSavedSuccessful'); break;
|
this.title = this.i18n.t('bannerMessages.bandSavedSuccessful'); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
////////// API Endpoint /genres //////////
|
||||||
|
|
||||||
|
case BannerStateEnum.GENREDELETEERROR: {
|
||||||
|
this.title = this.i18n.t('bannerMessages.genreDeleteError'); break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case BannerStateEnum.GENREDELETESUCCESSFUL: {
|
||||||
|
this.title = this.i18n.t('bannerMessages.genreDeleteSuccessful'); break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case BannerStateEnum.GENRESAVEDERROR: {
|
||||||
|
this.title = this.i18n.t('bannerMessages.genreSavedError'); break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case BannerStateEnum.GENRESAVEDSUCCESSFUL: {
|
||||||
|
this.title = this.i18n.t('bannerMessages.genreSavedSuccessful'); break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -166,6 +199,8 @@ export const useFeedbackStore = defineStore("feedbackStore", {
|
|||||||
case BannerStateEnum.ACCOUNTREGISTERUSERNAMEINUSE:
|
case BannerStateEnum.ACCOUNTREGISTERUSERNAMEINUSE:
|
||||||
case BannerStateEnum.BANDDELETEERROR:
|
case BannerStateEnum.BANDDELETEERROR:
|
||||||
case BannerStateEnum.BANDSAVEDERROR:
|
case BannerStateEnum.BANDSAVEDERROR:
|
||||||
|
case BannerStateEnum.GENREDELETEERROR:
|
||||||
|
case BannerStateEnum.GENRESAVEDERROR:
|
||||||
this.color = "red"
|
this.color = "red"
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -179,6 +214,8 @@ export const useFeedbackStore = defineStore("feedbackStore", {
|
|||||||
case BannerStateEnum.BANDDELETESUCCESSFUL:
|
case BannerStateEnum.BANDDELETESUCCESSFUL:
|
||||||
case BannerStateEnum.BANDSAVEDSUCCESSFUL:
|
case BannerStateEnum.BANDSAVEDSUCCESSFUL:
|
||||||
case BannerStateEnum.EXERCISEPROGRESSRESETSUCCESSFUL:
|
case BannerStateEnum.EXERCISEPROGRESSRESETSUCCESSFUL:
|
||||||
|
case BannerStateEnum.GENREDELETESUCCESSFUL:
|
||||||
|
case BannerStateEnum.GENRESAVEDSUCCESSFUL:
|
||||||
this.color = "green"
|
this.color = "green"
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -231,6 +268,7 @@ export const useFeedbackStore = defineStore("feedbackStore", {
|
|||||||
|
|
||||||
|
|
||||||
case BannerStateEnum.DATABASERESETSUCCESSFUL:
|
case BannerStateEnum.DATABASERESETSUCCESSFUL:
|
||||||
|
case BannerStateEnum.EXERCISEPROGRESSRESETSUCCESSFUL:
|
||||||
this.icon = "mdi-database-refresh"
|
this.icon = "mdi-database-refresh"
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -265,6 +303,13 @@ export const useFeedbackStore = defineStore("feedbackStore", {
|
|||||||
case BannerStateEnum.BANDSAVEDSUCCESSFUL:
|
case BannerStateEnum.BANDSAVEDSUCCESSFUL:
|
||||||
this.icon = "mdi-guitar-electric"
|
this.icon = "mdi-guitar-electric"
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case BannerStateEnum.GENREDELETEERROR:
|
||||||
|
case BannerStateEnum.GENREDELETESUCCESSFUL:
|
||||||
|
case BannerStateEnum.GENRESAVEDERROR:
|
||||||
|
case BannerStateEnum.GENRESAVEDSUCCESSFUL:
|
||||||
|
this.icon = "mdi-music"
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.showBanner = true
|
this.showBanner = true
|
||||||
|
|||||||
Reference in New Issue
Block a user