DataSourcePermissionsList.tsx 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import React, { PureComponent } from 'react';
  2. import { DataSourcePermission } from 'app/types';
  3. import { dataSourceAclLevels, DataSourcePermissionLevel } from 'app/types/acl';
  4. import DescriptionPicker from '../../core/components/Picker/DescriptionPicker';
  5. export interface Props {
  6. items: DataSourcePermission[];
  7. onRemoveItem: (item) => void;
  8. }
  9. export class DataSourcePermissionsList extends PureComponent<Props> {
  10. renderAvatar(item) {
  11. if (item.teamId) {
  12. return <img className="filter-table__avatar" src={item.teamAvatarUrl} />;
  13. } else if (item.userId) {
  14. return <img className="filter-table__avatar" src={item.userAvatarUrl} />;
  15. }
  16. return <i style={{ width: '25px', height: '25px' }} className="gicon gicon-viewer" />;
  17. }
  18. renderDescription(item) {
  19. if (item.userId) {
  20. return [
  21. <span key="name">{item.userLogin} </span>,
  22. <span key="description" className="filter-table__weak-italic">
  23. (User)
  24. </span>,
  25. ];
  26. }
  27. if (item.teamId) {
  28. return [
  29. <span key="name">{item.team} </span>,
  30. <span key="description" className="filter-table__weak-italic">
  31. (Team)
  32. </span>,
  33. ];
  34. }
  35. return <span className="filter-table__weak-italic">(Role)</span>;
  36. }
  37. render() {
  38. const { items } = this.props;
  39. const permissionLevels = [...dataSourceAclLevels];
  40. permissionLevels.push({ value: DataSourcePermissionLevel.Admin, label: 'Admin', description: '' });
  41. return (
  42. <table className="filter-table gf-form-group">
  43. <tbody>
  44. <tr className="gf-form-disabled">
  45. <td style={{ width: '1%' }}>
  46. <i style={{ width: '25px', height: '25px' }} className="gicon gicon-shield" />
  47. </td>
  48. <td style={{ width: '90%' }}>
  49. Admin
  50. <span className="filter-table__weak-italic"> (Role)</span>
  51. </td>
  52. <td />
  53. <td className="query-keyword">Can</td>
  54. <td>
  55. <div className="gf-form">
  56. <DescriptionPicker
  57. optionsWithDesc={permissionLevels}
  58. onSelected={() => {}}
  59. value={2}
  60. disabled={true}
  61. className={'gf-form-input--form-dropdown-right'}
  62. />
  63. </div>
  64. </td>
  65. <td>
  66. <button className="btn btn-inverse btn-small">
  67. <i className="fa fa-lock" />
  68. </button>
  69. </td>
  70. </tr>
  71. {items.map((item, index) => {
  72. return (
  73. <tr key={`${item.id}-${index}`}>
  74. <td style={{ width: '1%' }}>{this.renderAvatar(item)}</td>
  75. <td style={{ width: '90%' }}>{this.renderDescription(item)}</td>
  76. <td />
  77. <td className="query-keyword">Can</td>
  78. <td>
  79. <div className="gf-form">
  80. <DescriptionPicker
  81. optionsWithDesc={permissionLevels}
  82. onSelected={() => {}}
  83. value={1}
  84. disabled={true}
  85. className={'gf-form-input--form-dropdown-right'}
  86. />
  87. </div>
  88. </td>
  89. <td>
  90. <button className="btn btn-danger btn-small" onClick={() => this.props.onRemoveItem(item)}>
  91. <i className="fa fa-remove" />
  92. </button>
  93. </td>
  94. </tr>
  95. );
  96. })}
  97. </tbody>
  98. </table>
  99. );
  100. }
  101. }
  102. export default DataSourcePermissionsList;