1
1
<script setup>
2
2
import { ref , computed } from ' vue'
3
- import {
4
- updSpecies ,
5
- updOrganismFromSpec ,
6
- updModificationFromOrg ,
7
- updTechnologyFromOrgAndMod ,
8
- updDataset
9
- } from ' @/utils/selection.js'
10
3
4
+ const emit = defineEmits ([' datasetUpdated' ])
5
+ const model = defineModel ()
11
6
const props = defineProps ({
12
- options : {
13
- type: Array ,
7
+ organism : {
8
+ type: Object ,
14
9
required: true
15
10
},
16
11
dataset: {
@@ -19,130 +14,65 @@ const props = defineProps({
19
14
}
20
15
})
21
16
22
- const modification = ref ()
23
- const selectedModification = ref ()
24
- const technology = ref ()
25
- const selectedTechnology = ref ()
26
- const species = computed (() => updSpecies (props .options ))
27
- const selectedSpecies = ref ()
28
- const organism = ref ()
29
- const selectedOrganism = ref ()
30
- const datasetSelection = ref ()
31
- const selectedDataset = ref ()
32
-
33
- const emit = defineEmits ([' selectedSpecies' , ' selectedDataset' ])
34
-
35
- const updateOrganism = () => {
36
- selectedOrganism .value = undefined
37
- selectedModification .value = undefined
38
- selectedTechnology .value = undefined
39
- selectedDataset .value = undefined
40
- organism .value = updOrganismFromSpec (props .options , selectedSpecies .value .label )
41
- updateDataset ()
42
- emit (' selectedSpecies' , selectedSpecies .value .label )
43
- }
44
-
45
- const updateModification = () => {
46
- selectedModification .value = undefined
47
- selectedTechnology .value = undefined
48
- selectedDataset .value = undefined
49
- modification .value = updModificationFromOrg (props .options , selectedOrganism .value )
50
- updateDataset ()
51
- }
52
-
53
- const updateTechnology = () => {
54
- selectedTechnology .value = undefined
55
- selectedDataset .value = undefined
56
- technology .value = updTechnologyFromOrgAndMod (
57
- props .options ,
58
- selectedOrganism .value ,
59
- selectedModification .value
60
- )
61
- updateDataset ()
62
- }
17
+ const selectedTaxid = ref ()
18
+ const dataset = ref ()
63
19
64
- function updateDataset () {
65
- selectedDataset .value = undefined
66
- emit (' selectedDataset' , undefined )
67
- datasetSelection .value = updDataset (
68
- props .options ,
69
- organism .value ,
70
- selectedOrganism .value ,
71
- selectedModification .value ,
72
- selectedTechnology .value ,
73
- props .dataset
20
+ const updateDataset = (value ) => {
21
+ model .value = []
22
+ let opts = props .dataset .filter ((item ) => item .taxa_id == value)
23
+ dataset .value = [... new Map (opts .map ((item ) => [item[' dataset_id' ], item])).values ()].map (
24
+ (item ) => {
25
+ return {
26
+ dataset_id: item .dataset_id ,
27
+ dataset_title: item .dataset_title ,
28
+ dataset_info:
29
+ ' (' + item .rna + ' , ' + item .modomics_sname + ' , ' + item .cto + ' , ' + item .tech + ' )'
30
+ }
31
+ }
74
32
)
33
+ emit (' datasetUpdated' , dataset .value )
75
34
}
76
35
</script >
77
36
78
37
<template >
79
38
<div class =" grid grid-cols-4 gap-6" >
80
- <Dropdown
81
- @change =" updateOrganism"
82
- v-model =" selectedSpecies"
83
- :options =" species"
39
+ <CascadeSelect
40
+ @change =" updateDataset($event.value)"
41
+ v-model =" selectedTaxid"
42
+ :options =" props.organism"
43
+ optionValue =" key"
84
44
optionLabel =" label"
85
45
optionGroupLabel =" label"
86
- optionGroupChildren =" children "
46
+ : optionGroupChildren =" ['child1'] "
87
47
placeholder =" 1. Select one organism"
88
48
:pt =" {
89
49
root: { class: 'w-full md:w-full' }
90
50
}"
91
51
:ptOptions =" { mergeProps: true }"
92
52
/>
93
53
<MultiSelect
94
- @change =" updateModification"
95
- v-model =" selectedOrganism"
96
- :options =" organism"
97
- optionLabel =" label"
98
- placeholder =" 2. Select cell/tissue"
99
- :maxSelectedLabels =" 3"
100
- :pt =" {
101
- root: { class: 'w-full md:w-full' }
102
- }"
103
- :ptOptions =" { mergeProps: true }"
104
- />
105
- <TreeSelect
106
- @change =" updateTechnology"
107
- v-model =" selectedModification"
108
- :options =" modification"
109
- selectionMode =" checkbox"
110
- :metaKeySelection =" false"
111
- placeholder =" 3. Select RNA modifications"
112
- :pt =" {
113
- root: { class: 'w-full md:w-full' }
114
- }"
115
- :ptOptions =" { mergeProps: true }"
116
- />
117
- <TreeSelect
118
- @change =" updateDataset"
119
- v-model =" selectedTechnology"
120
- :options =" technology"
121
- selectionMode =" checkbox"
122
- :metaKeySelection =" false"
123
- placeholder =" 4. Select technologies"
124
- :pt =" {
125
- root: { class: 'w-full md:w-full' }
126
- }"
127
- :ptOptions =" { mergeProps: true }"
128
- />
129
- <MultiSelect
130
- @change ="
131
- emit(
132
- 'selectedDataset',
133
- $event.value.map((d) => d.dataset_id)
134
- )
135
- "
136
- v-model =" selectedDataset"
137
- :options =" datasetSelection"
54
+ v-model =" model"
55
+ :options =" dataset"
56
+ :selectionLimit =" 3"
138
57
filter
139
- optionLabel =" dataset_display"
140
- placeholder =" 5. Select dataset"
58
+ :filterFields =" ['dataset_id', 'dataset_title', 'dataset_info']"
59
+ optionValue =" dataset_id"
60
+ optionLabel =" dataset_id"
61
+ placeholder =" 2. Select dataset"
141
62
:maxSelectedLabels =" 3"
63
+ display =" chip"
142
64
:pt =" {
143
- root: { class: 'col-span-4 w-full md:w-full' }
65
+ root: { class: 'col-span-3 w-full md:w-full' }
144
66
}"
145
67
:ptOptions =" { mergeProps: true }"
146
- />
68
+ >
69
+ <template #option =" slotProps " >
70
+ <div class =" flex" >
71
+ <div class =" pr-2 text-surface-500" >{{ slotProps.option.dataset_id }}</div >
72
+ <div class =" pr-2 font-semibold" >{{ slotProps.option.dataset_title }}</div >
73
+ <div class =" italic" >{{ slotProps.option.dataset_info }}</div >
74
+ </div >
75
+ </template >
76
+ </MultiSelect >
147
77
</div >
148
78
</template >
0 commit comments