AddPermissions.tsx 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. import React, { Component } from 'react';
  2. import { observer } from 'mobx-react';
  3. import { aclTypes } from 'app/stores/PermissionsStore/PermissionsStore';
  4. import UserPicker, { User } from 'app/core/components/Picker/UserPicker';
  5. import TeamPicker, { Team } from 'app/core/components/Picker/TeamPicker';
  6. import DescriptionPicker, { OptionWithDescription } from 'app/core/components/Picker/DescriptionPicker';
  7. import { permissionOptions } from 'app/stores/PermissionsStore/PermissionsStore';
  8. export interface IProps {
  9. permissions: any;
  10. backendSrv: any;
  11. dashboardId: any;
  12. }
  13. @observer
  14. class AddPermissions extends Component<IProps, any> {
  15. constructor(props) {
  16. super(props);
  17. this.userPicked = this.userPicked.bind(this);
  18. this.teamPicked = this.teamPicked.bind(this);
  19. this.permissionPicked = this.permissionPicked.bind(this);
  20. this.typeChanged = this.typeChanged.bind(this);
  21. this.handleSubmit = this.handleSubmit.bind(this);
  22. }
  23. componentWillMount() {
  24. const { permissions } = this.props;
  25. permissions.resetNewType();
  26. }
  27. typeChanged(evt) {
  28. const { value } = evt.target;
  29. const { permissions } = this.props;
  30. // if (value === 'Viewer' || value === 'Editor') {
  31. // // permissions.addStoreItem({ permission: 1, role: value, dashboardId: dashboardId }, dashboardId);
  32. // // this.resetNewType();
  33. // return;
  34. // }
  35. permissions.setNewType(value);
  36. }
  37. userPicked(user: User) {
  38. const { permissions } = this.props;
  39. if (!user) {
  40. permissions.newItem.setUser(null, null);
  41. return;
  42. }
  43. permissions.newItem.setUser(user.id, user.login);
  44. // return permissions.addStoreItem({ userId: user.id, userLogin: user.login, permission: 1 });
  45. }
  46. teamPicked(team: Team) {
  47. const { permissions } = this.props;
  48. if (!team) {
  49. permissions.newItem.setTeam(null, null);
  50. return;
  51. }
  52. permissions.newItem.setTeam(team.id, team.name);
  53. }
  54. permissionPicked(permission: OptionWithDescription) {
  55. const { permissions } = this.props;
  56. permissions.newItem.setPermission(permission.value);
  57. }
  58. resetNewType() {
  59. const { permissions } = this.props;
  60. permissions.resetNewType();
  61. }
  62. handleSubmit(evt) {
  63. evt.preventDefault();
  64. const { permissions } = this.props;
  65. permissions.addStoreItem();
  66. }
  67. render() {
  68. const { permissions, backendSrv } = this.props;
  69. const newItem = permissions.newItem;
  70. return (
  71. <div className="gf-form-inline cta-form">
  72. <button className="cta-form__close btn btn-transparent" onClick={permissions.hideAddPermissions}>
  73. <i className="fa fa-close" />
  74. </button>
  75. <form name="addPermission" onSubmit={this.handleSubmit}>
  76. <h6>Add Permission For</h6>
  77. <div className="gf-form-inline">
  78. <div className="gf-form">
  79. <div className="gf-form-select-wrapper">
  80. <select className="gf-form-input gf-size-auto" value={newItem.type} onChange={this.typeChanged}>
  81. {aclTypes.map((option, idx) => {
  82. return (
  83. <option key={idx} value={option.value}>
  84. {option.text}
  85. </option>
  86. );
  87. })}
  88. </select>
  89. </div>
  90. </div>
  91. {newItem.type === 'User' ? (
  92. <div className="gf-form">
  93. <UserPicker backendSrv={backendSrv} handlePicked={this.userPicked} value={newItem.userId} />
  94. </div>
  95. ) : null}
  96. {newItem.type === 'Group' ? (
  97. <div className="gf-form">
  98. <TeamPicker backendSrv={backendSrv} handlePicked={this.teamPicked} value={newItem.teamId} />
  99. </div>
  100. ) : null}
  101. <div className="gf-form">
  102. <DescriptionPicker
  103. optionsWithDesc={permissionOptions}
  104. handlePicked={this.permissionPicked}
  105. value={newItem.permission}
  106. disabled={false}
  107. className={'gf-form-input--form-dropdown-right'}
  108. />
  109. </div>
  110. <div className="gf-form">
  111. <button className="btn btn-success" type="submit" disabled={!newItem.isValid()}>
  112. Save
  113. </button>
  114. </div>
  115. </div>
  116. </form>
  117. {permissions.error ? (
  118. <div className="gf-form width-17">
  119. <span ng-if="ctrl.error" className="text-error p-l-1">
  120. <i className="fa fa-warning" />
  121. {permissions.error}
  122. </span>
  123. </div>
  124. ) : null}
  125. </div>
  126. );
  127. }
  128. }
  129. export default AddPermissions;