Files
vinlottis/frontend/ui/RequestedWineCard.vue

123 lines
2.5 KiB
Vue

<template>
<Wine :wine="wine">
<template v-slot:top>
<div class="flex justify-end">
<div class="requested-count cursor-pointer" @click="request">
<span>{{ requestedElement.count }}</span>
<i class="icon icon--heart" :class="{ active: locallyRequested }" />
</div>
</div>
</template>
<template v-slot:default>
<button @click="deleteWine(wine)" v-if="showDeleteButton == true" class="vin-button small danger width-100">
Slett vinen
</button>
</template>
<template v-slot:bottom>
<div class="float-left request">
<i class="icon icon--heart request-icon" :class="{ active: locallyRequested }"></i>
<a aria-role="button" tabindex="0" class="link" @click="request" :class="{ active: locallyRequested }">
{{ locallyRequested ? "Anbefalt" : "Anbefal" }}
</a>
</div>
</template>
</Wine>
</template>
<script>
import { deleteRequestedWine, requestNewWine } from "@/api";
import Wine from "@/ui/Wine";
export default {
components: {
Wine
},
data() {
return {
wine: this.requestedElement.wine,
locallyRequested: false
};
},
props: {
requestedElement: {
required: true,
type: Object
},
showDeleteButton: {
required: false,
type: Boolean,
default: false
}
},
methods: {
request() {
if (this.locallyRequested) return;
this.locallyRequested = true;
this.requestedElement.count = this.requestedElement.count + 1;
requestNewWine(this.wine);
},
async deleteWine() {
const wine = this.wine;
if (window.confirm("Er du sikker på at du vil slette vinen?")) {
let response = await deleteRequestedWine(wine);
if (response["success"] == true) {
this.$emit("wineDeleted", wine);
} else {
alert("Klarte ikke slette vinen");
}
}
}
}
};
</script>
<style lang="scss" scoped>
@import "@/styles/variables";
.requested-count {
display: flex;
align-items: center;
margin-top: -0.5rem;
background-color: rgb(244, 244, 244);
border-radius: 1.1rem;
padding: 0.25rem 1rem;
font-size: 1.25em;
span {
padding-right: 0.5rem;
line-height: 1.25em;
}
.icon--heart {
color: grey;
}
}
.active {
&.link {
border-color: $link-color;
}
&.icon--heart {
color: $link-color;
}
}
.request {
display: flex;
align-items: center;
&-icon {
font-size: 1.5rem;
color: grey;
}
a {
margin-left: 0.5rem;
}
}
</style>