103 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
|   <main class="container">
 | |
|     <div class="header">
 | |
|       <h1>Alle foreslåtte viner</h1>
 | |
|       <router-link class="vin-button" to="/anbefal">
 | |
|         Anbefal ny vin
 | |
|         <i class="icon icon--arrow-right"></i>
 | |
|       </router-link>
 | |
|     </div>
 | |
| 
 | |
|     <section class="wines-container">
 | |
|       <p v-if="wines == undefined || wines.length == 0">
 | |
|         Ingen har foreslått noe enda!
 | |
|       </p>
 | |
| 
 | |
|       <RequestedWineCard
 | |
|         v-for="requestedWine in wines"
 | |
|         :key="requestedWine.wine._id"
 | |
|         :requestedElement="requestedWine"
 | |
|         @wineDeleted="filterOutDeletedWine"
 | |
|         :showDeleteButton="isAdmin"
 | |
|       />
 | |
|     </section>
 | |
|   </main>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| import RequestedWineCard from "@/ui/RequestedWineCard";
 | |
| export default {
 | |
|   components: {
 | |
|     RequestedWineCard,
 | |
|   },
 | |
|   data() {
 | |
|     return {
 | |
|       wines: undefined,
 | |
|       isAdmin: false,
 | |
|     };
 | |
|   },
 | |
|   mounted() {
 | |
|     this.fetchRequestedWines();
 | |
|   },
 | |
|   methods: {
 | |
|     filterOutDeletedWine(wine) {
 | |
|       this.wines = this.wines.filter((item) => item.wine._id !== wine._id);
 | |
|     },
 | |
|     fetchRequestedWines() {
 | |
|       return fetch("/api/requests")
 | |
|         .then((resp) => {
 | |
|           this.isAdmin = resp.headers.get("vinlottis-admin") == "true";
 | |
|           return resp;
 | |
|         })
 | |
|         .then((resp) => resp.json())
 | |
|         .then((response) => (this.wines = response.wines));
 | |
|     },
 | |
|   },
 | |
| };
 | |
| </script>
 | |
| 
 | |
| <style lang="scss" scoped>
 | |
| @import "@/styles/media-queries.scss";
 | |
| @import "@/styles/variables.scss";
 | |
| 
 | |
| .container {
 | |
|   width: 90vw;
 | |
|   margin: 3rem auto;
 | |
|   margin-bottom: 0;
 | |
|   padding-bottom: 3rem;
 | |
| }
 | |
| 
 | |
| h1 {
 | |
|   font-size: 3rem;
 | |
|   font-family: "knowit";
 | |
|   color: $matte-text-color;
 | |
|   font-weight: normal;
 | |
| }
 | |
| 
 | |
| .header {
 | |
|   display: flex;
 | |
|   justify-content: space-between;
 | |
| 
 | |
|   @include mobile {
 | |
|     flex-direction: column;
 | |
| 
 | |
|     a {
 | |
|       align-self: flex-end;
 | |
|       margin-bottom: 4rem;
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| a.vin-button {
 | |
|   display: flex;
 | |
|   justify-content: center;
 | |
|   align-items: center;
 | |
|   height: calc(4rem - 20px);
 | |
| }
 | |
| 
 | |
| a .icon {
 | |
|   margin-left: 1rem;
 | |
|   vertical-align: middle;
 | |
| }
 | |
| </style>
 |