feat: allow admins to create workspaces for other users in UI (#4247)

* added permission for creating a workspace on behalf of a user

* committing stashed files

* hooked up autocomplete for users

* added label

* added translations

* wrote test

* added inputMargin prop

* fixed permissions

* added inputSTyle prop

* ran prettier

* fix lint
This commit is contained in:
Kira Pilot
2022-09-29 14:32:38 -04:00
committed by GitHub
parent 70d7dd9b2f
commit 776f287685
9 changed files with 169 additions and 74 deletions

View File

@ -1,10 +1,12 @@
import { useMachine } from "@xstate/react"
import { FC } from "react"
import { useActor, useMachine } from "@xstate/react"
import { User } from "api/typesGenerated"
import { useOrganizationId } from "hooks/useOrganizationId"
import { FC, useContext, useState } from "react"
import { Helmet } from "react-helmet-async"
import { useNavigate, useParams } from "react-router-dom"
import { useOrganizationId } from "../../hooks/useOrganizationId"
import { pageTitle } from "../../util/page"
import { createWorkspaceMachine } from "../../xServices/createWorkspace/createWorkspaceXService"
import { pageTitle } from "util/page"
import { createWorkspaceMachine } from "xServices/createWorkspace/createWorkspaceXService"
import { XServiceContext } from "xServices/StateContext"
import { CreateWorkspaceErrors, CreateWorkspacePageView } from "./CreateWorkspacePageView"
const CreateWorkspacePage: FC = () => {
@ -28,8 +30,15 @@ const CreateWorkspacePage: FC = () => {
getTemplateSchemaError,
getTemplatesError,
createWorkspaceError,
permissions,
} = createWorkspaceState.context
const xServices = useContext(XServiceContext)
const [authState] = useActor(xServices.authXService)
const { me } = authState.context
const [owner, setOwner] = useState<User | null>(me ?? null)
return (
<>
<Helmet>
@ -49,6 +58,9 @@ const CreateWorkspacePage: FC = () => {
[CreateWorkspaceErrors.GET_TEMPLATE_SCHEMA_ERROR]: getTemplateSchemaError,
[CreateWorkspaceErrors.CREATE_WORKSPACE_ERROR]: createWorkspaceError,
}}
canCreateForUser={permissions?.createWorkspaceForUser}
defaultWorkspaceOwner={me ?? null}
setOwner={setOwner}
onCancel={() => {
navigate("/templates")
}}
@ -56,6 +68,7 @@ const CreateWorkspacePage: FC = () => {
send({
type: "CREATE_WORKSPACE",
request,
owner,
})
}}
/>