appends tests tab
This commit is contained in:
@@ -3,6 +3,8 @@ import Button from 'primevue/button'
|
|||||||
import Card from 'primevue/card'
|
import Card from 'primevue/card'
|
||||||
import Chip from 'primevue/chip'
|
import Chip from 'primevue/chip'
|
||||||
import Divider from 'primevue/divider'
|
import Divider from 'primevue/divider'
|
||||||
|
import TabView from 'primevue/tabview'
|
||||||
|
import TabPanel from 'primevue/tabpanel'
|
||||||
import Tag from 'primevue/tag'
|
import Tag from 'primevue/tag'
|
||||||
|
|
||||||
export interface Requirement {
|
export interface Requirement {
|
||||||
@@ -76,79 +78,90 @@ const prioritySeverity = (priority: Requirement['priority']) => {
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template #content>
|
<template #content>
|
||||||
<!-- Status and priority tags -->
|
<TabView>
|
||||||
<div class="detail-badges">
|
<TabPanel value="details" header="Details">
|
||||||
<Tag :value="requirement.status" :severity="statusSeverity(requirement.status)" />
|
<!-- Status and priority tags -->
|
||||||
<Tag :value="requirement.priority" :severity="prioritySeverity(requirement.priority)" rounded />
|
<div class="detail-badges">
|
||||||
</div>
|
<Tag :value="requirement.status" :severity="statusSeverity(requirement.status)" />
|
||||||
|
<Tag :value="requirement.priority" :severity="prioritySeverity(requirement.priority)" rounded />
|
||||||
<!-- Description -->
|
|
||||||
<p class="detail-description">{{ requirement.description }}</p>
|
|
||||||
|
|
||||||
<!-- Blockers section (shown only if blockers exist) -->
|
|
||||||
<article v-if="requirement.blockers.length" class="info-panel info-panel--warning">
|
|
||||||
<h3>Identified blockers</h3>
|
|
||||||
<ul class="blockers-list">
|
|
||||||
<li v-for="blocker in requirement.blockers" :key="blocker">
|
|
||||||
<i class="pi pi-exclamation-triangle" />
|
|
||||||
<span>{{ blocker }}</span>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</article>
|
|
||||||
|
|
||||||
<Divider />
|
|
||||||
|
|
||||||
<!-- Key attributes: Author, Stakeholders, Priority, Flexibility -->
|
|
||||||
<div class="detail-grid">
|
|
||||||
<article class="info-panel">
|
|
||||||
<h3>Author</h3>
|
|
||||||
<p>{{ requirement.owner }}</p>
|
|
||||||
</article>
|
|
||||||
|
|
||||||
<article class="info-panel">
|
|
||||||
<h3>Stakeholders</h3>
|
|
||||||
<div class="chip-row">
|
|
||||||
<Chip v-for="stakeholder in requirement.stakeholders" :key="stakeholder" :label="stakeholder" />
|
|
||||||
</div>
|
</div>
|
||||||
</article>
|
|
||||||
|
|
||||||
<article class="info-panel">
|
<!-- Description -->
|
||||||
<h3>Flexibility</h3>
|
<p class="detail-description">{{ requirement.description }}</p>
|
||||||
<p>{{ requirement.flexibility }}</p>
|
|
||||||
</article>
|
|
||||||
|
|
||||||
<article class="info-panel">
|
<!-- Blockers section (shown only if blockers exist) -->
|
||||||
<h3>Tolerances</h3>
|
<article v-if="requirement.blockers.length" class="info-panel info-panel--warning">
|
||||||
<p>{{ requirement.tolerances }}</p>
|
<h3>Identified blockers</h3>
|
||||||
</article>
|
<ul class="blockers-list">
|
||||||
</div>
|
<li v-for="blocker in requirement.blockers" :key="blocker">
|
||||||
|
<i class="pi pi-exclamation-triangle" />
|
||||||
|
<span>{{ blocker }}</span>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</article>
|
||||||
|
|
||||||
<Divider />
|
<Divider />
|
||||||
|
|
||||||
<!-- Acceptance criteria and impacted modules -->
|
<!-- Key attributes: Author, Stakeholders, Priority, Flexibility -->
|
||||||
<div class="detail-columns">
|
<div class="detail-grid">
|
||||||
<article class="info-panel">
|
<article class="info-panel">
|
||||||
<h3>Acceptance criteria</h3>
|
<h3>Author</h3>
|
||||||
<ul class="checklist">
|
<p>{{ requirement.owner }}</p>
|
||||||
<li v-for="item in requirement.acceptanceCriteria" :key="item">
|
</article>
|
||||||
<i class="pi pi-check-circle" />
|
|
||||||
<span>{{ item }}</span>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</article>
|
|
||||||
|
|
||||||
<article class="info-panel">
|
<article class="info-panel">
|
||||||
<h3>Impacted modules</h3>
|
<h3>Stakeholders</h3>
|
||||||
<div class="chip-row">
|
<div class="chip-row">
|
||||||
<Chip v-for="module in requirement.impactedModules" :key="module" :label="module" />
|
<Chip v-for="stakeholder in requirement.stakeholders" :key="stakeholder" :label="stakeholder" />
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
<article class="info-panel">
|
||||||
|
<h3>Flexibility</h3>
|
||||||
|
<p>{{ requirement.flexibility }}</p>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
<article class="info-panel">
|
||||||
|
<h3>Tolerances</h3>
|
||||||
|
<p>{{ requirement.tolerances }}</p>
|
||||||
|
</article>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<Divider />
|
<Divider />
|
||||||
|
|
||||||
<h3>Remarks</h3>
|
<!-- Acceptance criteria and impacted modules -->
|
||||||
<p>{{ requirement.notes }}</p>
|
<div class="detail-columns">
|
||||||
</article>
|
<article class="info-panel">
|
||||||
</div>
|
<h3>Acceptance criteria</h3>
|
||||||
|
<ul class="checklist">
|
||||||
|
<li v-for="item in requirement.acceptanceCriteria" :key="item">
|
||||||
|
<i class="pi pi-check-circle" />
|
||||||
|
<span>{{ item }}</span>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
<article class="info-panel">
|
||||||
|
<h3>Impacted modules</h3>
|
||||||
|
<div class="chip-row">
|
||||||
|
<Chip v-for="module in requirement.impactedModules" :key="module" :label="module" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Divider />
|
||||||
|
|
||||||
|
<h3>Remarks</h3>
|
||||||
|
<p>{{ requirement.notes }}</p>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</TabPanel>
|
||||||
|
|
||||||
|
<TabPanel value="tests" header="Tests to perform">
|
||||||
|
<div class="tests-placeholder">
|
||||||
|
<i class="pi pi-inbox" />
|
||||||
|
<p>No tests defined yet</p>
|
||||||
|
</div>
|
||||||
|
</TabPanel>
|
||||||
|
</TabView>
|
||||||
</template>
|
</template>
|
||||||
</Card>
|
</Card>
|
||||||
</section>
|
</section>
|
||||||
@@ -316,6 +329,25 @@ const prioritySeverity = (priority: Requirement['priority']) => {
|
|||||||
margin-top: 0.75rem;
|
margin-top: 0.75rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.tests-placeholder {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 0.75rem;
|
||||||
|
padding: 2rem 1rem;
|
||||||
|
color: #9ca3af;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tests-placeholder i {
|
||||||
|
font-size: 2.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.p-tabview-panels) {
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
@media (max-width: 1120px) {
|
@media (max-width: 1120px) {
|
||||||
.detail-grid,
|
.detail-grid,
|
||||||
.detail-columns {
|
.detail-columns {
|
||||||
|
|||||||
Reference in New Issue
Block a user