import styled from 'styled-components/macro'; import tw from 'twin.macro'; import Checkbox from '@/components/elements/Checkbox'; import React from 'react'; import { useStoreState } from 'easy-peasy'; import Label from '@/components/elements/Label'; const Container = styled.label` ${tw`flex items-center border border-transparent rounded md:p-2 transition-colors duration-75`}; text-transform: none; &:not(.disabled) { ${tw`cursor-pointer`}; &:hover { ${tw`border-neutral-500 bg-neutral-800`}; } } &:not(:first-of-type) { ${tw`mt-4 sm:mt-2`}; } &.disabled { ${tw`opacity-50`}; & input[type='checkbox']:not(:checked) { ${tw`border-0`}; } } `; interface Props { permission: string; disabled: boolean; } const PermissionRow = ({ permission, disabled }: Props) => { const [key, pkey] = permission.split('.', 2); const permissions = useStoreState((state) => state.permissions.data); return ( <Container htmlFor={`permission_${permission}`} className={disabled ? 'disabled' : undefined}> <div css={tw`p-2`}> <Checkbox id={`permission_${permission}`} name={'permissions'} value={permission} css={tw`w-5 h-5 mr-2`} disabled={disabled} /> </div> <div css={tw`flex-1`}> <Label as={'p'} css={tw`font-medium`}> {pkey} </Label> {permissions[key].keys[pkey].length > 0 && ( <p css={tw`text-xs text-neutral-400 mt-1`}>{permissions[key].keys[pkey]}</p> )} </div> </Container> ); }; export default PermissionRow;