Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 22 additions & 3 deletions openapi-osidb.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12745,11 +12745,11 @@ components:
relevant:
type: boolean
type:
type: string
readOnly: true
allOf:
- $ref: '#/components/schemas/FlawLabelType'
default: context_based
required:
- label
- type
- uuid
FlawCollaboratorPostRequest:
type: object
Expand All @@ -12764,8 +12764,17 @@ components:
contributor:
type: string
maxLength: 255
type:
allOf:
- $ref: '#/components/schemas/FlawCollaboratorPostTypeEnum'
default: context_based
required:
- label
FlawCollaboratorPostTypeEnum:
enum:
- alias
- context_based
type: string
FlawCollaboratorRequest:
type: object
description: FlawCollaborator serializer
Expand All @@ -12785,6 +12794,10 @@ components:
maxLength: 255
relevant:
type: boolean
type:
allOf:
- $ref: '#/components/schemas/FlawLabelType'
default: context_based
required:
- flaw
- label
Expand Down Expand Up @@ -12870,6 +12883,12 @@ components:
required:
- name
- type
FlawLabelType:
enum:
- alias
- context_based
- product_family
type: string
FlawPackageVersion:
type: object
description: Package model serializer
Expand Down
46 changes: 41 additions & 5 deletions src/components/FlawLabels/FlawLabelTableEditingRow.vue
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
<script setup lang="ts">
import { computed } from 'vue';

import { StateEnum } from '@/generated-client';
import type { ZodFlawType } from '@/types';
import { FlawLabelTypeEnum } from '@/types/zodFlaw';
Expand All @@ -19,13 +21,20 @@ const emit = defineEmits<{
const [labelState, hasStateChanged] = watchedRef<StateEnum>(initalLabel?.state ?? StateEnum.New);
const [labelName, hasNameChanged] = watchedRef(initalLabel?.label ?? '');
const [labelContributor, hasContributorChanged] = watchedRef(initalLabel?.contributor ?? '');
const [labelType, hasTypeChanged] = watchedRef<FlawLabelTypeEnum>(
initalLabel?.type ?? FlawLabelTypeEnum.CONTEXT_BASED,
);

const isNewLabel = computed(() => !initalLabel);
const isAliasType = computed(() => labelType.value === FlawLabelTypeEnum.ALIAS);

const emitSave = () => {
// if nothing changed, do not emit save
if (
!hasStateChanged.value
&& !hasNameChanged.value
&& !hasContributorChanged.value
&& !hasTypeChanged.value
) {
return emit('cancel');
}
Expand All @@ -41,7 +50,7 @@ const emitSave = () => {
label: labelName.value,
contributor: labelContributor.value,
relevant: initalLabel?.relevant ?? true,
type: initalLabel?.type ?? FlawLabelTypeEnum.CONTEXT_BASED,
type: labelType.value,
});
};
</script>
Expand All @@ -56,13 +65,43 @@ const emitSave = () => {
>{{ state }}</option>
</select>
</td>
<td>
<!-- Type is only editable for new labels -->
<select
v-if="isNewLabel"
v-model="labelType"
class="form-select"
title="Label type"
>
<option :value="FlawLabelTypeEnum.CONTEXT_BASED">context_based</option>
<option :value="FlawLabelTypeEnum.ALIAS">alias</option>
</select>
<template v-else>
{{ initalLabel?.type }}
</template>
</td>
<td
:class="{
'fw-bold': labelState === 'REQ',
'text-decoration-line-through': !initalLabel?.relevant,
}"
>
<template v-if="initalLabel?.type !== FlawLabelTypeEnum.PRODUCT_FAMILY">
<!-- Product family labels are read-only -->
<template v-if="initalLabel?.type === FlawLabelTypeEnum.PRODUCT_FAMILY">
{{ initalLabel?.label }}
</template>
<!-- Alias labels use free text input -->
<template v-else-if="isAliasType">
<input
v-model="labelName"
type="text"
class="form-control"
placeholder="Enter alias name"
required
>
</template>
<!-- Context-based labels use dropdown -->
<template v-else>
<select
v-model="labelName"
class="form-select"
Expand All @@ -75,9 +114,6 @@ const emitSave = () => {
>{{ label }}</option>
</select>
</template>
<template v-else>
{{ initalLabel?.label }}
</template>
</td>
<td>
<FlawLabelsContributor v-model="labelContributor" />
Expand Down
11 changes: 5 additions & 6 deletions src/components/FlawLabels/FlawLabelsTable.vue
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,11 @@ function handleUndoDelete(label: ZodFlawLabelType) {
<template #label>
<span class="section-label">Contributors</span>
</template>
<div v-if="!(Object.keys(labels).length || availableLabels.length)">
<p>No available labels</p>
</div>
<table v-else class="table table-striped table-hover">
<table class="table table-striped table-hover">
<thead class="table-dark">
<tr>
<th>State</th>
<th>Type</th>
<th>Label</th>
<th>Contributor</th>
<th class="table-actions-header">Actions</th>
Expand Down Expand Up @@ -102,6 +100,7 @@ function handleUndoDelete(label: ZodFlawLabelType) {
'fw-bold': label.state === 'REQ',
}"
>{{ label.state }}</td>
<td>{{ label.type }}</td>
<td
:class="{
'fw-bold': label.state === 'REQ',
Expand Down Expand Up @@ -131,7 +130,7 @@ function handleUndoDelete(label: ZodFlawLabelType) {
<i class="bi bi-arrow-counterclockwise" />
</button>
<button
v-if="label.type === FlawLabelTypeEnum.CONTEXT_BASED && !isDeletedLabel(label)"
v-if="label.type !== FlawLabelTypeEnum.PRODUCT_FAMILY && !isDeletedLabel(label)"
type="button"
title="Delete label"
class="btn btn-sm btn-dark"
Expand All @@ -150,7 +149,7 @@ function handleUndoDelete(label: ZodFlawLabelType) {
@cancel="isCreatingLabel = false"
/>
</tr>
<tr v-if="!isCreatingLabel && availableLabels.length" class="table-new-row">
<tr v-if="!isCreatingLabel" class="table-new-row">
<td
colspan="100%"
class="text-center"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ describe('flawLabelsTableEditingRow', () => {
},
});

await wrapper.findAll('select')[1].setValue('test');
// Select index: 0 = State, 1 = Type, 2 = Label
await wrapper.findAll('select')[2].setValue('test');
await wrapper.find('button[title="Save"]').trigger('click');

expect(wrapper.emitted()).toHaveProperty('save');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ exports[`flawLabelsTable > should handle add label 1`] = `
<thead data-v-5d530569="" class="table-dark">
<tr data-v-5d530569="">
<th data-v-5d530569="">State</th>
<th data-v-5d530569="">Type</th>
<th data-v-5d530569="">Label</th>
<th data-v-5d530569="">Contributor</th>
<th data-v-5d530569="" class="table-actions-header">Actions</th>
Expand All @@ -16,6 +17,7 @@ exports[`flawLabelsTable > should handle add label 1`] = `
<tbody data-v-5d530569="">
<tr data-v-5d530569="" class="">
<td data-v-5d530569="" class="">NEW</td>
<td data-v-5d530569="">context_based</td>
<td data-v-5d530569="" class="text-decoration-line-through" title="Associated affect was removed">test</td>
<td data-v-5d530569="">skynet</td>
<td data-v-5d530569="">
Expand All @@ -26,6 +28,7 @@ exports[`flawLabelsTable > should handle add label 1`] = `
</tr>
<tr data-v-5d530569="" class="new">
<td data-v-5d530569="" class="">NEW</td>
<td data-v-5d530569="">context_based</td>
<td data-v-5d530569="" class="text-decoration-line-through" title="Associated affect was removed">test1</td>
<td data-v-5d530569="">skynet</td>
<td data-v-5d530569="">
Expand All @@ -35,7 +38,9 @@ exports[`flawLabelsTable > should handle add label 1`] = `
</td>
</tr>
<!--v-if-->
<!--v-if-->
<tr data-v-5d530569="" class="table-new-row">
<td data-v-5d530569="" colspan="100%" class="text-center" title="Add new label"><i data-v-5d530569="" class="bi bi-plus"></i></td>
</tr>
</tbody>
</table>
</div>
Expand All @@ -51,6 +56,7 @@ exports[`flawLabelsTable > should handle delete label 1`] = `
<thead data-v-5d530569="" class="table-dark">
<tr data-v-5d530569="">
<th data-v-5d530569="">State</th>
<th data-v-5d530569="">Type</th>
<th data-v-5d530569="">Label</th>
<th data-v-5d530569="">Contributor</th>
<th data-v-5d530569="" class="table-actions-header">Actions</th>
Expand All @@ -59,6 +65,7 @@ exports[`flawLabelsTable > should handle delete label 1`] = `
<tbody data-v-5d530569="">
<tr data-v-5d530569="" class="deleted">
<td data-v-5d530569="" class="">NEW</td>
<td data-v-5d530569="">context_based</td>
<td data-v-5d530569="" class="text-decoration-line-through" title="Associated affect was removed">test</td>
<td data-v-5d530569="">skynet</td>
<td data-v-5d530569="">
Expand Down Expand Up @@ -87,6 +94,7 @@ exports[`flawLabelsTable > should handle edit label 1`] = `
<thead data-v-5d530569="" class="table-dark">
<tr data-v-5d530569="">
<th data-v-5d530569="">State</th>
<th data-v-5d530569="">Type</th>
<th data-v-5d530569="">Label</th>
<th data-v-5d530569="">Contributor</th>
<th data-v-5d530569="" class="table-actions-header">Actions</th>
Expand All @@ -95,6 +103,7 @@ exports[`flawLabelsTable > should handle edit label 1`] = `
<tbody data-v-5d530569="">
<tr data-v-5d530569="" class="">
<td data-v-5d530569="" class="">NEW</td>
<td data-v-5d530569="">context_based</td>
<td data-v-5d530569="" class="text-decoration-line-through" title="Associated affect was removed">test</td>
<td data-v-5d530569="">skynet</td>
<td data-v-5d530569="">
Expand All @@ -105,6 +114,7 @@ exports[`flawLabelsTable > should handle edit label 1`] = `
</tr>
<tr data-v-5d530569="" class="updated">
<td data-v-5d530569="" class="">NEW</td>
<td data-v-5d530569="">context_based</td>
<td data-v-5d530569="" class="text-decoration-line-through" title="Associated affect was removed">test1</td>
<td data-v-5d530569="">skynet</td>
<td data-v-5d530569="">
Expand All @@ -114,7 +124,9 @@ exports[`flawLabelsTable > should handle edit label 1`] = `
</td>
</tr>
<!--v-if-->
<!--v-if-->
<tr data-v-5d530569="" class="table-new-row">
<td data-v-5d530569="" colspan="100%" class="text-center" title="Add new label"><i data-v-5d530569="" class="bi bi-plus"></i></td>
</tr>
</tbody>
</table>
</div>
Expand All @@ -130,6 +142,7 @@ exports[`flawLabelsTable > should handle undo delete label 1`] = `
<thead data-v-5d530569="" class="table-dark">
<tr data-v-5d530569="">
<th data-v-5d530569="">State</th>
<th data-v-5d530569="">Type</th>
<th data-v-5d530569="">Label</th>
<th data-v-5d530569="">Contributor</th>
<th data-v-5d530569="" class="table-actions-header">Actions</th>
Expand All @@ -138,6 +151,7 @@ exports[`flawLabelsTable > should handle undo delete label 1`] = `
<tbody data-v-5d530569="">
<tr data-v-5d530569="" class="">
<td data-v-5d530569="" class="">NEW</td>
<td data-v-5d530569="">context_based</td>
<td data-v-5d530569="" class="text-decoration-line-through" title="Associated affect was removed">test</td>
<td data-v-5d530569="">skynet</td>
<td data-v-5d530569="">
Expand Down Expand Up @@ -165,6 +179,7 @@ exports[`flawLabelsTable > should render flaw labels table 1`] = `
<thead data-v-5d530569="" class="table-dark">
<tr data-v-5d530569="">
<th data-v-5d530569="">State</th>
<th data-v-5d530569="">Type</th>
<th data-v-5d530569="">Label</th>
<th data-v-5d530569="">Contributor</th>
<th data-v-5d530569="" class="table-actions-header">Actions</th>
Expand All @@ -173,6 +188,7 @@ exports[`flawLabelsTable > should render flaw labels table 1`] = `
<tbody data-v-5d530569="">
<tr data-v-5d530569="" class="">
<td data-v-5d530569="" class="">NEW</td>
<td data-v-5d530569="">context_based</td>
<td data-v-5d530569="" class="text-decoration-line-through" title="Associated affect was removed">test</td>
<td data-v-5d530569="">skynet</td>
<td data-v-5d530569="">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,16 @@ exports[`flawLabelsTableEditingRow > should render 1`] = `
<option data-v-627548cb="" value="SKIP">SKIP</option>
<option data-v-627548cb="" value="DONE">DONE</option>
</select></td>
<td data-v-627548cb="" class="text-decoration-line-through"><select data-v-627548cb="" class="form-select" required=""></select></td>
<td data-v-627548cb="">
<!-- Type is only editable for new labels --><select data-v-627548cb="" class="form-select" title="Label type">
<option data-v-627548cb="" value="context_based">context_based</option>
<option data-v-627548cb="" value="alias">alias</option>
</select>
</td>
<td data-v-627548cb="" class="text-decoration-line-through">
<!-- Product family labels are read-only -->
<!-- Context-based labels use dropdown --><select data-v-627548cb="" class="form-select" required=""></select>
</td>
<td data-v-627548cb="">
<flaw-labels-contributor-stub data-v-627548cb="" modelvalue=""></flaw-labels-contributor-stub>
</td>
Expand Down
20 changes: 17 additions & 3 deletions src/components/__tests__/__snapshots__/FlawForm.spec.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -581,9 +581,23 @@ exports[`flawForm > mounts and renders 1`] = `
<div data-v-4715e8e2="" data-v-5d530569="" data-v-76e7a15d="" class="osim-collapsible-label"><button data-v-4715e8e2="" type="button" class="me-2 osim-collapsible-toggle"><i data-v-4715e8e2="" class="bi me-1 bi-plus-square-dotted"></i><span data-v-5d530569="" class="section-label">Contributors</span></button>
<div data-v-4715e8e2="" class="ps-3 border-start">
<div data-v-4715e8e2="" class="visually-hidden">
<div data-v-5d530569="">
<p data-v-5d530569="">No available labels</p>
</div>
<table data-v-5d530569="" class="table table-striped table-hover">
<thead data-v-5d530569="" class="table-dark">
<tr data-v-5d530569="">
<th data-v-5d530569="">State</th>
<th data-v-5d530569="">Type</th>
<th data-v-5d530569="">Label</th>
<th data-v-5d530569="">Contributor</th>
<th data-v-5d530569="" class="table-actions-header">Actions</th>
</tr>
</thead>
<tbody data-v-5d530569="">
<!--v-if-->
<tr data-v-5d530569="" class="table-new-row">
<td data-v-5d530569="" colspan="100%" class="text-center" title="Add new label"><i data-v-5d530569="" class="bi bi-plus"></i></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
Expand Down
1 change: 1 addition & 0 deletions src/types/zodFlaw.ts
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ export const ZodHistoryItemSchema = z.object({
});

export enum FlawLabelTypeEnum {
ALIAS = 'alias',
CONTEXT_BASED = 'context_based',
PRODUCT_FAMILY = 'product_family',
}
Expand Down