Skip to content

Commit e823323

Browse files
Extract wizard shared components
1 parent cab83b2 commit e823323

3 files changed

Lines changed: 51 additions & 34 deletions

File tree

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<script setup lang="ts">
2+
defineProps<{
3+
services: string[];
4+
images: string[];
5+
ports: string[];
6+
empty?: boolean;
7+
}>();
8+
</script>
9+
<template>
10+
<aside class="source-summary">
11+
<h3>Resumo detectado</h3>
12+
<p v-if="empty" class="muted">
13+
Valide o Compose para visualizar os serviços detectados.
14+
</p>
15+
<template v-else>
16+
<p>
17+
<span>Serviços</span><strong>{{ services.length }}</strong>
18+
</p>
19+
<p>
20+
<span>Imagens</span><strong>{{ images.length }}</strong>
21+
</p>
22+
<p>
23+
<span>Portas</span><strong>{{ ports.length }}</strong>
24+
</p>
25+
</template>
26+
</aside>
27+
</template>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<script setup lang="ts">
2+
defineProps<{ step: number }>();
3+
const labels = ["Identificação", "Origem", "Configuração", "Revisão"];
4+
</script>
5+
<template>
6+
<nav class="wizard-stepper" aria-label="Progresso da criação">
7+
<span
8+
v-for="(label, index) in labels"
9+
:key="label"
10+
:class="{ active: step === index + 1, done: step > index + 1 }"
11+
:aria-current="step === index + 1 ? 'step' : undefined"
12+
>{{ index + 1 }}. {{ label }}</span
13+
>
14+
</nav>
15+
</template>

‎web/src/views/ProjectDetail.vue‎

Lines changed: 9 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import { computed, onMounted, ref } from "vue";
33
import { RouterLink, useRoute, useRouter } from "vue-router";
44
import BaseModal from "../components/ui/BaseModal.vue";
55
import ComposeCodeEditor from "../components/applications/ComposeCodeEditor.vue";
6+
import SourceSummary from "../components/applications/SourceSummary.vue";
7+
import WizardStepper from "../components/applications/WizardStepper.vue";
68
import { api, RequestError } from "../composables/useApi";
79
import { useToast } from "../composables/useToast";
810
import type { Application, Project } from "../types";
@@ -444,20 +446,7 @@ onMounted(load);
444446
@close="closeWizard"
445447
>
446448
<form v-if="!editApp.id" id="new-app-form" @submit.prevent="submitCreate">
447-
<nav class="wizard-stepper" aria-label="Progresso da criação">
448-
<span
449-
v-for="(label, index) in [
450-
'Identificação',
451-
'Origem',
452-
'Configuração',
453-
'Revisão',
454-
]"
455-
:key="label"
456-
:class="{ active: appStep === index + 1, done: appStep > index + 1 }"
457-
:aria-current="appStep === index + 1 ? 'step' : undefined"
458-
>{{ index + 1 }}. {{ label }}</span
459-
>
460-
</nav>
449+
<WizardStepper :step="appStep" />
461450
<p class="kicker">ETAPA {{ appStep }} DE 4</p>
462451
<div v-if="appStep === 1">
463452
<h2>Identifique a aplicação</h2>
@@ -526,26 +515,12 @@ onMounted(load);
526515
v-model="newSource.compose_yaml"
527516
@error="toast.error"
528517
/>
529-
<aside class="source-summary">
530-
<h3>Resumo detectado</h3>
531-
<p v-if="!newSource.compose_yaml" class="muted">
532-
Valide o Compose para visualizar os serviços detectados.
533-
</p>
534-
<template v-else>
535-
<p>
536-
<span>Serviços</span
537-
><strong>{{ composeSummary.services.length }}</strong>
538-
</p>
539-
<p>
540-
<span>Imagens</span
541-
><strong>{{ composeSummary.images.length }}</strong>
542-
</p>
543-
<p>
544-
<span>Portas</span
545-
><strong>{{ composeSummary.ports.length }}</strong>
546-
</p>
547-
</template>
548-
</aside>
518+
<SourceSummary
519+
:services="composeSummary.services"
520+
:images="composeSummary.images"
521+
:ports="composeSummary.ports"
522+
:empty="!newSource.compose_yaml"
523+
/>
549524
</div>
550525
<small v-if="fieldErrors.source" class="error-field">{{
551526
fieldErrors.source

0 commit comments

Comments
 (0)