98
98
:event-manager =" eventManager"
99
99
:studio-status =" studioStatus"
100
100
:aut-url-selector =" autUrlSelector"
101
+ :user-project-status-store =" userProjectStatusStore"
102
+ :has-requested-project-access =" hasRequestedProjectAccess"
103
+ :request-project-access-mutation =" requestProjectAccessMutation"
101
104
/>
102
105
</HideDuringScreenshot >
103
106
</template >
@@ -122,7 +125,7 @@ import ScreenshotHelperPixels from './screenshot/ScreenshotHelperPixels.vue'
122
125
import { useScreenshotStore } from ' ../store/screenshot-store'
123
126
import ChooseExternalEditorModal from ' @packages/frontend-shared/src/gql-components/ChooseExternalEditorModal.vue'
124
127
import { useMutation , gql } from ' @urql/vue'
125
- import { SpecRunnerOpenMode_OpenFileInIdeDocument , StudioStatus_ChangeDocument } from ' ../generated/graphql'
128
+ import { SpecRunnerOpenMode_OpenFileInIdeDocument , StudioStatus_ChangeDocument , SpecRunner_Studio_RequestAccessDocument } from ' ../generated/graphql'
126
129
import type { SpecRunnerFragment } from ' ../generated/graphql'
127
130
import { usePreferences } from ' ../composables/usePreferences'
128
131
import ScriptError from ' ./ScriptError.vue'
@@ -136,6 +139,7 @@ import { runnerConstants } from './runner-constants'
136
139
import { useStudioStore } from ' ../store/studio-store'
137
140
import StudioPanel from ' ../studio/StudioPanel.vue'
138
141
import { useSubscription } from ' ../graphql'
142
+ import { useUserProjectStatusStore } from ' @packages/frontend-shared/src/store/user-project-status-store'
139
143
140
144
// this is used by the StudioPanel to access the AUT URL input
141
145
const autUrlSelector = ' .aut-url-input'
@@ -149,6 +153,8 @@ const {
149
153
collapsedNavBarWidth,
150
154
} = runnerConstants
151
155
156
+ const userProjectStatusStore = useUserProjectStatusStore ()
157
+
152
158
gql `
153
159
fragment SpecRunner_Preferences on Query {
154
160
localSettings {
@@ -167,6 +173,32 @@ fragment SpecRunner_Preferences on Query {
167
173
gql `
168
174
fragment SpecRunner_Studio on Query {
169
175
cloudStudioRequested
176
+ currentProject {
177
+ id
178
+ projectId
179
+ cloudProject {
180
+ __typename
181
+ ... on CloudProjectUnauthorized {
182
+ message
183
+ hasRequestedAccess
184
+ }
185
+ ... on CloudProject {
186
+ id
187
+ }
188
+ }
189
+ }
190
+ }
191
+ `
192
+
193
+ gql `
194
+ mutation SpecRunner_Studio_RequestAccess( $projectId: String! ) {
195
+ cloudProjectRequestAccess(projectSlug: $projectId) {
196
+ __typename
197
+ ... on CloudProjectUnauthorized {
198
+ message
199
+ hasRequestedAccess
200
+ }
201
+ }
170
202
}
171
203
`
172
204
@@ -232,6 +264,12 @@ const {
232
264
233
265
const studioStore = useStudioStore ()
234
266
267
+ const hasRequestedProjectAccess = computed (() => {
268
+ return (props .gql .currentProject ?.cloudProject ?.__typename === ' CloudProjectUnauthorized' && props .gql .currentProject ?.cloudProject ?.hasRequestedAccess ) ?? false
269
+ })
270
+
271
+ const requestProjectAccessMutation = useMutation (SpecRunner_Studio_RequestAccessDocument )
272
+
235
273
const handleStudioPanelClose = () => {
236
274
eventManager .emit (' studio:cancel' , undefined )
237
275
}
0 commit comments