Loading feedback with indeterminate circle

This commit is contained in:
2024-10-03 20:19:03 +02:00
parent 67ed71858c
commit 17e6b08129
4 changed files with 21 additions and 7 deletions

View File

@@ -29,9 +29,9 @@ const path = require('path')
app.use('/static', express.static(path.join(__dirname, 'images'))) app.use('/static', express.static(path.join(__dirname, 'images')))
// Add delay for more realistic response times // Add delay for more realistic response times
// app.use((req, res, next) => { app.use((req, res, next) => {
// setTimeout(next, Math.floor((Math.random () * 4000) + 100)) setTimeout(next, Math.floor((Math.random () * 4000) + 100))
// }) })
// Routes // Routes
app.use("/api", api) app.use("/api", api)

View File

@@ -9,6 +9,7 @@ export const useFeedbackStore = defineStore("feedbackStore", {
title: ref(""), title: ref(""),
color: ref(""), color: ref(""),
icon: ref(""), icon: ref(""),
fetchDataFromServerInProgress: ref(false),
$i18n: {} $i18n: {}
}), }),

View File

@@ -6,24 +6,29 @@ import { fetchAllCities } from "../api/cityApi";
import { CityModel } from "../models/locations/cityModel"; import { CityModel } from "../models/locations/cityModel";
import { GenreModel } from "../models/acts/genreModel"; import { GenreModel } from "../models/acts/genreModel";
import { fetchAllGenres } from "../api/genreApi"; import { fetchAllGenres } from "../api/genreApi";
import { useFeedbackStore } from "./feedbackStore";
export const useShoppingStore = defineStore("shoppingStore", { export const useShoppingStore = defineStore("shoppingStore", {
state: () => ({ state: () => ({
events: ref<Array<EventModel>>([ new EventModel() ]), events: ref<Array<EventModel>>([]),
cities: ref<Array<CityModel>>([ new CityModel() ]), cities: ref<Array<CityModel>>([]),
genres: ref<Array<GenreModel>>([ new GenreModel() ]), genres: ref<Array<GenreModel>>([]),
cityFilterName: ref<String>(), cityFilterName: ref<String>(),
genreFilterName: ref<String>() genreFilterName: ref<String>()
}), }),
actions: { actions: {
async getEvents() { async getEvents() {
const feedbackStore = useFeedbackStore()
feedbackStore.fetchDataFromServerInProgress = true
await fetchEvents( await fetchEvents(
this.cityFilterName != null ? this.cityFilterName : "", this.cityFilterName != null ? this.cityFilterName : "",
this.genreFilterName != null ? this.genreFilterName : "" this.genreFilterName != null ? this.genreFilterName : ""
) )
.then(result => { .then(result => {
this.events = result.data this.events = result.data
feedbackStore.fetchDataFromServerInProgress = false
}) })
}, },

View File

@@ -4,9 +4,11 @@ import { createDateRangeString, lowestTicketPrice } from '@/scripts/concertScrip
import filterBar from './filterBar.vue'; import filterBar from './filterBar.vue';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { useShoppingStore } from '@/data/stores/shoppingStore'; import { useShoppingStore } from '@/data/stores/shoppingStore';
import { useFeedbackStore } from '@/data/stores/feedbackStore';
const router = useRouter() const router = useRouter()
const shoppingStore = useShoppingStore() const shoppingStore = useShoppingStore()
const feedbackStore = useFeedbackStore()
shoppingStore.getEvents() shoppingStore.getEvents()
</script> </script>
@@ -23,8 +25,14 @@ shoppingStore.getEvents()
</v-col> </v-col>
</v-row> </v-row>
<v-row v-if="feedbackStore.fetchDataFromServerInProgress">
<v-col class="text-center">
<v-progress-circular indeterminate :size="128" :width="12" color="primary" />
</v-col>
</v-row>
<v-row <v-row
v-if="shoppingStore.events.length > 0" v-else-if="shoppingStore.events.length > 0"
v-for="event of shoppingStore.events" v-for="event of shoppingStore.events"
> >
<v-col> <v-col>