2828 data-cy =" aut-url"
2929 >
3030 <div
31- class =" rounded-md flex shadow-md mx-2 url px-4 "
31+ class =" flex px-4 mx-2 rounded-md shadow-md url "
3232 :class =" {
3333 'bg-yellow-50': autStore.isLoadingUrl,
3434 'bg-white': !autStore.isLoadingUrl,
4343 </div >
4444
4545 <Select
46- v- model =" browser"
46+ : model-value =" browser"
4747 data-cy =" select-browser"
4848 :options =" browsers"
49- item-value =" name"
49+ item-value =" displayName"
50+ @update:model-value =" changeBrowser"
5051 />
5152 </div >
5253
6364</template >
6465
6566<script lang="ts" setup>
66- import { computed } from ' vue'
67- import { useAutStore } from ' ../store'
67+ import { computed , ref } from ' vue'
68+ import { useAutStore , useSpecStore } from ' ../store'
6869import Select from ' @packages/frontend-shared/src/components/Select.vue'
69- import { gql } from ' @urql/vue'
70+ import { gql , useMutation } from ' @urql/vue'
7071import IconCrosshairsGPS from ' ~icons/mdi/crosshairs-gps'
7172import Icon from ' @packages/frontend-shared/src/components/Icon.vue'
72- import type { SpecRunnerHeaderFragment } from ' ../generated/graphql'
73+ import { SpecRunnerHeaderFragment , SpecRunnerHeader_SetBrowserDocument , SpecRunnerHeader_BrowserFragment } from ' ../generated/graphql'
7374import SelectorPlayground from ' ./selector-playground/SelectorPlayground.vue'
7475import { useSelectorPlaygroundStore } from ' ../store/selector-playground-store'
7576import type { EventManager } from ' ./event-manager'
@@ -86,12 +87,28 @@ fragment SpecRunnerHeader on CurrentProject {
8687 }
8788 browsers {
8889 id
89- name
90- displayName
90+ ...SpecRunnerHeader_Browser
9191 }
9292}
9393`
9494
95+ gql `
96+ fragment SpecRunnerHeader_Browser on Browser {
97+ id
98+ name
99+ displayName
100+ }
101+ `
102+
103+ gql `
104+ mutation SpecRunnerHeader_SetBrowser($browserId: ID!, $specPath: String!) {
105+ launchpadSetBrowser(id: $browserId)
106+ launchOpenProject(specPath: $specPath)
107+ }
108+ `
109+
110+ const setBrowser = useMutation (SpecRunnerHeader_SetBrowserDocument )
111+
95112const props = defineProps <{
96113 gql: SpecRunnerHeaderFragment
97114 eventManager: EventManager
@@ -114,20 +131,21 @@ const togglePlayground = () => {
114131 }
115132}
116133
117- const browser = computed (() => {
118- if (! props .gql .currentBrowser ) {
119- return
120- }
134+ const specStore = useSpecStore ()
135+
136+ // Have to spread gql props since binding it to v-model causes error when testing
137+ const browser = ref ({ ... props .gql .currentBrowser })
138+ const browsers = computed (() => props .gql .browsers ?.slice ().map ((browser ) => ({ ... browser })) ?? [])
121139
122- const dimensions = ` ${autStore .viewportDimensions .width }x${autStore .viewportDimensions .height } `
140+ function changeBrowser (browser : SpecRunnerHeader_BrowserFragment ) {
141+ const activeSpec = specStore .activeSpec
123142
124- return {
125- id: props .gql .currentBrowser .id ,
126- name: ` ${props .gql .currentBrowser .displayName } ${dimensions } ` ,
143+ if (props .gql .currentBrowser ?.id === browser .id || ! activeSpec ) {
144+ return
127145 }
128- })
129146
130- const browsers = computed (() => props .gql .browsers ?.slice () ?? [])
147+ setBrowser .executeMutation ({ browserId: browser .id , specPath: activeSpec .absolute })
148+ }
131149
132150const autStore = useAutStore ()
133151
0 commit comments