import React from 'react'; import { Subuser } from '@/state/server/subusers'; import { Formik, FormikHelpers, useFormikContext } from 'formik'; import { array, object, string } from 'yup'; import Modal, { RequiredModalProps } from '@/components/elements/Modal'; import Field from '@/components/elements/Field'; import { useStoreState } from 'easy-peasy'; import { ApplicationStore } from '@/state'; import TitledGreyBox from '@/components/elements/TitledGreyBox'; import Checkbox from '@/components/elements/Checkbox'; import styled from 'styled-components'; import classNames from 'classnames'; type Props = { subuser?: Subuser; } & RequiredModalProps; interface Values { email: string; permissions: string[]; } const PermissionLabel = styled.label` ${tw`flex items-center border border-transparent rounded p-2 cursor-pointer`}; text-transform: none; &:hover { ${tw`border-neutral-500 bg-neutral-800`}; } `; const EditSubuserModal = ({ subuser, ...props }: Props) => { const { values, isSubmitting, setFieldValue } = useFormikContext(); const permissions = useStoreState((state: ApplicationStore) => state.permissions.data); return (

{subuser ? 'Edit subuser' : 'Create new subuser'}

{Object.keys(permissions).filter(key => key !== 'websocket').map((key, index) => (

{key}

{ if (e.currentTarget.checked) { setFieldValue('permissions', [ ...values.permissions, ...Object.keys(permissions[key].keys) .map(pkey => `${key}.${pkey}`) .filter(permission => values.permissions.indexOf(permission) === -1), ]); } else { setFieldValue('permissions', [ ...values.permissions.filter( permission => Object.keys(permissions[key].keys) .map(pkey => `${key}.${pkey}`) .indexOf(permission) < 0, ), ]); } }} />
} className={index !== 0 ? 'mt-4' : undefined} >

{permissions[key].description}

{Object.keys(permissions[key].keys).map((pkey, index) => (
{pkey} {permissions[key].keys[pkey].length > 0 &&

{permissions[key].keys[pkey]}

}
))} ))}
); }; export default (props: Props) => { const submit = (values: Values, helpers: FormikHelpers) => { }; return ( ); };