import * as React from 'react'; import { css } from '@emotion/css'; import { faChevronDown } from '@fortawesome/free-solid-svg-icons/faChevronDown'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { Box, Button, Collapse, Group, Radio, SegmentedControl, Select, Stack, Text, TextInput, useMantineTheme } from '@mantine/core'; import uniqueId from 'lodash/uniqueId'; import { i18n } from '../i18n'; import { EPermission, Permission, UserUtils, userSession } from '../security'; function PermissionsEntry({ permission, setPermission, setGetter, }: { permission: Permission; setPermission: (permission: Permission) => void; setGetter: (permission: Permission) => Set; }) { let value: 'none' | 'read' | 'write' = 'none'; if (!setGetter(permission).has(EPermission.READ)) { value = 'none'; } else if (setGetter(permission).has(EPermission.READ) && !setGetter(permission).has(EPermission.WRITE)) { value = 'read'; } else if (setGetter(permission).has(EPermission.WRITE)) { value = 'write'; } return ( { switch (newValue) { case 'none': { const p = permission.clone(); setGetter(p).clear(); setPermission(p); break; } case 'read': { const p = permission.clone(); setGetter(p).clear(); setGetter(p).add(EPermission.READ); setPermission(p); break; } case 'write': { const p = permission.clone(); setGetter(p).clear(); setGetter(p).add(EPermission.READ); setGetter(p).add(EPermission.WRITE); setPermission(p); break; } default: break; } }} data={[ { label: ( <> {i18n.t('visyn:permission.noPermission')} ), value: 'none', }, { label: ( <> {i18n.t('visyn:permission.read')} ), value: 'read', }, { label: ( <> {i18n.t('visyn:permission.write')} ), value: 'write', }, ]} /> ); } interface PermissionChooserProps { permission: Permission; buddies: string[]; group: string; setPermission: (permission: Permission) => void; setBuddies: (buddies: string[]) => void; setGroup: (group: string) => void; extra?: React.ReactNode; } export const PermissionChooser = React.forwardRef & PermissionChooserProps>( ({ permission, buddies, group, setPermission, setBuddies, setGroup, extra, ...others }, ref) => { const id = React.useMemo(() => uniqueId('PermissionChooser'), []); const user = userSession.currentUser(); const roles = user ? user.roles : UserUtils.ANONYMOUS_USER.roles; const [advancedOpen, setAdvancedOpen] = React.useState(false); const theme = useMantineTheme(); return ( // @ts-ignore { if (value === 'private') { const p = permission.clone(); p.others.clear(); setPermission(p); } else { const p = permission.clone(); p.others.clear(); p.others.add(EPermission.READ); setPermission(p); } }} > {i18n.t('visyn:permission.private')} } /> {i18n.t('visyn:permission.publicMsg')} } /> {extra} {i18n.t('visyn:permission.public')}
p.others} /> {i18n.t('visyn:permission.definePermissions')} {i18n.t('visyn:permission.group')}