|
3 | 3 | import SecondaryButton from './SecondaryButton.vue' |
4 | 4 | import DockerIcon from './icons/DockerIcon.vue' |
5 | 5 | import KubectlIcon from './icons/KubectlIcon.vue' |
| 6 | + import VaporIcon from './icons/VaporIcon.vue' |
6 | 7 | import { useTabsStore } from '../stores/tabs' |
7 | 8 | import DropDown from './DropDown.vue' |
8 | 9 | import DropDownItem from './DropDownItem.vue' |
|
20 | 21 | import KubectlView from '../views/KubectlView.vue' |
21 | 22 | import { ConnectReply } from '../../types/client.type' |
22 | 23 | import { useLodaersStore } from '../stores/loaders' |
| 24 | + import { useVaporStore } from '../stores/vapor.ts' |
23 | 25 | import Divider from './Divider.vue' |
24 | 26 | import { useRouter } from 'vue-router' |
25 | 27 |
|
|
28 | 30 | const sshStore = useSSHStore() |
29 | 31 | const kubectlStore = useKubectlStore() |
30 | 32 | const loadersStore = useLodaersStore() |
| 33 | + const vaporStore = useVaporStore() |
31 | 34 | const router = useRouter() |
32 | 35 | const dockerModal = ref() |
33 | 36 | const sshModal = ref() |
|
49 | 52 | if (!tabStore.current) { |
50 | 53 | return |
51 | 54 | } |
| 55 | +
|
| 56 | + if (execution !== 'vapor') { |
| 57 | + vaporStore.removeEnvironment(tabStore.current.id) |
| 58 | + } |
| 59 | +
|
52 | 60 | connecting.value = execution |
53 | 61 | let connection = tabStore.getConnectionConfig(tabStore.current, execution) |
54 | 62 | window.ipcRenderer.send('client.connect', { |
|
102 | 110 | } |
103 | 111 | } |
104 | 112 |
|
| 113 | + const vaporConfig = computed(() => vaporStore.getConnectionConfig(tabStore?.current?.id)) |
| 114 | +
|
| 115 | + const vaporConnected = (environment: string) => { |
| 116 | + if (!tabStore.current) { |
| 117 | + return |
| 118 | + } |
| 119 | +
|
| 120 | + tabStore.current.execution = 'vapor' |
| 121 | + tabStore.updateTab(tabStore.current) |
| 122 | + if (tab.value?.id) { |
| 123 | + vaporStore.setEnvironment(tabStore.current.id, environment) |
| 124 | + } |
| 125 | + } |
| 126 | +
|
| 127 | + const vaporRemoved = () => { |
| 128 | + if (!tabStore.current) { |
| 129 | + return |
| 130 | + } |
| 131 | +
|
| 132 | + tabStore.current.execution = 'local' |
| 133 | + vaporStore.removeEnvironment(tabStore.current.id) |
| 134 | + tabStore.updateTab(tabStore.current) |
| 135 | + } |
| 136 | +
|
| 137 | + function capitalize(str: string) { |
| 138 | + return str.charAt(0).toUpperCase() + str.slice(1) |
| 139 | + } |
| 140 | +
|
105 | 141 | const kubectlConnected = (config: KubectlConnectionConfig) => { |
106 | 142 | if (!tabStore.current) { |
107 | 143 | return |
|
187 | 223 | </div> |
188 | 224 | </DropDown> |
189 | 225 |
|
| 226 | + <!-- vapor --> |
| 227 | + <DropDown> |
| 228 | + <template v-slot:trigger> |
| 229 | + <SecondaryButton class="!px-2"> |
| 230 | + <VaporIcon |
| 231 | + class="size-4 mr-1" |
| 232 | + :class="{ '!text-[#25C4F2]': tabStore.getCurrent()?.execution === 'vapor' }" |
| 233 | + /> |
| 234 | + <span class="text-xs max-w-[150px] truncate flex items-center gap-2"> |
| 235 | + <span v-if="vaporConfig?.environment"> |
| 236 | + {{ capitalize(vaporConfig.environment) }} |
| 237 | + </span> |
| 238 | + <span v-else>Vapor</span> |
| 239 | + </span> |
| 240 | + <ChevronDownIcon class="size-4 ml-1" /> |
| 241 | + </SecondaryButton> |
| 242 | + </template> |
| 243 | + <div> |
| 244 | + <template v-for="env in vaporConfig?.environments" :key="env"> |
| 245 | + <DropDownItem v-if="vaporConfig?.environment !== env" @click="vaporConnected(env)" class="truncate"> |
| 246 | + {{ capitalize(env) }} |
| 247 | + </DropDownItem> |
| 248 | + </template> |
| 249 | + <DropDownItem v-if="vaporConfig?.environment" @click="vaporRemoved()"> Disconnect </DropDownItem> |
| 250 | + </div> |
| 251 | + </DropDown> |
| 252 | + |
190 | 253 | <!-- ssh --> |
191 | 254 | <DropDown> |
192 | 255 | <template v-slot:trigger> |
|
0 commit comments