{"version":3,"file":"CreateTeam.dbde5b87278cf087cc5e.js","mappings":"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","sources":["webpack://grafana/./public/app/core/components/RolePicker/TeamRolePicker.tsx","webpack://grafana/./public/app/core/components/RolePicker/hooks.ts","webpack://grafana/./public/app/features/teams/CreateTeam.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { useAsyncFn } from 'react-use';\n\nimport { contextSrv } from 'app/core/core';\nimport { Role, AccessControlAction } from 'app/types';\n\nimport { RolePicker } from './RolePicker';\nimport { fetchTeamRoles, updateTeamRoles } from './api';\n\nexport interface Props {\n teamId: number;\n orgId?: number;\n roleOptions: Role[];\n disabled?: boolean;\n roles?: Role[];\n onApplyRoles?: (newRoles: Role[]) => void;\n pendingRoles?: Role[];\n /**\n * Set whether the component should send a request with the new roles to the\n * backend in TeamRolePicker.onRolesChange (apply=false), or call {@link onApplyRoles}\n * with the updated list of roles (apply=true).\n *\n * Besides it sets the RolePickerMenu's Button title to\n * * `Update` in case apply equals false\n * * `Apply` in case apply equals true\n *\n * @default false\n */\n apply?: boolean;\n maxWidth?: string | number;\n width?: string | number;\n isLoading?: boolean;\n}\n\nexport const TeamRolePicker = ({\n teamId,\n roleOptions,\n disabled,\n roles,\n onApplyRoles,\n pendingRoles,\n apply = false,\n maxWidth,\n width,\n isLoading,\n}: Props) => {\n const [{ loading, value: appliedRoles = roles || [] }, getTeamRoles] = useAsyncFn(async () => {\n try {\n if (roles) {\n return roles;\n }\n if (apply && Boolean(pendingRoles?.length)) {\n return pendingRoles;\n }\n\n if (contextSrv.hasPermission(AccessControlAction.ActionTeamsRolesList)) {\n return await fetchTeamRoles(teamId);\n }\n } catch (e) {\n console.error('Error loading options', e);\n }\n return [];\n }, [teamId, pendingRoles, roles]);\n\n useEffect(() => {\n getTeamRoles();\n }, [getTeamRoles]);\n\n const onRolesChange = async (roles: Role[]) => {\n if (!apply) {\n await updateTeamRoles(roles, teamId);\n await getTeamRoles();\n } else if (onApplyRoles) {\n onApplyRoles(roles);\n }\n };\n\n const canUpdateRoles =\n contextSrv.hasPermission(AccessControlAction.ActionTeamsRolesAdd) &&\n contextSrv.hasPermission(AccessControlAction.ActionTeamsRolesRemove);\n\n return (\n \n );\n};\n","import { useState } from 'react';\nimport useAsync from 'react-use/lib/useAsync';\n\nimport { contextSrv } from 'app/core/core';\nimport { AccessControlAction } from 'app/types';\n\nimport { fetchRoleOptions } from './api';\n\nexport const useRoleOptions = (organizationId: number) => {\n const [orgId, setOrgId] = useState(organizationId);\n\n const { value = [] } = useAsync(async () => {\n if (contextSrv.licensedAccessControlEnabled() && contextSrv.hasPermission(AccessControlAction.ActionRolesList)) {\n return fetchRoleOptions(orgId);\n }\n return Promise.resolve([]);\n }, [orgId]);\n\n return [{ roleOptions: value }, setOrgId] as const;\n};\n","import React, { JSX, useState } from 'react';\nimport { useForm } from 'react-hook-form';\n\nimport { NavModelItem } from '@grafana/data';\nimport { getBackendSrv, locationService } from '@grafana/runtime';\nimport { Button, Field, Input, FieldSet } from '@grafana/ui';\nimport { Page } from 'app/core/components/Page/Page';\nimport { TeamRolePicker } from 'app/core/components/RolePicker/TeamRolePicker';\nimport { updateTeamRoles } from 'app/core/components/RolePicker/api';\nimport { useRoleOptions } from 'app/core/components/RolePicker/hooks';\nimport { contextSrv } from 'app/core/core';\nimport { AccessControlAction, Role, TeamDTO } from 'app/types';\n\nconst pageNav: NavModelItem = {\n icon: 'users-alt',\n id: 'team-new',\n text: 'New team',\n subTitle: 'Create a new team. Teams let you grant permissions to a group of users.',\n};\n\nexport const CreateTeam = (): JSX.Element => {\n const currentOrgId = contextSrv.user.orgId;\n const [pendingRoles, setPendingRoles] = useState([]);\n const [{ roleOptions }] = useRoleOptions(currentOrgId);\n const {\n handleSubmit,\n register,\n formState: { errors },\n } = useForm();\n const canUpdateRoles =\n contextSrv.hasPermission(AccessControlAction.ActionUserRolesAdd) &&\n contextSrv.hasPermission(AccessControlAction.ActionUserRolesRemove);\n\n const createTeam = async (formModel: TeamDTO) => {\n const newTeam = await getBackendSrv().post('/api/teams', formModel);\n if (newTeam.teamId) {\n try {\n await contextSrv.fetchUserPermissions();\n if (contextSrv.licensedAccessControlEnabled() && canUpdateRoles) {\n await updateTeamRoles(pendingRoles, newTeam.teamId, newTeam.orgId);\n }\n } catch (e) {\n console.error(e);\n }\n locationService.push(`/org/teams/edit/${newTeam.teamId}`);\n }\n };\n\n return (\n \n \n
\n
\n \n \n \n {contextSrv.licensedAccessControlEnabled() && (\n \n \n \n )}\n \n \n \n
\n\n \n
\n
\n
\n );\n};\n\nexport default CreateTeam;\n"],"names":["TeamRolePicker","teamId","roleOptions","disabled","roles","onApplyRoles","pendingRoles","apply","maxWidth","width","isLoading","loading","appliedRoles","getTeamRoles","e","onRolesChange","canUpdateRoles","useRoleOptions","organizationId","orgId","setOrgId","value","pageNav","CreateTeam","currentOrgId","setPendingRoles","handleSubmit","register","errors","createTeam","formModel","newTeam"],"sourceRoot":""}