Files
chore/frontend/src/components/child/PendingRewardDialog.vue
T
ryan 8308d205e8
Chore App Build, Test, and Push Docker Images / build-and-push (push) Successful in 2m31s
feat: update reward version to 1.0.13 and modify dialog button labels for clarity
2026-05-01 23:32:17 -04:00

102 lines
2.1 KiB
Vue

<template>
<ModalDialog @backdrop-click="$emit('cancel')">
<div class="approve-dialog">
<img v-if="imageUrl" :src="imageUrl" alt="Reward" class="reward-image" />
<p v-if="rewardName" class="item-label">{{ rewardName }}</p>
<p v-if="subtitle" class="subtitle">{{ subtitle }}</p>
<p v-if="rewardName && childName" class="message">
Redeem this reward for <strong>{{ childName }}</strong
>?
</p>
<p class="message">{{ message }}</p>
<div class="actions">
<button @click="$emit('confirm')" class="btn btn-primary">Approve</button>
<button @click="$emit('cancel')" class="btn btn-secondary">Reject</button>
</div>
</div>
</ModalDialog>
</template>
<script setup lang="ts">
import ModalDialog from '../shared/ModalDialog.vue'
withDefaults(
defineProps<{
message?: string
rewardName?: string
childName?: string
imageUrl?: string | null
subtitle?: string
}>(),
{
message: 'A reward is currently pending. It will be cancelled. Would you like to proceed?',
rewardName: undefined,
childName: undefined,
imageUrl: null,
subtitle: undefined,
},
)
defineEmits<{
confirm: []
cancel: []
}>()
</script>
<style scoped>
.approve-dialog {
text-align: center;
padding: 0.5rem;
}
.reward-image {
width: 72px;
height: 72px;
object-fit: cover;
border-radius: 8px;
background: var(--info-image-bg);
margin-bottom: 0.75rem;
}
.item-label {
font-size: 1.2rem;
font-weight: 700;
color: var(--dialog-child-name);
margin-bottom: 0.15rem;
}
.subtitle {
font-size: 1rem;
font-weight: 600;
color: var(--dialog-child-name);
margin-bottom: 1rem;
}
.message {
font-size: 1rem;
color: var(--dialog-message);
margin-bottom: 0.15rem;
}
.message:last-of-type {
margin-bottom: 1.5rem;
}
.actions {
display: flex;
gap: 1.5rem;
justify-content: center;
}
.actions button {
padding: 0.7rem 1.8rem;
border-radius: 10px;
border: 0;
cursor: pointer;
font-weight: 700;
font-size: 1.05rem;
transition: background 0.18s;
min-width: 100px;
}
</style>