ConceptPortal-public/rsconcept/frontend/src/dialogs/DlgEditEditors/DlgEditEditors.tsx

76 lines
2.2 KiB
TypeScript
Raw Normal View History

2024-05-27 20:42:34 +03:00
'use client';
import clsx from 'clsx';
import { useState } from 'react';
2024-05-27 20:42:34 +03:00
import { useUsers } from '@/backend/users/useUsers';
2024-05-27 20:42:34 +03:00
import { IconRemove } from '@/components/Icons';
import SelectUser from '@/components/select/SelectUser';
import Label from '@/components/ui/Label';
import MiniButton from '@/components/ui/MiniButton';
import Modal from '@/components/ui/Modal';
import { UserID } from '@/models/user';
import { useDialogsStore } from '@/stores/dialogs';
2024-05-27 20:42:34 +03:00
import TableUsers from './TableUsers';
2024-05-27 20:42:34 +03:00
export interface DlgEditEditorsProps {
2024-05-27 20:42:34 +03:00
editors: UserID[];
onChangeEditors: (newValue: UserID[]) => void;
2024-05-27 20:42:34 +03:00
}
function DlgEditEditors() {
const { editors, onChangeEditors } = useDialogsStore(state => state.props as DlgEditEditorsProps);
2024-05-27 20:42:34 +03:00
const [selected, setSelected] = useState<UserID[]>(editors);
const { users } = useUsers();
function handleSubmit() {
onChangeEditors(selected);
2025-02-06 14:10:18 +03:00
return true;
2024-05-27 20:42:34 +03:00
}
function onDeleteEditor(target: UserID) {
setSelected(prev => prev.filter(id => id !== target));
}
2024-05-27 20:42:34 +03:00
function onAddEditor(target: UserID) {
setSelected(prev => [...prev, target]);
}
2024-05-27 20:42:34 +03:00
return (
<Modal
canSubmit
header='Список редакторов'
submitText='Сохранить список'
className='flex flex-col w-[35rem] px-6 gap-3 pb-6'
onSubmit={handleSubmit}
>
<div className={clsx('flex self-center items-center', 'text-sm font-semibold')}>
<span>Всего редакторов [{selected.length}]</span>
<MiniButton
noHover
title='Очистить список'
className='py-0'
icon={<IconRemove size='1.5rem' className='icon-red' />}
disabled={selected.length === 0}
onClick={() => setSelected([])}
/>
</div>
<TableUsers items={users.filter(user => selected.includes(user.id))} onDelete={onDeleteEditor} />
2024-05-27 20:42:34 +03:00
<div className='flex items-center gap-3'>
<Label text='Добавить' />
<SelectUser
filter={id => !selected.includes(id)}
value={undefined}
onChange={onAddEditor}
className='w-[25rem]'
/>
2024-05-27 20:42:34 +03:00
</div>
</Modal>
);
}
export default DlgEditEditors;