checkModulePermission.tsx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import React from 'react'
  2. import { IProject } from 'containers/Projects/types'
  3. export default function<T> (project?: IProject, route?: string, isDelete?: boolean) {
  4. return (WrapperComponent) => {
  5. class ModulePermission extends React.PureComponent<T, {}> {
  6. private getPermissionByCurrentProject = () => {
  7. let permission = ''
  8. if (project) {
  9. const projectPermission = project.permission
  10. for (const attr in projectPermission) {
  11. if (`${route}Permission` === attr) {
  12. permission = projectPermission [attr]
  13. break
  14. }
  15. }
  16. }
  17. return permission
  18. }
  19. private computePermission = () => {
  20. const permission = this.getPermissionByCurrentProject()
  21. const defaultComponent = <span/>
  22. if (!project) {
  23. return defaultComponent
  24. }
  25. if (permission) {
  26. switch (Number(permission)) {
  27. case 0:
  28. return defaultComponent
  29. case 1:
  30. return defaultComponent
  31. // return <WrapperComponent disabled {...this.props}>{this.props.children}</WrapperComponent>
  32. case 2:
  33. if (isDelete) {
  34. return defaultComponent
  35. } else {
  36. return <WrapperComponent {...this.props}>{this.props.children}</WrapperComponent>
  37. }
  38. case 3:
  39. return <WrapperComponent {...this.props}>{this.props.children}</WrapperComponent>
  40. }
  41. } else {
  42. return defaultComponent
  43. }
  44. }
  45. public render () {
  46. const result = this.computePermission()
  47. return result
  48. }
  49. }
  50. return ModulePermission
  51. }
  52. }