Add indication for anonymous user and archive schema

This commit is contained in:
IRBorisov 2024-03-04 19:58:10 +03:00
parent 7d4b87aa7d
commit f2cba9aaaf

View File

@ -13,7 +13,7 @@ import {
BiUpload BiUpload
} from 'react-icons/bi'; } from 'react-icons/bi';
import { FiEdit } from 'react-icons/fi'; import { FiEdit } from 'react-icons/fi';
import { LuCrown, LuGlasses, LuReplace } from 'react-icons/lu'; import { LuAlertCircle, LuAlertTriangle, LuCrown, LuGlasses, LuReplace } from 'react-icons/lu';
import { VscLibrary } from 'react-icons/vsc'; import { VscLibrary } from 'react-icons/vsc';
import Button from '@/components/ui/Button'; import Button from '@/components/ui/Button';
@ -37,7 +37,7 @@ function RSTabsMenu({ onDestroy }: RSTabsMenuProps) {
const controller = useRSEdit(); const controller = useRSEdit();
const router = useConceptNavigation(); const router = useConceptNavigation();
const { user } = useAuth(); const { user } = useAuth();
const { isOwned, isClaimable } = useRSForm(); const model = useRSForm();
const { mode, setMode } = useAccessMode(); const { mode, setMode } = useAccessMode();
@ -99,26 +99,34 @@ function RSTabsMenu({ onDestroy }: RSTabsMenuProps) {
router.push('/library/create'); router.push('/library/create');
} }
function handleLogin() {
router.push('/login');
}
function handleGotoCurrent() {
router.push(`/rsforms/${model.schemaID}`);
}
return ( return (
<div className='flex'> <div className='flex'>
<div ref={schemaMenu.ref}> <div ref={schemaMenu.ref}>
<Button <Button
noBorder
dense dense
noBorder
noOutline
tabIndex={-1} tabIndex={-1}
title='Меню' title='Меню'
hideTitle={schemaMenu.isOpen} hideTitle={schemaMenu.isOpen}
icon={<BiMenu size='1.25rem' className='clr-text-controls' />} icon={<BiMenu size='1.25rem' className='clr-text-controls' />}
className='h-full pl-2' className='h-full pl-2'
style={{ outlineColor: 'transparent' }}
onClick={schemaMenu.toggle} onClick={schemaMenu.toggle}
/> />
<Dropdown isOpen={schemaMenu.isOpen}> <Dropdown isOpen={schemaMenu.isOpen}>
<DropdownButton <DropdownButton
disabled={(!user || !isClaimable) && !isOwned} disabled={(!user || !model.isClaimable) && !model.isOwned}
text={isOwned ? 'Вы — владелец' : 'Стать владельцем'} text={model.isOwned ? 'Вы — владелец' : 'Стать владельцем'}
icon={<LuCrown size='1rem' className={isOwned ? 'clr-text-success' : ''} />} icon={<LuCrown size='1rem' className={model.isOwned ? 'clr-text-success' : ''} />}
onClick={!isOwned && user && isClaimable ? handleClaimOwner : undefined} onClick={!model.isOwned && user && model.isClaimable ? handleClaimOwner : undefined}
/> />
<DropdownButton <DropdownButton
text='Поделиться' text='Поделиться'
@ -163,16 +171,22 @@ function RSTabsMenu({ onDestroy }: RSTabsMenuProps) {
</Dropdown> </Dropdown>
</div> </div>
{!model.isArchive ? (
<div ref={editMenu.ref}> <div ref={editMenu.ref}>
<Button <Button
dense dense
noBorder noBorder
noOutline
tabIndex={-1} tabIndex={-1}
title={'Редактирование'} title={'Редактирование'}
hideTitle={editMenu.isOpen} hideTitle={editMenu.isOpen}
className='h-full' className='h-full'
style={{ outlineColor: 'transparent' }} icon={
icon={<FiEdit size='1.25rem' className={controller.isMutable ? 'clr-text-success' : 'clr-text-warning'} />} <FiEdit
size='1.25rem'
className={!user ? 'clr-text-controls' : controller.isMutable ? 'clr-text-success' : 'clr-text-warning'}
/>
}
onClick={editMenu.toggle} onClick={editMenu.toggle}
/> />
<Dropdown isOpen={editMenu.isOpen}> <Dropdown isOpen={editMenu.isOpen}>
@ -199,16 +213,31 @@ function RSTabsMenu({ onDestroy }: RSTabsMenuProps) {
/> />
</Dropdown> </Dropdown>
</div> </div>
) : null}
{model.isArchive ? (
<Button
dense
noBorder
noOutline
tabIndex={-1}
title={'Редактирование запрещено - Архив'}
hideTitle={accessMenu.isOpen}
className='h-full'
icon={<LuAlertCircle size='1.25rem' className='clr-text-primary' />}
onClick={handleGotoCurrent}
/>
) : null}
{user ? (
<div ref={accessMenu.ref}> <div ref={accessMenu.ref}>
<Button <Button
dense dense
noBorder noBorder
noOutline
tabIndex={-1} tabIndex={-1}
title={`Режим ${labelAccessMode(mode)}`} title={`Режим ${labelAccessMode(mode)}`}
hideTitle={accessMenu.isOpen} hideTitle={accessMenu.isOpen}
className='h-full pr-2' className='h-full pr-2'
style={{ outlineColor: 'transparent' }}
icon={ icon={
mode === UserAccessMode.ADMIN ? ( mode === UserAccessMode.ADMIN ? (
<BiMeteor size='1.25rem' className='clr-text-primary' /> <BiMeteor size='1.25rem' className='clr-text-primary' />
@ -228,10 +257,10 @@ function RSTabsMenu({ onDestroy }: RSTabsMenuProps) {
onClick={() => handleChangeMode(UserAccessMode.READER)} onClick={() => handleChangeMode(UserAccessMode.READER)}
/> />
<DropdownButton <DropdownButton
disabled={!isOwned} disabled={!model.isOwned}
text={labelAccessMode(UserAccessMode.OWNER)} text={labelAccessMode(UserAccessMode.OWNER)}
title={describeAccessMode(UserAccessMode.OWNER)} title={describeAccessMode(UserAccessMode.OWNER)}
icon={<LuCrown size='1rem' className={isOwned ? 'clr-text-primary' : ''} />} icon={<LuCrown size='1rem' className={model.isOwned ? 'clr-text-primary' : ''} />}
onClick={() => handleChangeMode(UserAccessMode.OWNER)} onClick={() => handleChangeMode(UserAccessMode.OWNER)}
/> />
<DropdownButton <DropdownButton
@ -243,6 +272,20 @@ function RSTabsMenu({ onDestroy }: RSTabsMenuProps) {
/> />
</Dropdown> </Dropdown>
</div> </div>
) : null}
{!user ? (
<Button
dense
noBorder
noOutline
tabIndex={-1}
title={'Анонимный режим. Чтобы использовать все функции войдите в Портал'}
hideTitle={accessMenu.isOpen}
className='h-full pr-2'
icon={<LuAlertTriangle size='1.25rem' className='clr-text-warning' />}
onClick={handleLogin}
/>
) : null}
</div> </div>
); );
} }