feat(backend): UsingQueryResult analoog aan UsingBackendResource aangemaakt
This commit is contained in:
		
							parent
							
								
									72bbfbf9f0
								
							
						
					
					
						commit
						61fd28e743
					
				
					 1 changed files with 41 additions and 0 deletions
				
			
		
							
								
								
									
										41
									
								
								frontend/src/components/UsingQueryResult.vue
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								frontend/src/components/UsingQueryResult.vue
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,41 @@ | ||||||
|  | <script setup lang="ts" generic="T"> | ||||||
|  |     import {RemoteResource} from "@/services/api-client/remote-resource.ts"; | ||||||
|  |     import {computed, type MaybeRefOrGetter} from "vue"; | ||||||
|  |     import {useI18n} from "vue-i18n"; | ||||||
|  |     import type {UseQueryReturnType} from "@tanstack/vue-query"; | ||||||
|  | 
 | ||||||
|  |     const props = defineProps<{ | ||||||
|  |         queryResult: UseQueryReturnType<T, Error> | ||||||
|  |     }>() | ||||||
|  | 
 | ||||||
|  |     const { t } = useI18n(); | ||||||
|  | 
 | ||||||
|  |     const isLoading = computed(() => props.queryResult.isFetching); | ||||||
|  |     const data = computed(() => props.queryResult.data); | ||||||
|  |     const error = computed(() => props.queryResult.error); | ||||||
|  |     const errorMessage = computed(() => { | ||||||
|  |         let errorWithMessage = (error.value as {message: string}) || null; | ||||||
|  |         return errorWithMessage?.message || JSON.stringify(errorWithMessage) | ||||||
|  |     }); | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <template> | ||||||
|  |     <div class="loading-div" v-if="isLoading"> | ||||||
|  |         <v-progress-circular indeterminate></v-progress-circular> | ||||||
|  |     </div> | ||||||
|  |     <div v-if="error"> | ||||||
|  |         <v-empty-state | ||||||
|  |             icon="mdi-alert-circle-outline" | ||||||
|  |             :text="errorMessage" | ||||||
|  |             :title="t('error_title')" | ||||||
|  |         ></v-empty-state> | ||||||
|  |     </div> | ||||||
|  |     <slot v-if="data" :data="data!"></slot> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <style scoped> | ||||||
|  |   .loading-div { | ||||||
|  |       padding: 20px; | ||||||
|  |       text-align: center; | ||||||
|  |   } | ||||||
|  | </style> | ||||||
		Reference in a new issue
	
	 Gerald Schmittinger
						Gerald Schmittinger