ramadanproject/resources/js/components/SelectionSidebar.vue
ahmido 00965eeb7f
Some checks failed
linter / quality (push) Successful in 53s
tests / ci (push) Failing after 5m39s
001-public-grid-viewer — Add QA / Quickstart / Decision docs, scheduler, ignores, formatting & tests (#1)
Kurze Zusammenfassung:

Ergänzt Feature-001-Artefakte: QA-Checkliste, Quickstart, Design-Entscheidung, Scheduler-Dokumentation.
Ergänzt Projekt-ignores: .dockerignore, .eslintignore, .npmignore.
Führte pint aus (Formatierungsfixes).
Fügte/aktualisierte Backend-/Frontend-Skizzen und Tests für den Public Grid Viewer (Reservations, Selection mapping, Payment scaffold, Composite job).
Branch: 001-public-grid-viewer
Wichtige Dateien (Auswahl):

Docs & specs:
qa.md
quickstart.md
001-public-grid-viewer.md
SCHEDULER.md
Config / infra:
pixel_grid.php
.dockerignore, .eslintignore, .npmignore
compose.yaml
Backend (skizzen / implementation):
SchedulerServiceProvider.php
providers.php
ExpireReservations.php
Reservation.php
2026_01_03_000002_create_reservations_table.php
SelectionMapper.php
CompositeImage.php
PaymentController.php
Frontend (scaffold):
Index.vue
GridCanvas.vue
Tests:
PublicGridMetaTest.php
ReserveSelectionTest.php
PriceCalculationTest.php
SelectionMathTest.php
Was ich lokal geprüft habe

pint ausgeführt (Formatierungsfixes angewendet).
Vollständige Test-Suite ausgeführt: 52 passed (164 assertions).
Branch gepusht: cloudarix/001-public-grid-viewer.

Co-authored-by: Ahmed Darrazi <ahmeddarrazi@adsmac.local>
Reviewed-on: #1
2026-01-03 04:16:45 +00:00

40 lines
909 B
Vue

<template>
<aside class="selection-sidebar">
<div class="info">
<div>Cells selected: <strong>{{ cellCount }}</strong></div>
<div>Price / cell: <strong>{{ pricePerCell }}</strong></div>
<div>Total: <strong>{{ total }}</strong></div>
</div>
<button class="btn" @click="$emit('open-upload')">Weiter</button>
</aside>
</template>
<script setup lang="ts">
import { computed } from 'vue';
const props = defineProps({
cellCount: { type: Number, default: 0 },
pricePerCell: { type: Number, default: 0 },
});
const total = computed(() => props.cellCount * props.pricePerCell);
</script>
<style scoped>
.selection-sidebar {
width: 300px;
padding: 1rem;
border-left: 1px solid rgba(0,0,0,0.06);
display: flex;
flex-direction: column;
gap: 1rem;
}
.btn {
background: #2563eb;
color: white;
padding: 0.5rem 1rem;
border: none;
border-radius: 6px;
}
</style>