1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-05-08 01:15:49 +02:00
unleash.unleash/frontend/src/component/common/PermissionSwitch/PermissionSwitch.tsx
2022-02-23 13:45:37 +01:00

62 lines
1.6 KiB
TypeScript

import { Switch, Tooltip } from '@material-ui/core';
import { OverridableComponent } from '@material-ui/core/OverridableComponent';
import AccessContext from '../../../contexts/AccessContext';
import React, { useContext } from 'react';
interface IPermissionSwitchProps extends OverridableComponent<any> {
permission: string;
tooltip: string;
onChange?: (e: any) => void;
disabled?: boolean;
projectId?: string;
environmentId?: string;
checked: boolean;
}
const PermissionSwitch = React.forwardRef<
HTMLButtonElement,
IPermissionSwitchProps
>((props, ref) => {
const {
permission,
tooltip,
disabled,
projectId,
environmentId,
checked,
onChange,
...rest
} = props;
const { hasAccess } = useContext(AccessContext);
let access;
if (projectId && environmentId) {
access = hasAccess(permission, projectId, environmentId);
} else if (projectId) {
access = hasAccess(permission, projectId);
} else {
access = hasAccess(permission);
}
const tooltipText = !access
? "You don't have access to perform this operation"
: '';
return (
<Tooltip title={tooltipText} arrow>
<span data-loading>
<Switch
onChange={onChange}
disabled={disabled || !access}
checked={checked}
ref={ref}
{...rest}
/>
</span>
</Tooltip>
);
});
export default PermissionSwitch;