From 85222b7d8f8a3d695c55724f77f7d46c7aded22e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valdemar=20=C3=85storp=20Beere?= <valdemb@stud.ntnu.no> Date: Mon, 29 Apr 2024 13:00:57 +0200 Subject: [PATCH] feat(component): Created DisplayInfoForChallengeOrGoal.vue --- .../DisplayInfoForChallengeOrGoal.vue | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/components/DisplayInfoForChallengeOrGoal.vue diff --git a/src/components/DisplayInfoForChallengeOrGoal.vue b/src/components/DisplayInfoForChallengeOrGoal.vue new file mode 100644 index 0000000..5693121 --- /dev/null +++ b/src/components/DisplayInfoForChallengeOrGoal.vue @@ -0,0 +1,53 @@ +<template> + <button @click="display" class="bg-transparent relative p-0 hover:bg-transparent"> + <img src="@/assets/infoIcon.png" alt="i" class="max-h-4 max-w-4 ml-1" /> + </button> + <div v-if="displayInfoCard" class="w-[40vh] h-[20vh]md:w-60 md:h-40 group z-50 bg-opacity-50 overflow-hidden absolute mt-8 md:mt-4 md:mr-0 flex flex-col justify-evenly text-wrap"> + <div class="flex flex-col justify-around w-3/4 md:w-full h-[80%] py-2 px-4 md:py-0 bg-white rounded-2xl border-4 border-green-300 overflow-auto"> + <p class="text-base md:text-lg text-wrap text-bold">{{ title.toUpperCase() }}</p> + <p class="text-xs md:text-sm text-wrap mb-2">Beskrivelse: {{ description }}</p> + <p v-if="completion!==100" class="text-xs md:text-sm text-nowrap text-green-800">Utløper om:</p> + <Countdown v-if="completion!==100 && screenSize > 763" class="flex flex-row" countdownSize="1.3rem" labelSize=".8rem" mainColor="white" secondFlipColor="white" mainFlipBackgroundColor="#30ab0e" secondFlipBackgroundColor='#9af781' :labels="{ days: 'dager', hours: 'timer', minutes: 'min', seconds: 'sek', }" :deadlineISO="deadline"></Countdown> + <Countdown v-else-if="completion!==100 && screenSize <= 763" class="flex flex-row" countdownSize="1.0rem" labelSize=".6rem" mainColor="white" secondFlipColor="white" mainFlipBackgroundColor="#30ab0e" secondFlipBackgroundColor='#9af781' :labels="{ days: 'dager', hours: 'timer', minutes: 'min', seconds: 'sek', }" :deadlineISO="deadline"></Countdown> + <p class="text-nowrap text-xs md:text.sm" v-else>Utfordring fullført.<br/> Totalt spart: {{amountSaved}}kr</p> + </div> + </div> +</template> + +<script setup lang="ts"> +import type {Challenge} from "@/types/challenge"; +import type {Goal} from "@/types/goal"; +import {onUnmounted, ref} from "vue"; +import {Countdown} from 'vue3-flip-countdown' + +interface Props { + challenge: Challenge | null | undefined + goal: Goal | null | undefined + isChallenge: boolean +} +const props = defineProps<Props>() + +const description = ref<string>(props.isChallenge ? props.challenge!.description : props.goal!.description) +const title = ref<string>(props.isChallenge ? props.challenge!.title : props.goal!.title) +const amountSaved = ref<number>(props.isChallenge ? props.challenge!.saved : props.goal!.saved) +const completion = ref<number>(props.isChallenge ? (props.challenge?.completion ?? 0) : (props.goal?.completion ?? 0)); +const deadline = ref<string>(props.isChallenge ? props.challenge!.due : props.goal!.due) + +const displayInfoCard = ref(false) + + +const display =() => { + displayInfoCard.value = !displayInfoCard.value +} + +const screenSize = ref<number>(window.innerWidth) + +onUnmounted(() => { + window.removeEventListener("resize", handleWindowSizeChange); +}); +const handleWindowSizeChange = () => { + screenSize.value = window.innerWidth; +}; + + +</script> -- GitLab