diff --git a/public/app/core/angular_wrappers.ts b/public/app/core/angular_wrappers.ts index 18e9d8dbd84..6974d40aac8 100644 --- a/public/app/core/angular_wrappers.ts +++ b/public/app/core/angular_wrappers.ts @@ -5,7 +5,6 @@ import EmptyListCTA from './components/EmptyListCTA/EmptyListCTA'; import { SearchResult } from './components/search/SearchResult'; import { TagFilter } from './components/TagFilter/TagFilter'; import { SideMenu } from './components/sidemenu/SideMenu'; -import DashboardPermissions from './components/Permissions/DashboardPermissions'; export function registerAngularDirectives() { react2AngularDirective('passwordStrength', PasswordStrength, ['password']); @@ -18,5 +17,4 @@ export function registerAngularDirectives() { ['onSelect', { watchDepth: 'reference' }], ['tagOptions', { watchDepth: 'reference' }], ]); - react2AngularDirective('dashboardPermissions', DashboardPermissions, ['backendSrv', 'dashboardId', 'folder']); } diff --git a/public/app/core/components/Permissions/AddPermissions.tsx b/public/app/core/components/PermissionList/AddPermission.tsx similarity index 51% rename from public/app/core/components/Permissions/AddPermissions.tsx rename to public/app/core/components/PermissionList/AddPermission.tsx index 289e27aa731..77ac6953b74 100644 --- a/public/app/core/components/Permissions/AddPermissions.tsx +++ b/public/app/core/components/PermissionList/AddPermission.tsx @@ -1,77 +1,90 @@ import React, { Component } from 'react'; -import { observer } from 'mobx-react'; -import { aclTypes } from 'app/stores/PermissionsStore/PermissionsStore'; import { UserPicker, User } from 'app/core/components/Picker/UserPicker'; import { TeamPicker, Team } from 'app/core/components/Picker/TeamPicker'; import DescriptionPicker, { OptionWithDescription } from 'app/core/components/Picker/DescriptionPicker'; -import { permissionOptions } from 'app/stores/PermissionsStore/PermissionsStore'; +import { + dashboardPermissionLevels, + dashboardAclTargets, + AclTarget, + PermissionLevel, + NewDashboardAclItem, + OrgRole, +} from 'app/types/acl'; export interface Props { - permissions: any; + onAddPermission: (item: NewDashboardAclItem) => void; + onCancel: () => void; } -@observer -class AddPermissions extends Component { +class AddPermissions extends Component { constructor(props) { super(props); + this.state = this.getCleanState(); } - componentWillMount() { - const { permissions } = this.props; - permissions.resetNewType(); + getCleanState() { + return { + userId: 0, + teamId: 0, + type: AclTarget.Team, + permission: PermissionLevel.View, + }; } onTypeChanged = evt => { - const { value } = evt.target; - const { permissions } = this.props; + const type = evt.target.value as AclTarget; - permissions.setNewType(value); + switch (type) { + case AclTarget.User: + case AclTarget.Team: + this.setState({ type: type, userId: 0, teamId: 0, role: undefined }); + break; + case AclTarget.Editor: + this.setState({ type: type, userId: 0, teamId: 0, role: OrgRole.Editor }); + break; + case AclTarget.Viewer: + this.setState({ type: type, userId: 0, teamId: 0, role: OrgRole.Viewer }); + break; + } }; onUserSelected = (user: User) => { - const { permissions } = this.props; - if (!user) { - permissions.newItem.setUser(null, null); - return; - } - return permissions.newItem.setUser(user.id, user.login, user.avatarUrl); + this.setState({ userId: user ? user.id : 0 }); }; onTeamSelected = (team: Team) => { - const { permissions } = this.props; - if (!team) { - permissions.newItem.setTeam(null, null); - return; - } - return permissions.newItem.setTeam(team.id, team.name, team.avatarUrl); + this.setState({ teamId: team ? team.id : 0 }); }; onPermissionChanged = (permission: OptionWithDescription) => { - const { permissions } = this.props; - return permissions.newItem.setPermission(permission.value); + this.setState({ permission: permission.value }); }; - resetNewType() { - const { permissions } = this.props; - return permissions.resetNewType(); + onSubmit = async evt => { + evt.preventDefault(); + await this.props.onAddPermission(this.state); + this.setState(this.getCleanState()); + }; + + isValid() { + switch (this.state.type) { + case AclTarget.Team: + return this.state.teamId > 0; + case AclTarget.User: + return this.state.userId > 0; + } + return true; } - onSubmit = evt => { - evt.preventDefault(); - const { permissions } = this.props; - permissions.addStoreItem(); - }; - render() { - const { permissions } = this.props; - const newItem = permissions.newItem; + const { onCancel } = this.props; + const newItem = this.state; const pickerClassName = 'width-20'; - - const isValid = newItem.isValid(); + const isValid = this.isValid(); return (
-
@@ -80,7 +93,7 @@ class AddPermissions extends Component {