fix issue with late update of data

Signed-off-by: Benny Samir Hierl <bennysamir@posteo.de>
This commit is contained in:
Benny Samir Hierl 2022-02-19 21:39:40 +01:00
parent 14ee6b49b9
commit a87aa71ec5
3 changed files with 59 additions and 59 deletions

View file

@ -11,7 +11,19 @@
<IconError class="h-4 w-4 fill-red-500" /> <IconError class="h-4 w-4 fill-red-500" />
<span>{{ t('errors.generic.text') }}</span> <span>{{ t('errors.generic.text') }}</span>
</div> </div>
<component v-else :is="Component"></component> <suspense v-else>
<template #default>
<component :is="Component"></component>
</template>
<template #fallback>
<div
class="m-20 flex flex-row content-center items-center justify-center space-x-2"
>
<IconSpinner class="h-4 w-4" />
<span> {{ t('common.loading.text') }} </span>
</div>
</template>
</suspense>
</template> </template>
</router-view> </router-view>
</main> </main>
@ -19,7 +31,6 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { useTitle } from '@vueuse/core'
import { onErrorCaptured, ref } from 'vue' import { onErrorCaptured, ref } from 'vue'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
const { t } = useI18n() const { t } = useI18n()
@ -29,8 +40,6 @@ const error = ref()
onErrorCaptured((e: unknown) => { onErrorCaptured((e: unknown) => {
console.error(e) console.error(e)
error.value = e error.value = e
useTitle(t('errors.generic.text'))
return false return false
}) })
</script> </script>

View file

@ -25,7 +25,7 @@ const {
itemDelete, itemDelete,
filteredItems, filteredItems,
} = useWishlistStore() } = useWishlistStore()
fetch(route.params.slug as string) await fetch(route.params.slug as string)
const title = computed(() => { const title = computed(() => {
return state.value?.title return state.value?.title
@ -112,67 +112,58 @@ const handleDeleteItem = async (item: WishlistItemType): Promise<void> => {
</script> </script>
<template> <template>
<div class="h-full"> <div v-if="isFinished" class="h-full">
<div <div
v-if="!isFinished" class="flex flex-col items-center space-x-0 space-y-2 md:flex-row md:space-x-6 md:space-y-0"
class="m-20 flex flex-row content-center items-center justify-center space-x-2"
> >
<IconSpinner class="h-4 w-4" /> <ImageTile :image-src="state.imageSrc" class="shrink-0"></ImageTile>
<span> {{ t('common.loading.text') }} </span> <div v-if="!editModeIsActive">
<h1 class="mb-2 text-center text-2xl font-bold md:text-left">
{{ state.title }}
</h1>
<p class="text-lg">
{{ state.description }}
</p>
</div>
<FormWishlist
v-else
:wishlist="state"
@update="handleUpdateWishlist"
@delete="handleDelete"
/>
</div> </div>
<div v-else-if="state !== undefined" class="h-full">
<div
v-if="!editModeIsActive && filteredItems.length === 0"
class="flex h-1/2 w-full justify-center"
>
<div <div
class="flex flex-col items-center space-x-0 space-y-2 md:flex-row md:space-x-6 md:space-y-0" class="flex flex-col flex-wrap items-center justify-center text-center text-xl text-gray-600/75 dark:text-white/70 sm:flex-row sm:space-x-2 sm:text-left"
> >
<ImageTile :image-src="state.imageSrc" class="shrink-0"></ImageTile> <IconNoGift class="h-10 w-10 fill-gray-600/75 dark:fill-white/70" />
<div v-if="!editModeIsActive"> <span>{{ t('pages.detail-view.main.empty-list.text') }}</span>
<h1 class="mb-2 text-center text-2xl font-bold md:text-left"> </div>
{{ state.title }} </div>
</h1>
<p class="text-lg"> <div v-else class="flex flex-col space-y-14 py-10 md:space-y-8">
{{ state.description }} <FormWishlistItem
</p> v-if="editModeIsActive"
</div> mode="create"
<FormWishlist @create="handleCreateItem"
v-else />
:wishlist="state" <div v-for="item in filteredItems" :key="item.id">
@update="handleUpdateWishlist" <WishlistItem
@delete="handleDelete" v-if="!editModeIsActive"
:item="item"
@bought="handleBought(item)"
/> />
</div>
<div
v-if="!editModeIsActive && filteredItems.length === 0"
class="flex h-1/2 w-full justify-center"
>
<div
class="flex flex-col flex-wrap items-center justify-center text-center text-xl text-gray-600/75 dark:text-white/70 sm:flex-row sm:space-x-2 sm:text-left"
>
<IconNoGift class="h-10 w-10 fill-gray-600/75 dark:fill-white/70" />
<span>{{ t('pages.detail-view.main.empty-list.text') }}</span>
</div>
</div>
<div v-else class="flex flex-col space-y-14 py-10 md:space-y-8">
<FormWishlistItem <FormWishlistItem
v-if="editModeIsActive" v-else
mode="create" :item="item"
@create="handleCreateItem" mode="update"
@update="(updateValues) => handleUpdateItem(item, updateValues)"
@delete="handleDeleteItem(item)"
/> />
<div v-for="item in filteredItems" :key="item.id">
<WishlistItem
v-if="!editModeIsActive"
:item="item"
@bought="handleBought(item)"
/>
<FormWishlistItem
v-else
:item="item"
mode="update"
@update="(updateValues) => handleUpdateItem(item, updateValues)"
@delete="handleDeleteItem(item)"
/>
</div>
</div> </div>
</div> </div>
</div> </div>

View file

@ -5,7 +5,7 @@ import { useWishlistsStore, useEditMode } from '@/composables'
const { t } = useI18n() const { t } = useI18n()
const { isActive: editModeIsActive } = useEditMode() const { isActive: editModeIsActive } = useEditMode()
const { state, isFinished, fetch } = useWishlistsStore() const { state, isFinished, fetch } = useWishlistsStore()
fetch() await fetch()
</script> </script>
<template> <template>