|
1 | 1 | <script setup lang="ts"> |
2 | 2 | import type { ModuleListItem, SessionContext } from '~~/shared/types' |
3 | | -import { hideAllPoppers, Menu as VMenu } from 'floating-vue' |
4 | 3 | import { computed, watch } from 'vue' |
5 | 4 | import { useModulePathSelector } from '~/composables/moduleGraph' |
6 | 5 |
|
@@ -88,80 +87,32 @@ watch([() => startSelector.state.value.selected, () => endSelector.state.value.s |
88 | 87 | <template> |
89 | 88 | <div h12 px4 p2 relative flex="~ gap2 items-center"> |
90 | 89 | <div flex="~ items-center gap2" class="flex-1" min-w-0> |
91 | | - <div flex-1 w-0> |
92 | | - <div v-if="startSelector.state.value.selected" w-full overflow-hidden flex="~ items-center" border="~ base rounded" p1 relative> |
93 | | - <div overflow-hidden text-ellipsis pr6 py0.5 w-0 flex-1> |
94 | | - <DisplayModuleId |
95 | | - :id="startSelector.state.value.selected" |
96 | | - :session="session" |
97 | | - block text-nowrap |
98 | | - :link="false" |
99 | | - :disable-tooltip="true" |
100 | | - /> |
101 | | - </div> |
102 | | - <button i-carbon-clean text-4 hover="op100" op50 title="Clear" absolute right-2 @click="startSelector.clear" /> |
103 | | - </div> |
104 | | - <VMenu v-else :distance="15" :triggers="['click']" :auto-hide="false" :delay="{ show: 300, hide: 150 }"> |
105 | | - <input |
106 | | - v-model="startSelector.state.value.search" |
107 | | - p1 px4 w-full border="~ base rounded-1" style="outline: none" |
108 | | - placeholder="Start" |
109 | | - @blur="hideAllPoppers" |
110 | | - > |
111 | | - <template #popper> |
112 | | - <div class="p2 w100" flex="~ col gap2"> |
113 | | - <ModulesFlatList |
114 | | - :session="session" |
115 | | - :modules="startSelector.modules.value" |
116 | | - disable-tooltip |
117 | | - :link="false" |
118 | | - @select="startSelector.select" |
119 | | - /> |
120 | | - </div> |
121 | | - </template> |
122 | | - </VMenu> |
123 | | - </div> |
| 90 | + <ModulesPathSelectorItem |
| 91 | + v-model:search="startSelector.state.value.search" |
| 92 | + placeholder="Start" |
| 93 | + :selector="startSelector" |
| 94 | + :session="session" |
| 95 | + :modules="startSelector.modules.value" |
| 96 | + @clear="() => { startSelector.clear(); endSelector.clear() }" |
| 97 | + /> |
124 | 98 | <div class="i-carbon-arrow-right op50" flex-shrink-0 /> |
125 | 99 |
|
126 | | - <div flex-1 w-0> |
127 | | - <div v-if="endSelector.state.value.selected" w-full overflow-hidden flex="~ items-center" border="~ base rounded" p1 relative> |
128 | | - <div overflow-hidden text-ellipsis pr6 py0.5 w-0 flex-1> |
129 | | - <DisplayModuleId |
130 | | - :id="endSelector.state.value.selected" |
131 | | - :session="session" |
132 | | - block text-nowrap |
133 | | - :link="false" |
134 | | - :disable-tooltip="true" |
135 | | - /> |
| 100 | + <ModulesPathSelectorItem |
| 101 | + v-model:search="endSelector.state.value.search" |
| 102 | + placeholder="End" |
| 103 | + :selector="endSelector" |
| 104 | + :session="session" |
| 105 | + :modules="filteredEndModules" |
| 106 | + @clear="endSelector.clear" |
| 107 | + > |
| 108 | + <template #empty> |
| 109 | + <div flex="~ items-center justify-center" w-full h-20> |
| 110 | + <span italic op50> |
| 111 | + {{ startSelector.state.value.selected ? 'No modules' : 'Select a start module to get end modules' }} |
| 112 | + </span> |
136 | 113 | </div> |
137 | | - <button i-carbon-clean text-4 hover="op100" op50 title="Clear" absolute right-2 @click="() => { startSelector.clear() ; endSelector.clear() }" /> |
138 | | - </div> |
139 | | - <VMenu v-else :distance="15" :triggers="['click']" :auto-hide="false" :delay="{ show: 300, hide: 150 }"> |
140 | | - <input |
141 | | - v-model="endSelector.state.value.search" |
142 | | - p1 px4 w-full border="~ base rounded-1" style="outline: none" |
143 | | - placeholder="End" |
144 | | - @blur="hideAllPoppers" |
145 | | - > |
146 | | - <template #popper> |
147 | | - <div class="p2 w100" flex="~ col gap2"> |
148 | | - <ModulesFlatList |
149 | | - v-if="filteredEndModules.length" |
150 | | - :session="session" |
151 | | - :modules="filteredEndModules" |
152 | | - disable-tooltip |
153 | | - :link="false" |
154 | | - @select="endSelector.select" |
155 | | - /> |
156 | | - <div v-else flex="~ items-center justify-center" w-full h-20> |
157 | | - <span italic op50> |
158 | | - {{ startSelector.state.value.selected ? 'No modules' : 'Select a start module to get end modules' }} |
159 | | - </span> |
160 | | - </div> |
161 | | - </div> |
162 | | - </template> |
163 | | - </VMenu> |
164 | | - </div> |
| 114 | + </template> |
| 115 | + </ModulesPathSelectorItem> |
165 | 116 | </div> |
166 | 117 |
|
167 | 118 | <DisplayCloseButton class="mr--2" @click="emit('close')" /> |
|
0 commit comments