Chore App Build, Test, and Push Docker Images / build-and-push (push) Successful in 2m31s
102 lines
2.1 KiB
Vue
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>
|