()
| 16 | import { WorkspaceReadyPage } from "./WorkspaceReadyPage"; |
| 17 | |
| 18 | const WorkspacePage: FC = () => { |
| 19 | const queryClient = useQueryClient(); |
| 20 | const params = useParams() as { |
| 21 | username: string; |
| 22 | workspace: string; |
| 23 | }; |
| 24 | const workspaceName = params.workspace; |
| 25 | const username = params.username.replace("@", ""); |
| 26 | |
| 27 | // Workspace |
| 28 | const workspaceQueryOptions = workspaceByOwnerAndName( |
| 29 | username, |
| 30 | workspaceName, |
| 31 | ); |
| 32 | const workspaceQuery = useQuery(workspaceQueryOptions); |
| 33 | const workspace = workspaceQuery.data; |
| 34 | |
| 35 | // Template |
| 36 | const templateQuery = useQuery({ |
| 37 | ...templateQueryOptions(workspace?.template_id ?? ""), |
| 38 | enabled: Boolean(workspace), |
| 39 | }); |
| 40 | const template = templateQuery.data; |
| 41 | |
| 42 | // Permissions |
| 43 | const permissionsQuery = useQuery(workspacePermissions(workspace)); |
| 44 | const permissions = permissionsQuery.data; |
| 45 | |
| 46 | // Watch workspace changes |
| 47 | const updateWorkspaceData = useEffectEvent( |
| 48 | async (newWorkspaceData: Workspace) => { |
| 49 | if (!workspace) { |
| 50 | throw new Error( |
| 51 | "Applying an update for a workspace that is undefined.", |
| 52 | ); |
| 53 | } |
| 54 | |
| 55 | queryClient.setQueryData( |
| 56 | workspaceQueryOptions.queryKey, |
| 57 | newWorkspaceData, |
| 58 | ); |
| 59 | |
| 60 | const hasNewBuild = |
| 61 | newWorkspaceData.latest_build.id !== workspace.latest_build.id; |
| 62 | const lastBuildHasChanged = |
| 63 | newWorkspaceData.latest_build.status !== workspace.latest_build.status; |
| 64 | |
| 65 | if (hasNewBuild || lastBuildHasChanged) { |
| 66 | await queryClient.invalidateQueries({ |
| 67 | queryKey: workspaceBuildsKey(newWorkspaceData.id), |
| 68 | }); |
| 69 | } |
| 70 | }, |
| 71 | ); |
| 72 | const workspaceId = workspace?.id; |
| 73 | useEffect(() => { |
| 74 | if (!workspaceId) { |
| 75 | return; |
nothing calls this directly
no test coverage detected