Skip to content

Commit f1d2bba

Browse files
committed
Enforce unique ids for multiselect fields, fix naming and tests
1 parent f8ab2cd commit f1d2bba

13 files changed

Lines changed: 54 additions & 36 deletions

client/src/components/Form/Elements/FormSelect.vue

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { computed, type ComputedRef, onMounted, watch } from "vue";
33
import Multiselect from "vue-multiselect";
44
55
import { useMultiselect } from "@/composables/useMultiselect";
6+
import { uid } from "@/utils/utils";
67
78
type SelectValue = string | number | null;
89
const { ariaExpanded, onOpen, onClose } = useMultiselect();
@@ -14,12 +15,14 @@ interface SelectOption {
1415
1516
const props = withDefaults(
1617
defineProps<{
18+
id?: string;
1719
multiple?: boolean;
1820
optional?: boolean;
1921
options: Array<[string, SelectValue]>;
2022
value?: Array<SelectValue> | string | number;
2123
}>(),
2224
{
25+
id: `form-select-${uid()}`,
2326
multiple: false,
2427
optional: false,
2528
value: null,
@@ -143,6 +146,7 @@ onMounted(() => {
143146
<template>
144147
<Multiselect
145148
v-if="hasOptions"
149+
:id="id"
146150
v-model="currentValue"
147151
:allow-empty="true"
148152
:class="['form-select', cls]"

client/src/components/Upload/CompositeBox.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { uploadSubmit } from "@/utils/upload-submit.js";
88
import { defaultModel } from "./model.js";
99
1010
import CompositeRow from "./CompositeRow.vue";
11-
import UploadSettingsSelect from "./UploadSettingsSelect.vue";
11+
import UploadSelect from "./UploadSelect.vue";
1212
1313
const props = defineProps({
1414
defaultDbKey: {
@@ -188,14 +188,14 @@ defineExpose({
188188
</div>
189189
<div class="upload-footer">
190190
<span class="upload-footer-title">Composite Type:</span>
191-
<UploadSettingsSelect
191+
<UploadSelect
192192
class="upload-footer-extension"
193193
:value="null"
194194
:options="listExtensions"
195195
:disabled="isRunning"
196196
@input="inputExtension" />
197197
<span class="upload-footer-title">Reference:</span>
198-
<UploadSettingsSelect :value="dbKey" :options="listDbKeys" :disabled="isRunning" @input="inputDbkey" />
198+
<UploadSelect :value="dbKey" :options="listDbKeys" :disabled="isRunning" @input="inputDbkey" />
199199
</div>
200200
<div class="upload-buttons d-flex justify-content-end">
201201
<BButton

client/src/components/Upload/DefaultBox.vue

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ import { COLLECTION_TYPES, DEFAULT_FILE_NAME, hasBrowserSupport } from "./utils"
1414
1515
import DefaultRow from "./DefaultRow.vue";
1616
import UploadBox from "./UploadBox.vue";
17-
import UploadExtensionDetails from "./UploadExtensionDetails.vue";
18-
import UploadSettingsSelect from "./UploadSettingsSelect.vue";
17+
import UploadExtension from "./UploadExtension.vue";
18+
import UploadSelect from "./UploadSelect.vue";
1919
2020
library.add(faCopy, faEdit, faFolderOpen, faLaptop);
2121
@@ -382,7 +382,7 @@ defineExpose({
382382
</UploadBox>
383383
<div class="upload-footer text-center">
384384
<span v-if="isCollection" class="upload-footer-title">Collection:</span>
385-
<UploadSettingsSelect
385+
<UploadSelect
386386
v-if="isCollection"
387387
class="upload-footer-collection-type"
388388
:value="collectionType"
@@ -391,16 +391,16 @@ defineExpose({
391391
placeholder="Select Type"
392392
@input="updateCollectionType" />
393393
<span class="upload-footer-title">Type (set all):</span>
394-
<UploadSettingsSelect
394+
<UploadSelect
395395
class="upload-footer-extension"
396396
:value="extension"
397397
:disabled="isRunning"
398398
:options="listExtensions"
399399
placeholder="Select Type"
400400
@input="updateExtension" />
401-
<UploadExtensionDetails :extension="extension" :list-extensions="listExtensions" />
401+
<UploadExtension :extension="extension" :list-extensions="listExtensions" />
402402
<span class="upload-footer-title">Reference (set all):</span>
403-
<UploadSettingsSelect
403+
<UploadSelect
404404
class="upload-footer-genome"
405405
:value="dbKey"
406406
:disabled="isRunning"

client/src/components/Upload/DefaultRow.vue

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
55
import { bytesToString } from "utils/utils";
66
import { computed } from "vue";
77
8-
import UploadExtensionDetails from "./UploadExtensionDetails.vue";
8+
import UploadExtension from "./UploadExtension.vue";
99
import UploadSettings from "./UploadSettings.vue";
10-
import UploadSettingsSelect from "./UploadSettingsSelect.vue";
10+
import UploadSelect from "./UploadSelect.vue";
1111
1212
library.add(faEdit, faLaptop, faFolderOpen);
1313
@@ -122,19 +122,16 @@ function removeUpload() {
122122
<div class="upload-size">
123123
{{ bytesToString(fileSize) }}
124124
</div>
125-
<UploadSettingsSelect
125+
<UploadSelect
126126
v-if="listExtensions !== null"
127127
class="upload-extension"
128128
:value="extension"
129129
:disabled="isDisabled"
130130
:options="listExtensions"
131131
placeholder="Select Type"
132132
@input="inputExtension" />
133-
<UploadExtensionDetails
134-
v-if="listExtensions !== null"
135-
:extension="extension"
136-
:list-extensions="listExtensions" />
137-
<UploadSettingsSelect
133+
<UploadExtension v-if="listExtensions !== null" :extension="extension" :list-extensions="listExtensions" />
134+
<UploadSelect
138135
v-if="listDbKeys !== null"
139136
class="upload-genome"
140137
:value="dbKey"

client/src/components/Upload/RulesInput.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { computed, ref } from "vue";
1111
1212
import { RULES_TYPES } from "./utils.js";
1313
14-
import UploadSettingsSelect from "./UploadSettingsSelect.vue";
14+
import UploadSelect from "./UploadSelect.vue";
1515
1616
library.add(faEdit, faFile, faFolderOpen, faLock);
1717
@@ -132,7 +132,7 @@ function inputRemote() {
132132
<FontAwesomeIcon v-if="isDisabled" class="upload-text-lock" icon="fa-lock" />
133133
<div class="upload-footer text-center">
134134
<span class="upload-footer-title">Upload type:</span>
135-
<UploadSettingsSelect v-model="dataType" class="rule-data-type" :options="RULES_TYPES" />
135+
<UploadSelect v-model="dataType" class="rule-data-type" :options="RULES_TYPES" />
136136
</div>
137137
<div class="upload-buttons d-flex justify-content-end">
138138
<BButton @click="inputPaste">
File renamed without changes.
File renamed without changes.

client/src/components/Upload/UploadModal.test.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { useUserStore } from "stores/userStore";
77
import { getLocalVue } from "tests/jest/helpers";
88

99
import { getDatatypes, getDbKeys } from "./services";
10-
import UploadModalContent from "./UploadModalContent";
10+
import UploadContainer from "./UploadContainer.vue";
1111

1212
import UploadModal from "./UploadModal.vue";
1313

@@ -86,21 +86,21 @@ describe("UploadModal.vue", () => {
8686
});
8787

8888
it("should load with correct defaults", async () => {
89-
const contentWrapper = wrapper.findComponent(UploadModalContent);
89+
const contentWrapper = wrapper.findComponent(UploadContainer);
9090
expect(contentWrapper.vm.auto.id).toBe("auto");
9191
expect(contentWrapper.vm.datatypesDisableAuto).toBe(false);
9292
});
9393

9494
it("should fetch datatypes and parse them", async () => {
95-
const contentWrapper = wrapper.findComponent(UploadModalContent);
95+
const contentWrapper = wrapper.findComponent(UploadContainer);
9696
expect(contentWrapper.exists()).toBe(true);
9797
expect(contentWrapper.vm.listExtensions.length).toBe(2);
9898
expect(contentWrapper.vm.listExtensions[0].id).toBe("auto");
9999
expect(contentWrapper.vm.listExtensions[1].id).toBe("fasta");
100100
});
101101

102102
it("should fetch genomes and parse them", async () => {
103-
const contentWrapper = wrapper.findComponent(UploadModalContent);
103+
const contentWrapper = wrapper.findComponent(UploadContainer);
104104
expect(contentWrapper.vm.listDbKeys.length).toBe(3);
105105
});
106106
});

client/src/components/Upload/UploadModal.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { ref, watch } from "vue";
77
import { useUserStore } from "@/stores/userStore";
88
import { wait } from "@/utils/utils";
99
10-
import UploadModalContent from "./UploadModalContent";
10+
import UploadContainer from "./UploadContainer.vue";
1111
1212
const { currentUser } = storeToRefs(useUserStore());
1313
const { currentHistoryId } = useUserHistories(currentUser);
@@ -89,7 +89,7 @@ defineExpose({
8989
<template v-slot:modal-header>
9090
<h2 class="title h-sm" tabindex="0">{{ options.title }}</h2>
9191
</template>
92-
<UploadModalContent
92+
<UploadContainer
9393
v-if="currentHistoryId"
9494
ref="content"
9595
:key="showModal"
File renamed without changes.

0 commit comments

Comments
 (0)